oracle的多表查詢與表的連接
阿新 • • 發佈:2018-07-06
出現 png 部分 使用 結果 笛卡爾積 利用 信息 毫無 一、多表查詢
在任何多表查詢中一定會產生笛卡爾積的問題,但是,笛卡爾積產生的結果對於用戶來說是毫無意義的,是重復的無用數據。因此我們需要消除笛卡爾積,那麽在多表查詢的時候,就必須要有關聯字段。
範例:emp.deptno=dept.deptno;兩張表中的關聯字段將消除笛卡爾積
SELECT * FROM emp, dept WHERE emp.deptno=dept.deptno;
多表的查詢,建議多做些習題增加熟練度。
二、表的連接
內連接:之前利用了WHERE子句消除了笛卡爾積,這個是內連接。只有滿足條件的數據才會顯示。
外連接:分為左外連接、右外連接、全外連接。
為了更好的觀察到連接的區別,現在已經在dept表中提供了一個沒有雇員的部門40,同時在emp表中增加一個沒有部門的雇員。
INSERT INTO emp (empno,ename,deptno) VALUES(8989,‘HELLO‘, null);
emp表目前如下:HELLO這個雇員沒有部門
觀察一:內連接實現效果
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
此時沒有部門的雇員以及沒有雇員的部門信息都沒有出現,因為null的判斷不滿足。
觀察二:使用左(外)連接,希望所有的雇員信息都顯示出來,即便他沒有部門。
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno(+);
此時出現了沒有部門的雇員。也就是左表的數據全部顯示了。
觀察三:使用右(外)連接,將所有的部分信息都顯示出來。
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;
內連接指的就是所有滿足關聯條件的數據出現,不滿足的不出現。外連接就是指定一張數據表中的數據全部都顯示,但是沒有對應的其他表數據,內容為null。
oracle的多表查詢與表的連接