一、外連接
1.定義
外連接返回某張表(主表)的所有行,并帶回另一張表(連接表)的條件相符的行,如無相符的行,則返回NULL;
2.和內連接的不同之處
① 使用內連接時,雖然會對比來自兩張表的行,但是表的順序并無影響;
② 外連接對比兩張表里的行,如無相符的行,則返回NULL(VBA返回空),換句話點說外連接一定會提供數(shù)據(jù)行,無論此行是否能在另一個表中找出相匹配的;
③ 外連接的一起以左、右有關,確定用LEFT OUTER JOIN和RIGHT OUTER JOIN 確定主表。
3.左外連接(和右外連接)
SELECT tb1.girl, tb2.toy FROM table_name1 tb1
LEFT OUTER JOIN table_name2 tb2?
ON tb1.toy_id = tb2.toy_id;
LFET OUTER JOIN 左邊的表是主表 右邊的是連接表
同理
RIGHT OUTER JOIN 右邊的表是主表 左邊的是連接表
二、自連接
1.自引用外鍵
同一張表中,若有一非主鍵列引用了主鍵的值,那么此列也是外鍵列,這樣被稱為自引用外鍵。
2.自連接示例
SELECT tb1.name,tb2.name AS leader FROM
table_name1 tb1 INNER JOIN table_name1 tb2
ON tb1.leaderID=tb2.id
自連接能把單一表當成兩張具有完全相同的信息的表來進行查詢。
改成子查詢模式
SELECT tb1.name,
(SELECT name FROM table_name1 WHERE tb1.leaderID=id) AS leader
FROM table_name1 tb1
三、表的聯(lián)合
1.?UNION和UNION ALL把查詢的結果聯(lián)合起來
SELECT title FORM job_current
UNION
SELECT title FORM job_desired
UNION
SELECT title FORM job_listings
ORDER BY title;
① SELECT語句里列的數(shù)量必須一致;
② SELECT語句里包含的表達式和統(tǒng)計函數(shù)也必須相同;
③ SQL會清除結果中的重復值;
④ 若需查看重復值,可使用UNION ALL;
⑤ 列的數(shù)據(jù)類型必須相同或可以互相轉換;
⑥ SELECT語句的順序不重要,不會改變結果;
⑦ UNION只能接受一個ORDER BY 且必須位于語句末端。
注:UNION ALL 和 UNION的使用方法一致,不同點在于前者可以取重復值,后者會清除重復值。
2.創(chuàng)建聯(lián)合表,CREATE TABLE AS
CREATE TABLE table_name AS
SELECT title FORM job_current?UNION
SELECT title FORM job_desired?UNION
SELECT title FORM job_listings
ORDER BY?title;
3.INTERSECT(交集)和EXCEPT(差集)
① INTERSECT,交集
SELECT title FORM job_current
INTERSECT
SELECT title FORM job_desired;
INTERSECT只會返回同時出現(xiàn)在第一個和第二個查詢中的列。
② EXCEPT,差集
SELECT title FORM job_current
EXCEPT
SELECT title FORM job_desired;
EXCEPT返回只出現(xiàn)在第一個查詢中,而不在第二個查詢中的列。
四、子查詢和連接的優(yōu)劣
1.子查詢寫法
SELECT tb1.column_name1,tb1.column_name2,tb2.column_name3 FROM
table_name1 AS tb1 NATURAL JOIN ?table_name2 AS tb2
WHERE
tb2.column_name3?IN(SELECT column_name3 FROM table_name3)
2.連接寫法
SELECT tb1.column_name1,tb1.column_name2,tb2.column_name3 FROM
table_name1 AS tb1 NATURAL JOIN ?table_name2 AS tb2
INNER JOIN table_name3 tb3 on tb2.column_name3=tb3.column_name3
3.優(yōu)劣
① 子查詢可以使用統(tǒng)計函數(shù),連接不行;
② 子函數(shù)可以與UPDATE、INSERT和DELETE一起使用,連接不行;
③ 連接的運算速度快于子查詢。