SQL基本語(yǔ)法入門(mén) 看這里就夠了

SQL執(zhí)行順序

第一步:執(zhí)行FROM

第二步:WHERE條件過(guò)濾

第三步:GROUP BY 分組

第四步:執(zhí)行SELECT 投影列

第五步:HAVING條件過(guò)濾

第六步:執(zhí)行ORDER BY排序

一、創(chuàng)建、刪除庫(kù)

-- 創(chuàng)建新數(shù)據(jù)庫(kù)

CREATE DATABASE 數(shù)據(jù)庫(kù)名;

-- 刪除數(shù)據(jù)庫(kù)

DROP DATABASE 數(shù)據(jù)庫(kù)名;

二、增加

1、添加列名、設(shè)置主鍵、設(shè)置自動(dòng)增長(zhǎng)列

primary key表示當(dāng)前列為主鍵列,不能重復(fù),不能為空

out_increment表示當(dāng)前列為自動(dòng)增長(zhǎng)列,由DBMS分配該列的值,可以保證不重復(fù)

CREATE TABLE t_user(

? ? id INT PRIMARY KEY AUTO_INCREMENT, -- 編號(hào)

? ? userName VARCHAR(20),-- 用戶(hù)名

? ? birthday DATE,-- 生日

? ? tel CHAR(11),-- 電話(huà)

? ? -- 枚舉類(lèi)型,該列的值只能取男和女

? ? sex ENUM('男','女'),

? ? -- 性別 -- 最后一列不能加“,”。

? ? money INT -- 賬戶(hù)余額

);

2.添加行(新增記錄)

①如果添加多條信息,中間用","分割。VALUES只用寫(xiě)一次,寫(xiě)在表頭和表值之間。

②如果列名和列的值不寫(xiě),則默認(rèn)添加為空(null),如果數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)存在默認(rèn)值,則為添加默認(rèn)值?!?019/11/09更新,感謝評(píng)論糾正。

INSERT INTO t_user(表頭1,表頭2) values(值1,值2);

例如:

INSERT INTO t_user(userName,pwd,birthday,tel,sex,money)

VALUES ('張無(wú)忌','123','1980-05-09','13948577789','男',2000);

例如:

INSERT INTO t_student(userName,pwd,birthday,tel,sex)

VALUES('張勇','111','1998-01-01','13112341234','男');

3.添加列(維護(hù)常用)

-- t_student:表名;address:表頭。

ALTER TABLE t_student ADD address VARCHAR(50);

三、刪除

1.刪除表

-- t_user:表名

DROP TABLE t_user;

2.刪除列

-- t_student:表名;userAddress:列名

ALTER TABLE t_student DROP COLUMN userAddress;

3.刪除行(記錄)

-- 如果不加where 后面的條件則全部刪除。

DELETE FROM t_user WHERE id=2;

四、修改

1、修改列

修改列的值必須與修改后的類(lèi)型相符,如果修改列的值為null,則可以改為任意類(lèi)型。如果修改列的值類(lèi)型為varchar,最長(zhǎng)為20,則修改后的類(lèi)型必須為char類(lèi)型,長(zhǎng)度不能低于20。

ALTER TABLE t_student CHANGE address userAddress VARCHAR(100);

2、修改值

UPDATE t_product SET 修改列名=修改后新值 WHERE id=1;

-- 修改,將張無(wú)忌的密碼修改為333,工資修改為2500

UPDATE t_user SET pwd='333',money='2500' WHERE userName='張無(wú)忌';

五、查詢(xún)

1、查詢(xún)表中所有數(shù)據(jù)

?*表示顯示所有的列,也可以指定顯示列的列表,中間用","分割。

SELECT * FROM t_user;

-- 例如(顯示姓名和工資列):

select userName,money from t_user

2、查詢(xún)返回限定行

第一個(gè)參數(shù)為起始記錄數(shù),從0開(kāi)始,第二個(gè)參數(shù)為顯示記錄數(shù)

-- MySQL語(yǔ)法

SELECT * FROM t_student LIMIT 0,3;

3、查詢(xún)空值null

null不能用=,只能用is null 或 is not null

SELECT *FROM t_student WHERE money IS NULL;

4、查詢(xún)多條信息(or/in)

-- 查詢(xún)張三和李四的信息

SELECT * FROM t_student WHERE userName='張三' OR userName='李四';

SELECT * FROM t_student WHERE userName IN('張三','李四');

5、模糊查詢(xún)(_或%)

-- 查詢(xún)姓李的二個(gè)字的員工

SELECT * FROM t_student WHERE userName LIKE '李_';

-- 查詢(xún)出所有商品名包括“糕”的商品的信息

SELECT * FROM t_product WHERE productName LIKE '%糕%';

6、查詢(xún)多條件+顯示部分(LIMIT)

-- 查詢(xún)前5條價(jià)格在100-1000的酒類(lèi)商品 (MySQL語(yǔ)法)

SELECT * FROM t_product WHERE productType='酒類(lèi)' AND price>=100 AND price<=1000 LIMIT 0,5 ;

7、查詢(xún)?nèi)コ貜?fù)的類(lèi)名(distinct)

-- 查詢(xún)所有的性別,distinct 表示去除重復(fù)記錄

SELECT DISTINCT sex FROM t_student;

8、查詢(xún)排序顯示(ORDER BY)

-- 按員工工資排序,默認(rèn)為升序ASC,降序需要加上DESC。

-- 工資相同,按年齡大小排序。

SELECT * FROM t_student ORDER BY money DESC,birthday;

9、查詢(xún)當(dāng)前日期

select curdate() from 表名

六、判斷語(yǔ)句

1、單分支條件判斷

if(條件,返回值1,返回值2)

-- 例如:

select s.*,if(grade>=60,'合格','不合格')appraise from t_students;

2、多分支條件判斷

(case

when 條件1 then 返回值1

when 條件2 then 返回值2

else 返回值3 END)

-- 例子1(選擇顯示):

SELECT p.*,(CASE

? ? ? ? ? ? WHEN money<5000 THEN '低薪階層'

? ? ? ? ? ? WHEN money>=5000 AND money<=10000 THEN '中薪階層'

? ? ? ? ? ? WHEN money>10000 THEN '高薪階層'

? ? ? ? ? ? ELSE '實(shí)習(xí)生' END) grade FROM t_student p;

-- 例子2(選擇添加):

UPDATE t_product SET price =price+(CASE

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN productType='藥品類(lèi)' THEN 5

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN productType='食品類(lèi)' THEN 2

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN productType='酒類(lèi)' THEN 100 END);

七、聚合函數(shù)的運(yùn)用

-- 學(xué)生成績(jī)表

CREATE TABLE t_grade(

? ? id INT PRIMARY KEY AUTO_INCREMENT,-- id 主鍵

? ? sname VARCHAR(20),-- 學(xué)生姓名

? ? sex ENUM('男','女'),-- 學(xué)生性別

? ? className VARCHAR(20),-- 學(xué)生班級(jí)

? ? grade INT -- 學(xué)生成績(jī)

);

a.統(tǒng)計(jì)學(xué)生的人數(shù)

-- count(*)只要是記錄都要統(tǒng)計(jì)。count(列名)只統(tǒng)計(jì)非空列。

SELECT COUNT(*) '學(xué)生總?cè)藬?shù)', COUNT(grade)'參考人數(shù)' FROM t_grade;

b.統(tǒng)計(jì)學(xué)生的總分、平均分、最高分、最低分

-- avg求平均分,也只統(tǒng)計(jì)非空列

SELECT SUM(grade) ,AVG(grade),SUM(grade)/COUNT(*), MAX(grade),MIN(grade) FROM t_grade

c.統(tǒng)計(jì)每個(gè)班的人數(shù)

SELECT className,COUNT(*) num FROM t_grade GROUP BY className;

d.統(tǒng)計(jì)每個(gè)班的總分和平均分

SELECT className,SUM(grade)'總分',SUM(grade)/COUNT(*) '平均分' FROM t_grade GROUP BY className;

八、having運(yùn)用

-- 列出班級(jí)人數(shù)小于等于3個(gè)人的班級(jí)

SELECT className,COUNT(*) FROM t_grade GROUP BY className HAVING COUNT(*)<=3;

-- 列出班級(jí)總分大于300分的班級(jí)

SELECT className,SUM(grade) FROM t_grade GROUP BY className HAVING SUM(grade)>300;

九、復(fù)制表

create table 新表名 select * from 原表名;

十、where與if條件連用

WHERE ?IF(條件, ?true執(zhí)行條件, false執(zhí)行條件 )

select * from sys_user where if(id<10,name='zhangsan',name='lisi')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容