天天看點

SQL JOIN簡介

SQL JOIN

什麼是JOIN

JOIN是一種從多個表源取資料的操作,常用于合并表。常見的JOIN操作包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、自關聯等

SQL JOIN簡介
  • JOIN和INNER JOIN一緻,是擷取兩張表交集部分資料的方法。也就是兩張表間互相比對的那部分記錄會被列舉。
  • OUTER JOIN包含LEFT JOIN、RIGHT JOIN、FULL JOIN三種。具體地:

    1. LEFT JOIN:即使右表中沒有比對,也從左表傳回所有的行

    2. RIGHT JOIN:即使左表中沒有比對,也從右表傳回所有的行

    3. FULL JOIN:隻要其中一個表中存在比對,就傳回行

  • 自關聯是指一張表與同一張表按照某種篩選條件進行合并,生成新表。

常用的JOIN政策

  1. 需要展示的字段内容分别存儲在不同的表裡,此時需要用JOIN來合并表

    舉個例子:

    資料庫中包含Persons和Orders表,如果我們希望列出所有人的定購數,可以使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons JOIN Orders
ON Persons.Id_P = Orders.Id_P
           

這裡的JOIN可以了解為Persons表和Orders表的各自任取一行組合成行記錄,得到臨時表t,然後針對臨時表t 進行ON條件篩選,即選擇Persons表部分Id_P與Orders表部分Id_P一緻的行記錄,最終得到結果表。

  1. 需要展示的字段内容在同一個表中,但僅通過一個表不能直接得到最終結果,此時需要用JOIN來合并表

    舉個例子:

    資料庫中包含employees表,其中包含員工id及姓名、經理id。如果我們希望列出所有員工及其經理姓名,可以使用下面的 SELECT 語句:

SELECT worker.last_name, manager.last_name
FROM employees worker JOIN employees manager
ON (workers.manager_id = manager.employee_id)
           
SQL JOIN簡介

3. 需要展示的字段内容在同一張表裡,但是對不同行記錄的起始截止有條件限定

在SQL實作深圳地鐵換乘小項目中,同一條線路不同站點上下車或者站點間換乘的場景,對線路資訊表的起始截止站點【不同行記錄】均有條件限制,是以采用自關聯的方式,

例1: 同一條線路不同站點上下車

SELECT a.num, a.stopid,b.stopid
FROM szsubway a JOIN szsubway b ON (a.num=b.num)
WHERE a.stopid=1 AND b.stopid= 22
           

例2: 站點間換乘

SELECT a.stopid,a.num, b.stopid, c.num, d.stopid
FROM szsubway a 
JOIN szsubway b ON (a.num=b.num)
JOIN szsubway c ON (b.stopid=c.stopid AND b.num != c.num)
JOIN szsubway d ON (c.num=d.num)
WHERE a.stopid=70 AND d.stopid= 108