DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解
一、SELECT語(yǔ)法-排序
SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] } FROM table_name [ as table_ alias ] [ left|out|inner join table_name2 ] //多表連接查詢 [ WHERE … ] //指定結(jié)果需滿足的條件 [ GROUP BY …] //指定結(jié)果按照哪幾個(gè)字段來分組 [ HAVING …] //過濾分組的記錄必須滿足的次要條件 [ ORDER BY… ] //指定查詢記錄按一個(gè)或者多個(gè)條件排序 [ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; //分頁(yè)查詢
排序可以是升序(ASC)或者降序(DESC),如果不指定ASC或DESC,結(jié)果集默認(rèn)按ASC升序排序:
如以下
//把成績(jī)都降低10%后加5分,再查詢及格成績(jī),并按照成績(jī)從高到低排序。 SELECT studentno AS 學(xué)生編號(hào),(studentresult*0.9+5 ) AS 綜合成績(jī) FROM `result` WHERE (`studentresult`*0.9+5) >=60 ORDER BY studentresult DESC;
//把成績(jī)都降低10%后加5分,再查詢及格成績(jī),并按照成績(jī)從高到低排序,如果成績(jī) //相同,再按照課程編號(hào)進(jìn)行排序。 SELECT studentno AS 學(xué)生編號(hào),(studentresult*0.9+5 ) AS 綜合成績(jī) FROM `result` WHERE (`studentresult`*0.9+5) >=60 ORDER BY studentresult DESC,subjectno;
二、SELECT語(yǔ)法-分頁(yè)查詢
SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] } FROM table_name [ as table_ alias ] [ left|out|inner join table_name2 ] //多表連接查詢 [ WHERE … ] //指定結(jié)果需滿足的條件 [ GROUP BY …] //指定結(jié)果按照哪幾個(gè)字段來分組 [ HAVING …] //過濾分組的記錄必須滿足的次要條件 [ ORDER BY… ] //指定查詢記錄按一個(gè)或者多個(gè)條件排序 [ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; //分頁(yè)查詢 offset://偏移量 row_count://顯示的記錄數(shù) LIMIT //LIMIT 子句:MySQL查詢語(yǔ)句中使用LIMIT子句限制結(jié)果集 如:SELECT studentno,studentresult FROM result WHERE subjectno=1 AND YEAR(examdate)=2019 ORDER BY studentresult DESC LIMIT 5 //限制顯示的結(jié)果集的行數(shù),只顯示5條
三、SELECT語(yǔ)法-分組查詢
SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] } FROM table_name [ as table_ alias ] [ left|out|inner join table_name2 ] //多表連接查詢 [ WHERE … ] //指定結(jié)果需滿足的條件 [ GROUP BY …] //指定結(jié)果按照哪幾個(gè)字段來分組 [ HAVING …] //過濾分組的記錄必須滿足的次要條件 [ ORDER BY… ] //指定查詢記錄按一個(gè)或者多個(gè)條件排序 [ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; //分頁(yè)查詢 GROUP BY作用:使用GROUP BY關(guān)鍵字對(duì)查詢結(jié)果分組 對(duì)所有的數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì) 分組的依據(jù)字段可以有多個(gè),并依次分組 與HAVING結(jié)合使用,進(jìn)行分組后的數(shù)據(jù)篩選 GROUP BY子句經(jīng)常和聚合函數(shù)結(jié)合使用完成分組統(tǒng)計(jì)功能
四、WHERE與HAVING對(duì)比
WHERE子句
用來篩選 FROM 子句中指定的操作所產(chǎn)生的行
GROUP BY子句
用來分組 WHERE 子句的輸出
HAVING子句
用來從分組的結(jié)果中篩選行
五、子查詢
基本語(yǔ)法:
SELECT … FROM 表名 WHERE 字段X 比較運(yùn)算符(子查詢)
1.外層查詢稱為父查詢,圓括號(hào)中的查詢稱為子查詢。
2.執(zhí)行SQL語(yǔ)句時(shí),先執(zhí)行子查詢,返回所有來自子查詢的結(jié)果,再執(zhí)行外圍的父查詢,返回查詢的最終結(jié)果。
3.將子查詢和比較運(yùn)算符聯(lián)合使用,必須保證子查詢返回的值不能多于一個(gè)。
1、IN子查詢
IN后面的子查詢可以返回多條記錄。
SELECT … FROM 表名 WHERE 字段X IN(子查詢)
2、EXISTS子查詢
EXISTS 子查詢:帶有EXISTS的子查詢不返回任何記錄的數(shù)據(jù),只返回邏輯值“True”或“False”。
有結(jié)果為“True”,執(zhí)行語(yǔ)句;無結(jié)果為“False”,不執(zhí)行語(yǔ)句。
子查詢有返回結(jié)果: EXISTS子查詢結(jié)果為TRUE,執(zhí)行外層查詢;
子查詢無返回結(jié)果: EXISTS子查詢結(jié)果為FALSE, 外層查詢不執(zhí)行;
SELECT …… FROM 表名 WHERE EXISTS(子查詢);
六、多表連接查詢
1、內(nèi)連接
內(nèi)連接使用比較運(yùn)算符根據(jù)每個(gè)表的通用列中的值匹配兩個(gè)表中的行。
SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 表1.通用字段名=表2.通用字段名 SELECT 字段列表 FROM 表1 ,表2 WHERE 表1.通用字段名=表2.通用字段名
需要注意的是:
如果兩個(gè)表中有相同的字段名,必須在列名前加表名。否則將出現(xiàn) 錯(cuò)誤代碼:1052 Column ‘studentno’ in field
list is ambiguous
查詢學(xué)生的學(xué)號(hào)、姓名和成績(jī),并按照成績(jī)降序排列 //第一種寫法 SELECT s.studentno,s.studentname,r.studentresult FROM student AS s INNER JOIN result AS r ON s.studentno=r.studentno ORDER BY r.studentresult DESC //第二種寫法 SELECT s.studentno,s.studentname,r.studentresult FROM student AS s,result AS r WHERE s.studentno=r.studentno ORDER BY r.studentresult DESC
2、多表內(nèi)連接
ELECT 字段列表 FROM 表1 join 表2 on 表1.通用字段名=表2.通用字段名 join 表3 on 表1.通用字段名=表3.通用字段名 join 表4 on 表4.通用字段名=表3.通用字段名;
3、左外連接
左表(表1)的記錄將會(huì)全部表示出來,而右表(表2)只會(huì)顯示符合匹配條件的記錄。如圖:
匹配,返回到結(jié)果集
無匹配,NULL值返回到結(jié)果集
SELECT 字段列表 FROM 表1 LEFT JOIN 表2 ON 表1.通用字段名=表2.通用字段名
4、右外連接
右外連接:右表(表2)的記錄將會(huì)全部表示出來,而左表(表1)只會(huì)顯示符合匹配條件的記錄。如圖:
匹配,返回到結(jié)果集
無匹配,NULL值返回到結(jié)果集
SELECT 字段列表 FROM 表1 RIGHT JOIN 表2 ON 表1.通用字段名=表2.通用字段名
5、自連接
自連接查詢其實(shí)等同于連接查詢,需要兩張表,只不過它的左表(父表)和右表(子表)都是自己。做自連接查詢的時(shí)候,是自己和自己連接,分別給父表和子表取兩個(gè)不同的別名,然后附上連接條件。
SELECT c1.cname AS "父名稱",c2.cname AS "子名稱" FROM tbl_category AS c1, tbl_category AS c2 WHERE c1.cid = c2.pid;
6、不同的SQL JOIN對(duì)比
如圖片:
到此這篇關(guān)于DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)DQL命令查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解mysql的自連接和join關(guān)聯(lián)
這篇文章主要給大家介紹了關(guān)于mysql的自連接和join關(guān)聯(lián)的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04Mysql數(shù)據(jù)類型與CRUD操作詳細(xì)講解
這篇文章主要介紹了Mysql數(shù)據(jù)類型與CRUD操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10mysql報(bào)錯(cuò):Deadlock found when trying to get lock; try restarti
這篇文章主要給大家介紹了關(guān)于mysql出現(xiàn)報(bào)錯(cuò):Deadlock found when trying to get lock; try restarting transaction的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07mysql5.6批量設(shè)置表ROW_FORMAT =DYNAMIC問題
這篇文章主要介紹了mysql5.6批量設(shè)置表ROW_FORMAT =DYNAMIC問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10MySQL如何利用存儲(chǔ)過程快速生成100萬條數(shù)據(jù)詳解
在MySQL數(shù)據(jù)庫(kù)中,如果要插入上百萬級(jí)的記錄,用普通的insertinto來操作非常不現(xiàn)實(shí),速度慢人力成本高,這篇文章主要給大家介紹了關(guān)于MySQL如何利用存儲(chǔ)過程快速生成100萬條數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2021-08-08insert into … on duplicate key update / replace into 多行數(shù)據(jù)介紹
當(dāng)我插入一條數(shù)據(jù)時(shí),我要判斷(k1,k2)是否已經(jīng)存在(1條selete),若存在就update,不存在就insert2013-08-08Windows平臺(tái)下MySQL安裝與配置方法與注意事項(xiàng)
這篇文章主要介紹了Windows平臺(tái)下MySQL安裝與配置方法與注意事項(xiàng),需要的朋友可以參考下2017-04-04