表連線 join和(+)、union和uion all

andyann發表於2011-08-22
應用中的表的連線使用:

join和(+)

區別:Join系列連線的特點是有專門的連線物件和被連線物件,使用on設定專門的連線條件。
            (+)連線實質上是一種外連線Outer Join的現象,連線條件放置在where條件列表中,通過不同的位置來對應不同方向的結果。
            (+)連線的結果是將(+)號對面的資料表不符合記錄的結果也輸出出來。

1 INNER JOIN  內連線
內連線就類似與我們傳統where的連線方式了,返回嚴格符合條件的資料列。

2 LEFT JOIN / LEFT OUTER JOIN   左連線
左連線left join是保證from子句中的資料表全部顯示。

3 RIGHT JOIN / RIGHT OUTER JOIN 右連線
右連線right join是保證Join的資料表全部顯示。

4 FULL JOIN   全連線
全連線是將兩個資料表中符合連線條件或者不符合連線條件的全部列出。

5 CROSS JOIN  笛卡爾連線。
Cross Join是進行全匹配,兩兩之間進行笛卡爾積運算。


join和(+)連線例項:

內連線:
SELECT * FROM DEPT INNER JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO;

左外連線:
SELECT * FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO(+);

右外連線:
SELECT * FROM DEPT RIGHT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO(+) = EMP.DEPTNO;

全連線:
SELECT * FROM DEPT FULL JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;

笛卡爾連線:
SELECT * FROM DEPT CROSS JOIN EMP;


union和union all,Intersect和Minus的使用

union       對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序;
union all  對兩個結果集進行並集操作, 包括重複行,  不進行排序;
intersect  對兩個結果集進行交集操作,不包括重複行,同時進行預設規則的排序;
minus      對兩個結果集進行差操作,   不包括重複行,同時進行預設規則的排序。

關於排序控制:
如果想使用排序時,order by子句必須寫在最後一個結果集裡,
排序時,必須使用第一個查詢語句中的欄位名、欄位序號,並且其排序規則將改變操作後的排序結果.


select * from student where id < 4
union
select * from student where id > 2 and id < 6;

select * from student where id < 4
union all
select * from student where id > 2 and id < 6;

select job from dept1 intersect select job from dept2;

select job from dept1 minus select job from dept2;

備註:關於join和union的區別
如果你明白了兩個連線的原理不難看出:
union 和join不一樣,union這個運運算元是將資料列合併,而join是將欄位合併。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24070945/viewspace-705563/,如需轉載,請註明出處,否則將追究法律責任。

相關文章