1. 程式人生 > >內連線 外連線 交叉連線 笛卡爾積

內連線 外連線 交叉連線 笛卡爾積

首先劃分一下,連線分為三種:內連線、外連線、交叉連線 
 
內連線(INNER JOIN): 
    分為三種:等值連線、自然連線、不等連線 
     
外連線(OUTER JOIN): 
    分為三種: 
    左外連線(LEFT OUTER JOIN或LEFT JOIN) 
    右外連線(RIGHT OUTER JOIN或RIGHT JOIN) 
    全外連線(FULL OUTER JOIN或FULL JOIN) 
 
交叉連線(CROSS JOIN): 
    沒有WHERE 子句,它返回連線表中所有資料行的笛卡爾積 

==================================================================================================

==================================================================================================

1.

a. 並集UNION :SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2

b. 交集JOIN :SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name

c. 差集NOT IN :SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2)

d. 笛卡爾積CROSS JOIN :SELECT * FROM table1 CROSS JOIN table2 (   與 SELECT * FROM table1,table2相同)

 2.

SQL中的UNION 與UNION ALL的區別是,前者會去除重複的條目,後者會仍舊保留。

a. UNION :SQL Statement1 UNION SQL Statement2

b. UNION ALL: SQL Statement1 UNION ALL SQL Statement2

3.

SQL中的各種JOIN, SQL中的連線可以分為內連線,外連線,以及交叉連線(即是笛卡爾積)

a. 交叉連線 CROSS JOIN:

如果不帶WHERE條件子句,它將會返回被連線的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積; 舉例

SELECT * FROM table1 CROSS JOIN table2 等同於

SELECT * FROM table1,table2

一般不建議使用該方法,因為如果有WHERE子句的話,往往會先生成兩個錶行數乘積的行的資料表然後才根據WHERE條件從中選擇。 因此,如果兩個需要求交際的表太大,將會非常非常慢,不建議使用。

b. 內連線 INNER JOIN :

如果僅僅使用 SELECT * FROM table1 INNER JOIN table2 沒有指定連線條件的話,和交叉連線的結果一樣。 但是通常情況下,使用INNER JOIN需要指定連線條件。

-- 等值連線(=號應用於連線條件, 不會去除重複的列) SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column

-- 不等連線(>,>=,<,<=,!>,!<,<>) 例如 SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column<>b.column

-- 自然連線(會去除重複的列)

c. 外連線 OUTER JOIN:

 首先內連線和外連線的不同之處: 內連線如果沒有指定連線條件的話,和笛卡爾積的交叉連線結果一樣,但是不同於笛卡爾積的地方是,沒有笛卡爾積那麼複雜地要先生成行數乘積的資料表,內連線的效率要高於笛卡爾積的交叉連線。指定條件的內連線,僅僅返回符合連線條件的條目外連線則不同,返回的結果不僅包含符合連線條件的行,而且包括左表(左外連線時), 右表(右連線時)或者兩邊連線(全外連線時)的所有資料行  

1)左外連線LEFT [OUTER] JOIN :

顯示符合條件的資料行,同時顯示左邊資料表不符合條件的資料行,右邊沒有對應的條目顯示NULL 例如 SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column                                                                                                                                     

2)右外連線RIGHT [OUTER] JOIN:

 顯示符合條件的資料行,同時顯示右邊資料表不符合條件的資料行,左邊沒有對應的條目顯示NULL 例如 SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column                                                                                                                                               

3)全外連線:

顯示符合條件的資料行,同時顯示左右不符合條件的資料行,相應的左右兩邊顯示NULL

轉載自:http://www.cnblogs.com/jinianjun/archive/2011/11/08/2240525.html   感謝分享