【文章內(nèi)容簡介】
0)部分所在地點(diǎn)CREATE TABLE dept( deptno INT, dname varchar(50), loc varchar(50))。INSERT INTO dept values(10, 39。ACCOUNTING39。, 39。NEW YORK39。)。INSERT INTO dept values(20, 39。RESEARCH39。, 39。DALLAS39。)。INSERT INTO dept values(30, 39。SALES39。, 39。CHICAGO39。)。INSERT INTO dept values(40, 39。OPERATIONS39。, 39。BOSTON39。)。1 基礎(chǔ)查詢 查詢所有列SELECT * FROM student?!〔樵冎付蠸ELECT sid, sname, age FROM student。2 條件查詢 條件查詢介紹條件查詢就是在查詢時(shí)給出WHERE子句,在WHERE子句中可以使用如下運(yùn)算符及關(guān)鍵字:l =、!=、=、=;l BETWEEN…AND;l IN(set);l IS NULL;l AND;l OR;l NOT; 查詢性別為女,并且年齡小于50的記錄 SELECT * FROM student WHERE gender=39。female39。 AND age50?!〔樵儗W(xué)號為S_1001,或者姓名為liSi的記錄SELECT * FROM student WHERE sid =39。S_100139。 OR sname=39。liSi39?!〔樵儗W(xué)號為S_1001,S_1002,S_1003的記錄SELECT * FROM student WHERE sid IN (39。S_100139。,39。S_100239。,39。S_100339。)?!〔樵儗W(xué)號不是S_1001,S_1002,S_1003的記錄SELECT * FROM tab_studentdent WHERE s_number NOT IN (39。S_100139。,39。S_100239。,39。S_100339。)?!〔樵兡挲g為null的記錄SELECT * FROM studentWHERE age IS NULL?!〔樵兡挲g在20到40之間的學(xué)生記錄SELECT * FROM studentWHERE age=20 AND age=40?;蛘逽ELECT * FROM student WHERE age BETWEEN 20 AND 40?!〔樵冃詣e非男的學(xué)生記錄SELECT * FROM studentWHERE gender!=39。male39?;蛘逽ELECT * FROM studentWHERE gender39。male39?;蛘逽ELECT * FROM studentWHERE NOT gender=39。male39。 查詢姓名不為null的學(xué)生記錄SELECT * FROM studentWHERE NOT sname IS NULL?;蛘逽ELECT * FROM studentWHERE sname IS NOT NULL。3 模糊查詢當(dāng)想查詢姓名中包含a字母的學(xué)生時(shí)就需要使用模糊查詢了。模糊查詢需要使用關(guān)鍵字LIKE?!〔樵冃彰?個(gè)字母構(gòu)成的學(xué)生記錄SELECT * FROM studentWHERE sname LIKE 39。_____39。模糊查詢必須使用LIKE關(guān)鍵字。其中 “_”匹配任意一個(gè)字母,5個(gè)“_”表示5個(gè)任意字母。 查詢姓名由5個(gè)字母構(gòu)成,并且第5個(gè)字母為“i”的學(xué)生記錄SELECT * FROM studentWHERE sname LIKE 39。____i39?!〔樵冃彰浴皕”開頭的學(xué)生記錄SELECT * FROM studentWHERE sname LIKE 39。z%39。其中“%”匹配0~n個(gè)任何字母?!〔樵冃彰械?個(gè)字母為“i”的學(xué)生記錄SELECT * FROM studentWHERE sname LIKE 39。_i%39。 查詢姓名中包含“a”字母的學(xué)生記錄SELECT * FROM studentWHERE sname LIKE 39。%a%39。4 字段控制查詢 去除重復(fù)記錄去除重復(fù)記錄(兩行或兩行以上記錄中系列的上的數(shù)據(jù)都相同),例如emp表中sal字段就存在相同的記錄。當(dāng)只查詢emp表的sal字段時(shí),那么會出現(xiàn)重復(fù)記錄,那么想去除重復(fù)記錄,需要使用DISTINCT:SELECT DISTINCT sal FROM emp?!〔榭垂蛦T的月薪與傭金之和 因?yàn)閟al和m兩列的類型都是數(shù)值類型,所以可以做加運(yùn)算。如果sal或m中有一個(gè)字段不是數(shù)值類型,那么會出錯(cuò)。SELECT *,sal+m FROM emp。m列有很多記錄的值為NULL,因?yàn)槿魏螙|西與NULL相加結(jié)果還是NULL,所以結(jié)算結(jié)果可能會出現(xiàn)NULL。下面使用了把NULL轉(zhuǎn)換成數(shù)值0的函數(shù)IFNULL:SELECT *,sal+IFNULL(m,0) FROM emp?!〗o列名添加別名在上面查詢中出現(xiàn)列名為sal+IFNULL(m,0),這很不美觀,現(xiàn)在我們給這一列給出一個(gè)別名,為total:SELECT *, sal+IFNULL(m,0) AS total FROM emp。給列起別名時(shí),是可以省略AS關(guān)鍵字的:SELECT *,sal+IFNULL(m,0) total FROM emp。5 排序 查詢所有學(xué)生記錄,按年齡升序排序SELECT *FROM studentORDER BY sage ASC?;蛘逽ELECT *FROM studentORDER BY sage。 查詢所有學(xué)生記錄,按年齡降序排序SELECT *FROM studentORDER BY age DESC。 查詢所有雇員,按月薪降序排序,如果月薪相同時(shí),按編號升序排序SELECT * FROM empORDER BY sal DESC,empno ASC。6 聚合函數(shù)聚合函數(shù)是用來做縱向運(yùn)算的函數(shù):l COUNT():統(tǒng)計(jì)指定列不為NULL的記錄行數(shù);l MAX():計(jì)算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算;l MIN():計(jì)算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算;l SUM():計(jì)算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;l AVG():計(jì)算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0; COUNT當(dāng)需要縱向統(tǒng)計(jì)時(shí)可以使用COUNT()。l 查詢emp表中記錄數(shù):SELECT COUNT(*) AS t FROM emp。l 查詢emp表中有傭金的人數(shù):SELECT COUNT(m) t FROM emp。注意,因?yàn)閏ount()函數(shù)中給出的是m列,那么只統(tǒng)計(jì)m列非NULL的行數(shù)。l 查詢emp表中月薪大于2500的人數(shù):SELECT COUNT(*) FROM empWHERE sal 2500。l 統(tǒng)計(jì)月薪與傭金之和大于2500元的人數(shù):SELECT COUNT(*) AS t FROM emp WHERE sal+IFNULL(m,0) 2500。l 查詢有傭金的人數(shù),以及有領(lǐng)導(dǎo)的人數(shù):SELECT COUNT(m), COUNT(mgr) FROM emp?!UM和AVG當(dāng)需要縱向求和時(shí)使用sum()函數(shù)。l 查詢所有雇員月薪和:SELECT SUM(sal) FROM emp。l 查詢所有雇員月薪和,以及所有雇員傭金和:SELECT SUM(sal), SUM(m) FROM emp。l 查詢所有雇員月薪+傭金和:SELECT SUM(sal+IFNULL(m,0)) FROM emp。l 統(tǒng)計(jì)所有員工平均工資:SELECT SUM(sal), COUNT(sal) FROM emp。或者SELECT AVG(sal) FROM emp?!AX和MINl 查詢最高工資和最低工資:SELECT MAX(sal), MIN(sal) FROM emp。7 分組查詢當(dāng)需要分組查詢時(shí)需要使用GROUP BY子句,例如查詢每個(gè)部門的工資和,這說明要使用部分來分組。 分組查詢l 查詢每個(gè)部門的部門編號和每個(gè)部門的工資和:SELECT deptno, SUM(sal)FROM empGROUP BY deptno。l 查詢每個(gè)部門的部門編號以及每個(gè)部門的人數(shù):SELECT deptno,COUNT(*)FROM empGROUP BY deptno。l 查詢每個(gè)部門的部門編號以及每個(gè)部門工資大于1500的人數(shù):SELECT deptno,COUNT(*)FROM empWHERE sal1500GROUP BY deptno。 HAVING子句l 查詢工資總和大于9000的部門編號以及工資和:SELECT deptno, SUM(sal)FROM empGROUP BY deptnoHAVING SUM(sal) 9000?! ∽⒁?,WHERE是對分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那么這行記錄不會參加分組;而HAVING是對分組后數(shù)據(jù)的約束。8 LIMITLIMIT用來限定查詢結(jié)果的起始行,以及總行數(shù)?!〔樵?行記錄,起始行從0開始SELECT * FROM emp LIMIT 0, 5。注意,起始行從0開始,即第一行開始! 查詢10行記錄,起始行從3開始SELECT * FROM emp LIMIT 3, 10?!》猪摬樵?nèi)绻豁撚涗洖?0條,希望查看第3頁記錄應(yīng)該怎么查呢?l 第一頁記錄起始行為0,一共查詢10行;l 第二頁記錄起始行為10,一共查詢10行;l 第三頁記錄起始行為20,一共查詢10行;完整性約束 完整性約束是為了表的數(shù)據(jù)的正確性