十六、子查詢與關聯查詢
阿新 • • 發佈:2018-12-02
子查詢與關聯查詢
1、子查詢
1.1、單行子查詢
select * from emp where sal = (select sal from emp where empno = 7876);
1.2、多行子查詢
多行子查詢 any: select * from emp where sal > any(select avg(sal) from emp group by deptno); 注:any(collection) 函式. 只要大於collection中任意一個即滿足>條件。與in用法類似 all: select * from emp where sal > all(select avg(sal) from emp group by deptno); 注:all(collection)函式,比子查詢返回結果中的所有值都大才滿足>條件。 in: select * from emp where job in (select job from emp where ename = 'Smith' or ename = 'Halen');
2、關聯查詢
2.1、內連線
- 只選取符合連線條件的記錄
SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno
2.2、左外連線
- 以左邊表為主(左邊表的記錄都保留),右邊表有的,左邊表沒有的不顯示
SELECT e.ename, d.dname
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno;
2.3、右外連線
- 以右邊表為主(右邊表的記錄都保留),左邊表有的,右邊表沒有的不顯示
SELECT e.ename, d.dname
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno;
2.5、全外連線
- 保留所有欄位
SELECT e.ename, d.dname
FROM emp e FULL OUTER JOIN dept d
ON e.deptno = d.deptno;
2.6、自連線
- 關聯的欄位都在一張表,代表的例子就是多級部門表
SELECT worker.empnow_empno, worker.enamew_ename, manager.empnom_empno, manager.enamem_ename
FROM emp worker join emp manager
ON worker.mgr = manager.empno;