子查詢
測試數據
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. 什么是子查詢
當一個查詢是另一個查詢的條件時,這個查詢稱之為子查詢(內層查詢)
什么時候用?
當查詢需求比較復雜,一次性查詢無法得到結果,需要多次查詢時,
例如:給出一個部門名稱,需要獲得該部門所有的員工信息
分析:
1.需要先確定部門的id
2.然后才能通過id確定員工
解決問題的方式是把一個復雜的問題拆分為若干個簡單的問題
2. 如何使用?
首先明確子查詢就是一個普通的查詢,當一個查詢需要作為子查詢使用時,用括號包裹即可
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 后面
如果 后面 查詢有結果時,前面 才會執行
