SELECTdistinct dept_no, dept_name from dept D, EMP E WHERE D.dept_no = E.dept_no;
SELECT dept_no, dept_name from dept D WHEREEXISTS(SELECT1from emp E WHERE E.dept_no = D.dept_no);
exists適合外表的結果集小的情況
in適合內外表都很大的情況
使用示例
exists:
SELECT ID,NAME FROM A WHEREEXISTS(SELECT*FROM B WHERE A.ID = B.AID)
SQL語句分解:
SELECT ID,NAME FROM A WHEREEXISTS(SELECT*FROM B WHERE B.AID=1)--->SELECT * FROM B WHERE B.AID=1有值返回TRUE所以有數據 SELECT ID,NAME FROM A WHEREEXISTS(SELECT*FROM B WHERE B.AID=2)--->SELECT * FROM B WHERE B.AID=2有值返回TRUE所以有數據 SELECT ID,NAME FROM A WHEREEXISTS(SELECT*FROM B WHERE B.AID=3)--->SELECT * FROM B WHERE B.AID=3無值返回TRUE所以沒有數據
上面SQL語句等價於:
SELECT id, name from A WHERE id in(select aid from B)