十、外連接、自連接和聯(lián)合

一、外連接

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一起使用,連接不行;

③ 連接的運算速度快于子查詢。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • SQL SELECT 語句 一、查詢SQL SELECT 語法 (1)SELECT 列名稱 FROM 表名稱 (2...
    有錢且幸福閱讀 5,992評論 0 33
  • 5.多表查詢 多表查詢 目的:從多張表獲取數(shù)據(jù) 前提:進行連接的多張表中有共同的列 等連接 通過兩個表具有相同意義...
    喬震閱讀 1,540評論 0 0
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname...
    哈哈海閱讀 1,326評論 0 7
  • 自從奚夢瑤摔了那一跤,從來沒關注過維密的我也開始關注了,那些model好美呀,簡直是天使!于是特別想畫美女,就畫了...
    紅貝雷閱讀 478評論 2 8
  • 老規(guī)矩,先上圖 演示中用的是CardView嵌套的ListView,背景是攝像頭,接下來說實現(xiàn)。理論上所有的Vie...
    BertSir閱讀 3,596評論 0 5

友情鏈接更多精彩內容