在數據庫中對於數據表的連接操作一共提供了兩種:
內連接:也稱等值連接在where中消除笛卡爾積的條件就是采用了內連接方式進行的
外連接: 內連接中只能顯示等值滿足的條件,不滿足的條件則無法顯示,如果希望顯示特定表中的全部數據就要用要外連接
外連接分3種
在Oracle中使用(+)表示連接
將emp和dept表聯合查詢
SELECT * FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;
增加右外連接顯示部門表中40部門的信息
SELECT * FROM EMP E,DEPT D WHERE E.DEPTNO(+)=D.DEPTNO;
首先在emp表中插入一條沒有部門編號的記錄
INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES(9999,'test','CLERK',7369,SYSDATE,800,100,NULL);
左外連接顯示編號9999的信息
SELECT * FROM emp e,dept d WHERE e.deptno=d.deptno(+);
自身關聯:
查詢出每個員工的編號,姓名及上級領導的編號和姓名
SELECT e.empno,e.ename,e.mgr emp表中領導編號,m.empno m表中的領導編號,m.ename FROM emp e,emp m WHERE e.mgr=m.empno(+);
查詢在1981入職的全部員工的編號,姓名,入職日期(年-月-日顯示),職位,領導姓名,員工月工資sal ,年總工資(sal+comm)*12,工資等級,部門編號,部門名稱,部門位置,並縣且要求這些員工的月工資在1500~3500之間,將最後的結果按年總工資降序排序,有果年工資相等,按入職時間升序排序
SELECT e.empno,e.ename,to_char(e.hiredate,'yyyy-mm-dd') 入職日期,e.job,e.sal 月基本工資,(e.sal+NVL(e.comm,0))*12 yearsal, m.ename 領導姓名, DECODE(s.grade,1,'E等工資', 2,'D等工資', 3,'C等工資', 4,'B等工資', 5,'A等工資' ) 工資等級, d.deptno,d.dname,d.loc FROM emp e,emp m,salgrade s,dept d WHERE to_char(e.hiredate,'yyyy')='1981' AND e.mgr=m.empno(+) AND e.sal BETWEEN s.losal AND s.hisal AND e.deptno=d.deptno(+) AND e.sal BETWEEN 1500 AND 3500 ORDER BY yearsal,e.hiredate ASC;