1.JOIN和UNION區別
join 是兩張表做交連後裡面條件相同的部分記錄產生一個記錄集,
union是產生的兩個記錄集(字段要一樣的)並在一起,成為一個新的記錄集 。
JOIN用於按照ON條件聯接兩個表,主要有四種:
INNER JOIN:內部聯接兩個表中的記錄,僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行。我理解的是只要記錄不符合ON條件,就不會顯示在結果集內。
LEFT JOIN / LEFT OUTER JOIN:外部聯接兩個表中的記錄,並包含左表中的全部記錄。如果左表的某記錄在右表中沒有匹配記錄,則在相關聯的結果集中右表的所有選擇列表列均為空值。理解為即使不符合ON條件,左表中的記錄也全部顯示出來,且結果集中該類記錄的右表字段為空值。
RIGHT JOIN / RIGHT OUTER JOIN:外部聯接兩個表中的記錄,並包含右表中的全部記錄。簡單說就是和LEFT JOIN反過來。
FULL JOIN / FULL OUTER JOIN:完整外部聯接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合並,左右兩表的數據都全部顯示。
JOIN的基本語法:
Select table1.* FROM table1 JOIN table2 ON table1.id=table2.id
sql寫法
內連接inner join:
復制代碼 代碼如下:
SELECT msp.name, party.name
FROM msp JOIN party ON party=code
或
復制代碼 代碼如下:
SELECT msp.name, party.name
FROM msp inner JOIN party ON party=code
左連接left join :
復制代碼 代碼如下:
SELECT msp.name, party.name
FROM msp LEFT JOIN party ON party=code
右連接right join :
復制代碼 代碼如下:
SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party=party.code
全連接(full join):
復制代碼 代碼如下:
SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party=party.code
UNION運算符
將兩個或更多查詢的結果集組合為單個結果集,該結果集包含聯合查詢中的所有查詢的全部行。UNION的結果集列名與UNION運算符中第一個Select語句的結果集的列名相同。另一個Select語句的結果集列名將被忽略。
其中兩種不同的用法是UNION和UNION ALL,區別在於UNION從結果集中刪除重復的行。如果使用UNION ALL 將包含所有行並且將不刪除重復的行。
UNION和UNION ALL的區別:
union 檢查重復
union all 不做檢查
比如 select 'a' union select 'a' 輸出就是一行 a
比如 select 'a' union all select 'a' 輸出就是兩行 a
2. 通過下面的例子,可以清晰的看出和理解2者的區別
實例1 典型的二表連接演示
假定有兩個表Table1和Table2,其包含的列和數據分別如表1.1和表1.2所示。
表1.1 Table1數據庫表
ColumnA
ColumnB
ColumnC
X1
Y1
Z1
X2
Y2
Z2
X3
Y3
Z3
表1.2 Table2數據庫表
ColumnA
ColumnD
ColumnE
X1
D1
E1
X2
D2
E2
X3
D3
E3
Table1和Table2表共有的列為ColumnA,如果通過ColumnA列的值連接Table1和Table2兩個表,即連接條件為Table1.ColumnA=Table2.ColumnA,此時得到的連接結果如表1.3所示。
表1.3 連接Table1和Table2表
ColumnA
ColumnB
ColumnC
ColumnD
ColumnE
X1
Y1
Z1
D1
E1
X2
Y2
Z2
D2
E2
X3
Y3
Z3
D3
E3
上述連接過程的實現代碼可表示如下:SELECT * FROM Table1 JOIN Table2 ON Table1.ColumnA=Table2.columnA
實例2 典型的二表記錄的UNION運算
假定有兩個表Table3和Table4,其包含的列和數據分別如表2.1和表2.2所示。
表2.1 Table3數據庫表
ColumnA
ColumnB
ColumnC
X1
Y1
Z1
X2
Y2
Z2
X3
Y3
Z3
表2.2 Table4數據庫表、
ColumnA
ColumnD
ColumnE
X4
Y4
Z4
X5
Y5
Z5
X6
Y6
Z6
Table3表和Table4表具有相同的列結構,列數也要相同,列名可以不同,以第一個表的列名為新表的列名,因此可以使用UNION運算符連接兩個表的記錄集,得到的連接結果如表2.3所示。
表2.3 使用UNION連接Table3表和Table4表的記錄
ColumnA
ColumnB
ColumnC
X1
Y1
Z1
X2
Y2
Z2
X3
Y3
Z3
X4
Y4
Z4
X5
Y5
Z5
X6
Y6
Z6
上述連接過程的實現代碼可表示如下:SELECT * FROM Table3 UNION SELECT *FROM Table4
對比實例1和實例2,不難發現二者的區別。