<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SQL Join (連線) 是利用不同資料表之間欄位的關連性來結合多資料表之檢索。
SQL Join是結合多個資料表而組成一抽象的暫時性資料表以供資料查詢,在原各資料表中之紀錄及結構皆不會因此連線查詢而改變。
這是一個客戶資料表「customers」:
C_Id | Name | City | Address | Phone |
---|---|---|---|---|
1 | 張一 | 臺北市 | XX路100號 | 02-12345678 |
2 | 王二 | 新竹縣 | YY路200號 | 03-12345678 |
3 | 李三 | 高雄縣 | ZZ路300號 | 07-12345678 |
而這是產品訂單的資料表「orders」:
O_Id | OrderNo | C_Id |
---|---|---|
1 | 2572 | 3 |
2 | 7375 | 3 |
3 | 7520 | 1 |
4 | 1054 | 1 |
5 | 1257 | 5 |
其中,C_Id 是客戶資料表中的主鍵 (Primary Key) 欄位,我們怎麼將這兩張不同的資料表依相關欄位來作個連線結合以便查詢呢?這就是接下來的主題 Join!
Inner Join : 內部連線
LEFT (OUTER) JOIN : 左外部連線
RIGHT (OUTER) JOIN : 右外部連線
FULL (OUTER) JOIN : 全部外部連線
CROSS JOIN : 交叉連線
NATURAL JOIN : 自然連線
INNER JOIN (內部連線) 為等值連線,必需指定等值連線的條件,而查詢結果只會返回符合連線條件的資料。
SELECT table_column1, table_column2··· FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
或
SELECT table_column1, table_column2··· FROM table_name1 INNER JOIN table_name2 USING (column_name);
現在我們想列出所有客戶的訂單編號資料,我們可以作一個 INNER JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers INNER JOIN orders ON customers.C_Id=orders.C_Id;
其中用點號連線之「XXX.YYY」表示XXX資料表中的YYY欄位。
查詢結果如下:
Name | Order_No |
---|---|
李三 | 2572 |
李三 | 7375 |
張一 | 7520 |
張一 | 1054 |
查詢結果只會返回符合連線條件的資料!
LEFT JOIN 可以用來建立左外部連線,查詢的 SQL 敘述句 LEFT JOIN 左側資料表 (table_name1) 的所有記錄都會加入到查詢結果中,即使右側資料表 (table_name2) 中的連線欄位沒有符合的值也一樣。
SELECT table_column1, table_column2··· FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
有些資料庫的語法會是LEFT OUTER JOIN。
現在我們想查詢所有客戶與其訂單狀況的資料,我們可以作一個 LEFT JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers LEFT JOIN orders ON customers.C_Id=orders.C_Id;
查詢結果如下:
Name | Order_No |
---|---|
張一 | 7520 |
張一 | 1054 |
王二 | |
李三 | 2572 |
李三 | 7375 |
LEFT JOIN會返回左側資料表中所有資料列,就算沒有符合連線條件,而右側資料表中如果沒有匹配的資料值就會顯示為「NULL」。
相對於LEFT JOIN,RIGHT JOIN 可以用來建立右外部連線,查詢的 SQL 敘述句 RIGHT JOIN 右側資料表 (table_name2) 的所有記錄都會加入到查詢結果中,即使左側資料表 (table_name2) 中的連線欄位沒有符合的值也一樣。
SELECT table_column1, table_column2··· FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
有些資料庫的語法會是RIGHT OUTER JOIN。
現在我們想查詢所有訂單與相應的客戶之資料,我們可以作一個 RIGHT JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers RIGHT JOIN orders ON customers.C_Id=orders.C_Id;
查詢結果如下:
Name | Order_No |
---|---|
李三 | 2572 |
李三 | 7375 |
張一 | 7520 |
張一 | 1054 |
1257 |
RIGHT JOIN會返回右側資料表中所有資料列,就算是沒有符合連線條件,而左側資料表中如果沒有匹配的資料值就會顯示為「NULL」。
FULL JOIN 即為 LEFT JOIN 與 RIGHT JOIN 的聯集,它會返回左右資料表中所有的紀錄,不論是否符合連線條件。
SELECT table_column1, table_column2··· FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
我們來作一個 FULL JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers FULL JOIN orders ON customers.C_Id=orders.C_Id;
查詢結果如下:
Name | Order_No |
---|---|
李三 | 2572 |
李三 | 7375 |
張一 | 7520 |
張一 | 1054 |
1257 | |
王二 |
MySQL資料庫中沒有FULL JOIN,但是您可以用UNION來模擬。
交叉連線為兩個資料表間的笛卡兒乘積 (Cartesian product),兩個資料表在結合時,不指定任何條件,即將兩個資料表中所有的可能排列組合出來,以下例而言 CROSS JOIN 出來的結果資料列數為 3×5=15 筆,因此,當有WHERE、ON、USING條件時不建議使用。
SELECT table_column1, table_column2··· FROM table_name1 CROSS JOIN table_name2;
或
SELECT table_column1, table_column2··· FROM table_name1, table_name2;
或
SELECT table_column1, table_column2··· FROM table_name1 JOIN table_name2;
這是一個客戶資料表「customers」:
C_Id | Name | City | Address | Phone |
---|---|---|---|---|
1 | 張一 | 臺北市 | XX路100號 | 02-12345678 |
2 | 王二 | 新竹縣 | YY路200號 | 03-12345678 |
3 | 李三 | 高雄縣 | ZZ路300號 | 07-12345678 |
而這是產品訂單的資料表「orders」:
O_Id | Order_No | C_Id |
---|---|---|
1 | 2572 | 3 |
2 | 7375 | 3 |
3 | 7520 | 1 |
4 | 1054 | 1 |
5 | 1257 | 5 |
我們來作一個 CROSS JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers CROSS JOIN orders;
查詢結果如下:
Name | Order_No |
---|---|
張一 | 2572 |
王二 | 2572 |
李三 | 2572 |
張一 | 7375 |
王二 | 7375 |
李三 | 7375 |
張一 | 7520 |
王二 | 7520 |
李三 | 7520 |
張一 | 1054 |
王二 | 1054 |
李三 | 1054 |
張一 | 1257 |
王二 | 1257 |
李三 | 1257 |
自然連線有 NATURAL JOIN、NATURAL LEFT JOIN、NATURAL RIGHT JOIN,兩個表格在進行 JOIN 時,加上 NATURAL 這個關鍵詞之後,兩資料表之間同名的欄位會被自動結合在一起。
SELECT table_column1, table_column2··· FROM table_name1 NATURAL JOIN table_name2;
這是一個客戶資料表「customers」:
C_Id | Name | City | Address | Phone |
---|---|---|---|---|
1 | 張一 | 臺北市 | XX路100號 | 02-12345678 |
2 | 王二 | 新竹縣 | YY路200號 | 03-12345678 |
3 | 李三 | 高雄縣 | ZZ路300號 | 07-12345678 |
而這是產品訂單的資料表「orders」:
O_Id | Order_No | C_Id |
---|---|---|
1 | 2572 | 3 |
2 | 7375 | 3 |
3 | 7520 | 1 |
4 | 1054 | 1 |
5 | 1257 | 5 |
現在我們想列出所有客戶的訂單編號資料,我們可以作一個 NATURAL JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers NATURAL JOIN orders;
查詢結果如下:
Name | Order_No |
---|---|
李三 | 2572 |
李三 | 7375 |
張一 | 7520 |
張一 | 1054 |
注意到了嗎?返回結果同等於下面這個INNER JOIN查詢:
SELECT customers.Name, orders.Order_No FROM customers INNER JOIN orders ON customers.C_Id=orders.C_Id;
到此這篇關於SQL連線查詢的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45