MYSQL 的查詢語(yǔ)言——————DQL
一拆撼、DQL語(yǔ)言基本規(guī)則
①DQL(Data Query Language):數(shù)據(jù)查詢語(yǔ)言,用來(lái)查詢記錄(數(shù)據(jù))。
②數(shù)據(jù)庫(kù)執(zhí)行DQL語(yǔ)句不會(huì)對(duì)數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫(kù)發(fā)送結(jié)果集給客戶端。查詢返回的結(jié)果集是一張?zhí)摂M表舷礼。
③查詢語(yǔ)句書(shū)寫(xiě)和執(zhí)行順序
書(shū)寫(xiě):select -from- where- group by- having- order by-limit
執(zhí)行:from - where -group by -having - select - order by-limit
二、建立數(shù)據(jù)庫(kù)表格
student表
score表
三郊闯、DQL基本語(yǔ)法
查詢關(guān)鍵字:SELECT
1妻献、基本查詢:
SELECT * FROM student //查詢student表的全部列
SELECT sno , sname FROM student //查詢表格的某些列的全部信息
2、條件查詢:
①select * from student where class = 95033;
其中“=”可換成 =团赁、!=育拨、<>(不等于)、<欢摄、<=熬丧、>、>=怀挠;等符號(hào)
“*”可換成我們想要顯示的某些列
②select * from student where sno in ( 107,109);//sno等于107析蝴,109的信息
其他條件查詢
select * from student where sno BETWEEN 107 AND 109;
select * from student where sno IS NULL绿淋;
select * from student where sno IS NULL and sno=107闷畸;
select * from student where sno IS NULL or sno=107;
select * from student where sno IS not NULL吞滞;
3佑菩、模糊查詢
select * from student where sname like "王%";//以王開(kāi)頭的姓名
select * from student where sname like "%王%";//sanme中含有“王”字的信息
select * from student where sname like "_";//”_”表示單個(gè)字母
4倘待、字段控制查詢
(1) 去除重復(fù)記錄
SELECT DISTINCT class FROM student;
(2) 相同類(lèi)型字段可做運(yùn)算疮跑,列名起別名组贺,把NULL值換為0
SELECT class+IFNULL(sno,0) AS 小名 FROM student;//別名的AS可省略
4.png
(3)排序查詢
SELECT * FROM student ORDER BY sno asc;//升序
SELECT * FROM student ORDER BY sno desc;//降序
SELECT * FROM student ORDER BY sno desc , class asc;//先sno降序凸舵,sno相同再按class升序
5、聚合函數(shù)(縱向運(yùn)算)
COUNT():統(tǒng)計(jì)指定列不為NULL的記錄行數(shù)失尖;
SELECT count(1) FROM student ;
SELECT count(1) FROM student where sno=107;
MAX():計(jì)算指定列的最大值啊奄,如果指定列是字符串類(lèi)型,使用字符串排序運(yùn)算掀潮;
SELECT MAX(sno) FROM student ;
MIN():計(jì)算指定列的最小值菇夸,如果指定列是字符串類(lèi)型,使用字符串排序運(yùn)算仪吧;
SELECT MIN(sno) FROM student ;
SUM():計(jì)算指定列的數(shù)值和庄新,如果指定列類(lèi)型不是數(shù)值類(lèi)型,計(jì)算結(jié)果為0薯鼠;
SLECT SUM(sno) FROM student ;
AVG():計(jì)算指定列的平均值择诈,如果指定列類(lèi)型不是數(shù)值類(lèi)型,那么計(jì)算結(jié)果為0出皇;
SELECT AVG(sno) FROM student ;
6羞芍、分組查詢
1、凡和聚合函數(shù)同時(shí)出現(xiàn)的列名郊艘,則一定要寫(xiě)在group by 之后
SELECT class, count(1) FROM student group by class ;
2荷科、對(duì)分組后限定的HAVING 子句
SELECT class, count(1) FROM student group by class HAVING count(1) >=2;
注:having與where的區(qū)別:
1.having是在分組后對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,where是在分組前對(duì)數(shù)據(jù)進(jìn)行過(guò)濾
2.having后面可以使用分組函數(shù)(統(tǒng)計(jì)函數(shù)) where后面不可以使用分組函數(shù)。
3.WHERE是對(duì)分組前記錄的條件纱注,如果某行記錄沒(méi)有滿足WHERE子句的條件畏浆,那么這行記錄不會(huì)參加分組;而 HAVING是對(duì)分組后數(shù)據(jù)的約束狞贱。
7刻获、控制行數(shù)實(shí)現(xiàn)分頁(yè)查詢
若一頁(yè)行數(shù)為10;
SELECT * FROM student LIMIT 0, 9;//從0行開(kāi)始到第九行結(jié)束斥滤,為第一頁(yè)數(shù)據(jù)将鸵。
四、多表查詢
1佑颇、合并結(jié)果集(union 顶掉, union all)
SELECT* FROM student UNION SELECT * FROM student;//去除重復(fù)數(shù)據(jù)
SELECT* FROM student UNION ALL SELECT * FROM student;//不去除重復(fù)數(shù)據(jù)
注:要合并的兩表的列數(shù)、列類(lèi)型必須相同挑胸。
2痒筒、連接查詢
2.1內(nèi)連接
特點(diǎn):查詢結(jié)果必須滿足條件
SELECT * FROM student,score WHERE student.sno=score.sno ;(方言形式,可將*換成指定列)
SELECT * FROM student INNER JOIN score ON student.sno=score.sno ;(標(biāo)準(zhǔn)形式內(nèi)連接)
2.2 外連接
特點(diǎn):查詢結(jié)果必須滿足條件
①左連接是先查詢出左表(以左表為主),然后查詢右表簿透,右表中滿足條件的顯示出來(lái)移袍,不滿足條件的顯示 NULL。
SELECT * FROM student LEFT OUTER JOIN score ON student.sno=score.sno ;
②右連接就是先把右表中所有記錄都查詢出來(lái)老充,然后左表滿足條件的顯示葡盗,不滿足顯示NULL;
SELECT * FROM student RIGHT OUTER JOIN score ON student.sno=score.sno
3啡浊、子查詢
定義及形式:一個(gè)select語(yǔ)句中包含另一個(gè)完整的select語(yǔ)句觅够。 子查詢就是嵌套查詢,即SELECT中包含SELECT巷嚣,如果一條語(yǔ)句中存在兩個(gè)喘先,或兩個(gè)以上SELECT,那么就是子查詢語(yǔ)句了廷粒。
子查詢出現(xiàn)的位置:
a. where后窘拯,作為條為被查詢的一條件的一部分;
SELECT * FROM score WHERE degree > (SELECT degree FROM score WHERE cno='3-245' and sno=103);
b. from后坝茎,作表涤姊;
SELECT count(1) FROM (SELECT sno FROM score WHERE cno='3-245') test;
test為子查詢表的別名。派生表必須有自己的別名景东;
c. 當(dāng)子查詢出現(xiàn)在where后作為條件且子查詢形式為多行單列時(shí)砂轻,還可以使用如下關(guān)鍵字:
1.any
SELECT * FROM score WHERE sno = any(SELECT sno FROM score WHERE cno=’3-245’);
2.all
SELECT * FROM score WHERE degree< all(SELECT degree FROM score WHERE sno=103);
DQL語(yǔ)言到此告一段落,欲知其他內(nèi)容,請(qǐng)聽(tīng)下回分解斤吐。