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