背景:
有時我們在進行SQL查詢時,需要用到一個子查詢的查詢結果作為另一個查詢的查詢條件或者查詢結果。也是被稱之為SQL的子查詢。
用法:主要有兩種,一種是放在where查詢子句中使用,另一種是作為查詢結果。
測試用到的表:
在where查詢子句中使用
比如要查詢部門員工表中員工編號為10005所在的部門員工信息
不使用SQL嵌套查詢時,那可以使用兩個SQL來解決這個問題。
第一步先查詢出員工編號為10005的部門編號。
select dept_no from dept_emp where emp_no='10005'
第二步利用第一步查詢出的部門編號進而查詢出該部門的部門員工信息。
select * from dept_emp where dept_no ='d003' ;
但是如果如果使用嵌套查詢的話,那么只需要一個SQL就可以解決該問題。
-- 先利用子查詢查詢出部門編號,再利用主查詢查詢其需要的相關信息
select * from dept_emp where dept_no in (select dept_no from dept_emp where emp_no='10005');
子查詢作為查詢結果
比如我要查詢部門編號,部門名稱以及每個部門的人數
分析:依據部門表,部門編號和部門名稱這兩個字段很好獲取,但是每個部門的人數就需要用到部門員工表,要統計每個部門的員工數目就要用到count(*)函數。要查詢d001部門的人數可以將SQL寫成
select count(*) from dept_emp where dept_no ='d001';
但是需要的是各個部門的人數,那這時where子句就不能這樣寫了,需要寫成
where dept_emp.dept_no=departments.dept_no
它要使用完全限定列名。
那么這個SQL就自然寫成了
select dept_no,
dept_name,
(select count(*) from dept_emp where dept_emp.dept_no=departments.dept_no) as emp_num
from departments;
結果為: