子查詢和分組查詢
阿新 • • 發佈:2018-12-04
一、子查詢
什麼是子查詢?
一個查詢語句裡面巢狀一個查詢。外層的叫做符查詢,內層裡面巢狀的叫做子查詢。
語法:
select ....... from 表名 where 欄位 比較運算子 (子查詢);
#其中,在查詢過程中,先執行子查詢部分,求出子查詢部分的值,再執行整個父查詢,返回最後的結果。
注意:將子查詢和比較運算子聯合使用時,必須保證子查詢返回的值只有一個,否則比較運算子必須用 IN。
使用 IN 關鍵字可以使父查詢匹配子查詢返回多個單欄位值,也就是可以返回多個值。
示例:
#使用IN子查詢 SELECT studentNo,studentName FROM student WHERE studentNo IN ( SELECT studentNo FROM result WHERE subjectNo=( SELECT subjectNo FROM `subject` WHERE subjectName ='Logic Java' )AND examDate =( SELECT MAX(examDate) FROM result WHERE subjectNo=( SELECT subjectNo FROM `subject` WHERE subjectName ='Logic Java' ) ) );
二、分組查詢
1.使用group by 分組查詢:
示例:
#使用group by 子句實現查詢
select subjectNo,avg(studentResult) as 課程平均成績
from result
group by subjectNo;
多列分組查詢:
#統計每個學期的男,女人數
select count(*) as 人數,gradeId AS 年級,sex as 性別
from student
group by grade ,sex
order by grade;
注意:在使用group by分組查詢時,在select 後面的列的是限制的,一般允許如下:
- group by 子句後的列
- 聚合函式計算出的列
2.使用HAVING 子句進行分則查詢
#使用having子句對分組後的資料進行篩選
select count(*) as 人數,gradeId AS 年級 from student
group by gradeId
having count(*) >3;
#注意:having 子句必須是寫在分組後面的
使用子句查詢的順序:
where > group by > having > order by > limit ;
如下所示:
#分組查詢 select 列 from 表 where 分組前條件 group by 分組列 having 分組後條件 order by 排序列 limit 分頁;