本文的重點是“串連子句(join_clause)”,而不是表串連本身。
本文內容
- 本文使用的表和其資料
- Oracle 11g R1(11.1) 串連子句(join_clause)
- 內串連(Inner Joins)
- 交叉串連(Cross Joins)
- 外串連(Outer Joins)
- 自然串連(Natural Joins)
- 參考資料
本文使用的表和其資料
Oracle 11g R1(11.1) 串連子句(join_clause)
使用適當的串連子句(join_clause)可以獲得串連資料的一部分。
使用 inner_cross_join_clause 文法可以指定一個內串連(inner joins)或交叉串連(cross joins);使用 outer_join_clause 文法可以指定一個外串連。
當要串連更多的表時,可以使用括弧來覆蓋預設的優先順序,如下面文法:
SELECT ... FROM a JOIN (b JOIN c) ...
說明:該 SQL 會先串連 b 和 c,然後,將結果再與 a 串連。
內串連(Inner Joins)
“內串連”只返回滿足串連條件的行。
INNER 關鍵字 顯示指定一個內串連。
JOIN 關鍵字 顯示說明將執行一個串連。使用該文法可以代替 FROM 子句串連文法,即在 FROM 子句用逗號分隔“表”的運算式,而在 WHERE 子句寫串連條件。
ON 條件 使用 ON 子句指定串連條件。該串連條件獨立於任何檢索,或是 WHERE 子句中的過濾條件。即若要參照非同名的列進行等值串連,或想設定任意的串連條件,可以使用 ON 子句。
樣本1:
select emp.empno, emp.ename, dept.dname, dept.loc
from emp
inner join dept on (emp.deptno = dept.deptno)
order by emp.empno
執行結果:
說明:
- EMP 表共有14個員工,其中3個員工沒有部門。因此,結果只包含有所屬部門的員工,沒有無部門的員工。
USING (欄位名) 當你要指定一個列的等值串連,且這個列是兩個表共有的,那麼,可以在 USING column 子句指定該列。只有兩個表具有相同列時,才能使用這個子句。該子句,當內串連中的列時,不會用表名或表別名驗證列名。
樣本2:
select emp.empno, emp.ename, dept.dname, dept.loc
from emp
inner join dept
using (deptno)
order by emp.empno
結果與樣本 1 相同。