一、外連接
1.定義
外連接返回某張表(主表)的所有行倡鲸,并帶回另一張表(連接表)的條件相符的行供嚎,如無(wú)相符的行,則返回NULL峭状;
2.和內(nèi)連接的不同之處
① 使用內(nèi)連接時(shí)克滴,雖然會(huì)對(duì)比來(lái)自兩張表的行,但是表的順序并無(wú)影響优床;
② 外連接對(duì)比兩張表里的行劝赔,如無(wú)相符的行,則返回NULL(VBA返回空)胆敞,換句話點(diǎn)說(shuō)外連接一定會(huì)提供數(shù)據(jù)行着帽,無(wú)論此行是否能在另一個(gè)表中找出相匹配的;
③ 外連接的一起以左移层、右有關(guān)仍翰,確定用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
自連接能把單一表當(dāng)成兩張具有完全相同的信息的表來(lái)進(jìn)行查詢。
改成子查詢模式
SELECT tb1.name,
(SELECT name FROM table_name1 WHERE tb1.leaderID=id) AS leader
FROM table_name1 tb1
三帽驯、表的聯(lián)合
1.?UNION和UNION ALL把查詢的結(jié)果聯(lián)合起來(lái)
SELECT title FORM job_current
UNION
SELECT title FORM job_desired
UNION
SELECT title FORM job_listings
ORDER BY title;
① SELECT語(yǔ)句里列的數(shù)量必須一致龟再;
② SELECT語(yǔ)句里包含的表達(dá)式和統(tǒng)計(jì)函數(shù)也必須相同;
③ SQL會(huì)清除結(jié)果中的重復(fù)值尼变;
④ 若需查看重復(fù)值利凑,可使用UNION ALL;
⑤ 列的數(shù)據(jù)類型必須相同或可以互相轉(zhuǎn)換嫌术;
⑥ SELECT語(yǔ)句的順序不重要哀澈,不會(huì)改變結(jié)果;
⑦ UNION只能接受一個(gè)ORDER BY 且必須位于語(yǔ)句末端度气。
注:UNION ALL 和 UNION的使用方法一致割按,不同點(diǎn)在于前者可以取重復(fù)值,后者會(huì)清除重復(fù)值磷籍。
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只會(huì)返回同時(shí)出現(xiàn)在第一個(gè)和第二個(gè)查詢中的列院领。
② EXCEPT弛矛,差集
SELECT title FORM job_current
EXCEPT
SELECT title FORM job_desired;
EXCEPT返回只出現(xiàn)在第一個(gè)查詢中,而不在第二個(gè)查詢中的列比然。
四丈氓、子查詢和連接的優(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)計(jì)函數(shù),連接不行谈秫;
② 子函數(shù)可以與UPDATE扒寄、INSERT和DELETE一起使用,連接不行拟烫;
③ 連接的運(yùn)算速度快于子查詢该编。