子查詢
測試數據
create table emp (id int,name char(10),sex char,age int,dept_id int,job char(10),salary double); insert into emp values (1,"劉備","男",26,1,"總監",5800), (2,"張飛","男",24,1,"員工",3000), (3,"關羽","男",30,1,"員工",4000), (4,"孫權","男",25,2,"總監",6000), (5,"周瑜","男",22,2,"員工",5000), (6,"小喬","女",31,2,"員工",4000), (7,"曹操","男",19,3,"總監",10000), (8,"司馬懿","男",24,3,"員工",6000); create table dept(id int primary key,name char(10)); insert into dept values(1,"市場"),(2,"行政"),(3,"財務");1. 什麼是子查詢
當一個查詢是另外一個查詢的條件時,這個查詢稱之爲子查詢(內層查詢)mysql
何時用?sql
當查詢需求比較複雜,一次性查詢沒法獲得結果,須要屢次查詢時,測試
例如:給出一個部門名稱,須要得到該部門全部的員工信息spa
分析:code
1.須要先肯定部門的idtable
2.而後才能經過id肯定員工class
解決問題的方式是把一個複雜的問題拆分爲若干個簡單的問題select
2. 如何使用?
首先明確子查詢就是一個普通的查詢,當一個查詢須要做爲子查詢使用時,用括號包裹便可im
3. 須要注意
in中的子查詢只能包含一個列數據
例如:查詢財務部有哪些人
正確的寫法:select name from emp where dept_id in (select id from dept where name = "財務");
錯誤的寫法:select name from emp where dept_id in (select * from dept where name = "財務");
關鍵字:exists
exists後跟子查詢,子查詢有結果是爲True,沒有結果時爲False。爲True時外層執行,爲False外層不執行
如何使用?
select *from emp where exists (select *from emp where salary > 1000);
前面 exists 後面 若是 後面 查詢有結果時,前面 纔會執行