前言
上文我們已經講解了MySQL/MariaDB的基礎知識和DDL相關操作,接下來我們來說一下MySQL/MariaDB的DML操作,因select查詢較復雜也較重要,所以本文主要是對select查詢的詳解。
DML操作
DML之select
投影查詢
select col_name,[col_name1,...] from table_name; select * from table_name ;#顯示全表 遍歷整張數據表,但對系統資源消耗較大,再進行大數據量的查詢時,禁止使用這類操作
條件查詢
select col_name,[col_name1,...] from table_name where where_definition #條件比較操作符 = #等值比較 <=> #等值比較,包括與NULL的安全比較 <>或!= #不等值比較 <,<=,>,>= #其它比較符 IN #指定范圍內值的存在性測試 BETWEEN … AND … #在某取值范圍內 IS NULL #是否為空值 IS NOT NULL #是否為非空 LIKE #可使用通配符:%, _ RLIKE或REGEXP #可使用正則表達式的模式 #邏輯操作符 AND OR NOT
聚合查詢
AVG():平均值 SUM():總和 MAX():最大值 MIN():最小值 COUNT():記錄總數
子句修飾符
GROUP BY #對符合條件的結果進行分組 HAVING: 對聚合查詢的結果做過濾 ORDER BY col1[,col2] {ASC|DESC} #排序 LIMIT [Offset,]count #限制輸出行數
select執行流程
FROM --> WHERE --> GROUP BY --> HAVING --> ORDER BY --> SELECT --> LIMIT
連接查詢
事先將兩張或多張表執行相應的join操作,而后根據join結果做查詢
CROSS JOIN:笛卡爾積,交叉連接 select * from tab1,tab2; INNER JOIN:內連接 #等值連接 select * from tab1 inner join tab2 on tab1.col_name = tab2.col_name OUTER JOIN:外連接 LEFT OUTER JOIN:左外連接 select s.name as student,t.name as teacher from students as s lift join teachers as t on s.TeacherID = t.TID; RIGHT OUTER JOIN:右外連接 select s.name as student,t.name as teacher from students as s right join teachers as t on s.TeacherID = t.TID; NATURAL JOIN:自然連接,等值連接 select tab1.col_name,tab2.col_name from tab1,tab2 where tab1.col_name = tab2.col_name;
子查詢
基于某查詢語句的結果再次進行的查詢
用于where子句的子查詢
①用于比較表達式中的子查詢 要求子查詢只能返回單個結果 select Name,Age from students where Age > (select AVG(Age) from students); ②用于in中的子查詢 判斷是否存在于指定的列表中 select Name from students where StuID in (select TID from teschers); ③用于exists中子查詢
用于from中的子查詢
select alias.col,... from (select statement) as alias where clause select s.Name from (select * from students where Age > 20) as s where s.Name like 's%';
注:MySQL/MariaDB在子查詢優化方面并不成熟,所以盡量避免使用子查詢
聯合查詢
將兩外或多個返回值字段相同的查詢的結果合并輸出
select statement union select statement select Name,Age from teachers where Age>=40 union select Name,Age from students where Age>=40;
select實戰
表結構
以ClassID分組,顯示每班的同學的人數
以Gender分組,顯示其年齡之和
以ClassID分組,顯示其平均年齡大于25的班級
以Gender分組,顯示各組中年齡大于25的學員的年齡之和
顯示前5位同學的姓名、課程及成績
顯示其成績高于80的同學的名稱及課程
求前8位同學每位同學自己兩門課的平均成績,并按降序排列
顯示每門課程課程名稱及學習了這門課的同學的個數
顯示其年齡大于平均年齡的同學的名字
統計各班級中年齡大于全校同學平均年齡的人數
The end
好了,select查詢就先說到這里了,看起來select就這么點東西,其實要真正用好并不容易,所以小伙伴們多加練習吧,后續文章還會繼續講解MySQL/MariaDB系列的知識,有興趣的可繼續關注哦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/4064