標籤:就是 image 結果 into 內串連 src 笛卡爾積 產生 顯示
一、多表查詢 在任何多表查詢中一定會產生笛卡爾積的問題,但是,笛卡爾積產生的結果對於使用者來說是毫無意義的,是重複的無用資料。因此我們需要消除笛卡爾積,那麼在多表查詢的時候,就必須要有關聯欄位。 範例: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的多表查詢與表的串連