1. 程式人生 > >十六、子查詢與關聯查詢

十六、子查詢與關聯查詢

                                     子查詢與關聯查詢

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;