標籤:
3. 外串連
外串連是指在內串連的基礎上,將某個串連表中不符合串連條件的記錄加入結果集。根據結果集中所包含不符合串連條件的記錄來源的不同,外串連分為左外串連、右外串連、全外串連3中。
(1)左外串連
左外串連是指在內串連的基礎上,將串連操作符左側表中不符合串連條件的記錄加入結果集中,與之對應的串連操作符右側列表用NULL填充。
在Oracle資料庫,左外串連的表示方式有兩種。
標準SQL語句的串連方式
SELECT table1.column,table2.column[,...]
FROM table1 LEFT JOIN table2[,]
ON table1.column <operator> table2.column[,...];
Oracle擴充的串連方式
SELECT table1.column,table2.column[,...]
FROM table1,table2[,...]
ON table1.column<operator> table2.column(+)[...];
例如,查詢10號部門的部門名、員工號、員工名和所有其他部門的名稱,語句為
SQL>SELECT dname,empno,ename FROM dept LEFT JOIN emp
ON dept.deptno=emp.deptno AND dept.deptno=10;
或
SQL>SELECT dname,empno,ename FROM dept,emp
WHERE dept.deptno=emp.deptno(+) AND emp.deptno(+)=10;
(2)右外串連
右外串連是指在內串連的基礎上,將串連操作符右側表中不符合串連條件的記錄加入結果集中,與之對應的串連操作符左側列表用NULL填充。
標準SQL語句的串連方式:
SELECT table1.column, table2.column[,...]
FROM table1, RIGHT JOIN table2 [,...]
ON table1.column<operator> table2.column[...];
Oracle擴充的串連方式:
SELECT table1.column, table2.column[,...]
FROM table1, table2[,...]
WHERE table1.column(+)<operator> table2.column[...];
例如,查詢20號部門的部門名稱及其員工號、員工名,和所有其他部門的員工名、員工號,語句為
SQL>SELECT empno,ename,dname FROM dept RIGHT JOIN emp
ON dept.deptno = emp.deptno AND dept.deptno=20;
或
SQL>SELECT empno,ename,dname FROM dept, emp
WHERE dept.deptno(+) =emp.deptno AND dept.deptno(+) =20;
(3)全外串連
全外串連是指在內串連的基礎上,將串連操作符兩側表中不符合串連條件的記錄加入結果集中。
在Oracle資料庫中,全外串連的表示方式為
SELECT table1.column,table2.column[,...]
FROM table1 FULL JOIN table2[,...]
ON table1.column1 = table2.column2[...];
例如,查詢所有的部門名和員工名,語句為:
SQL>SELECT dname,ename FROM emp FULL JOIN dept ON emp.deptno = dept.deptno;
注意:(+)操作符僅適用於左外串連和右外串連,而且如果WHERE 子句中包含多個條件,則必須在所有條件中包含(+)操作符。
Oracle串連<二>