Java 11---SELECT分組查詢和子查詢
阿新 • • 發佈:2018-12-22
導讀
1.GROUP BY子句
2.HAVING子句
3.巢狀子查詢
GROUP BY子句
語法:
SELECT
FROM
WHERE
GROUP BY 列1,列2...
ORDER BY;
注意:
1.執行流程 FROM->WHERE,行的篩選->GROUP BY,把行分組->SELECT,針對組的統計 ->ORDER BY,排序 2.WHERE:分組前的篩選,GROUP BY在WHERE之後 3.組函式:一個組可以得到一個結果 4.查詢時,SELECT子句出現組函式或者有GROUP BY子句["組"關係], 查詢中不能出現普通的列,但可以出現分組的列 5.可以按照多列分組,多個列值都相等的在一組
eg1:列出每個部門員工的數量,最低薪水,平均薪水,最高薪水 SELECT dept_id,COUNT(id),MIN(salary),AVG(salary),MAX(salary) FROM s_emp GROUP BY dept_id; eg2:查詢每個銷售對應的客戶數量,銷售編號,銷售名字 SELECT c.sales_rep_id,COUNT(c.id),e.first_name FROM s_customer c,s_emp e WHERE c.sales_rep_id=e.id GROUP BY c.sales_rep_id,e.first_name; eg3:查詢部門編號大於40的每個部門id,部門人數,部門名 SELECT d.id,d.name,COUNT(e.id) FROM s_emp e,s_dept d WHERE e.dept_id=d.id AND d.id>40 GROUP BY d.id,d.name;
HAVING子句
WHERE子句:行的篩選
HAVING:組的篩選,一定出現在分組後
語法:
SELECT
FROM
WHERE 條件
GROUP BY
HAVING 條件
ORDER BY;
注意:
1.執行流程
FROM->WHERE,行的篩選->GROUP BY,分組->HAVING,組的篩選->SELECT
->ORDER BY;
2.有GROUP BY,才能有HAVING
3.HAVING中只能只用組函式或者分組的列
eg1:查詢部門人數高於2人的部門編號,部門人數 SELECT dept_id,COUNT(id) FROM s_emp GROUP BY dept_id HAVING COUNT(id)>2; eg2:查詢職位包含sal(不區分大小寫)的並且對應職位人數高於2人的職位名,人數 SELECT title,COUNT(id) FROM s_emp WHERE LOWER(title) LIKE '%sal%' GROUP BY title HAVING COUNT(id)>2; 效率更高 SELECT title,COUNT(id) FROM s_emp GROUP BY title HAVING LOWER(title) LIKE '%sal%' AND COUNT(id)>2;
巢狀子查詢
SELECT
FROM
WHERE (
SELECT
FROM
WHERE
);
注意:
1.查詢裡面巢狀的查詢需要用()括起來
2.子查詢可能出現的位置:WHERE子句,HAVING子句,FROM子句