使用聯結

Oracle SQL 入門

Sara Billen

Curriculum Manager

Chinook 資料集

完整 Chinook 資料集 ER 圖

Oracle SQL 入門

合併多個資料表

Pearl Jam 專輯

Oracle SQL 入門

SQL 聯結

聯結類型:

  • Inner Join
  • 外部聯結
  • 交叉聯結
  • 自我聯結
Oracle SQL 入門

內部聯結(Inner join)

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON  Album.ArtistId = Artist.ArtistId
| Album.Title                     | Artist.Name   |
|---------------------------------|---------------|
| Black Sabbath                   | Black Sabbath |
| Black Sabbath Vol. 4 (Remaster) | Black Sabbath |
| The Cream Of Clapton            | Eric Clapton  |
| Unplugged                       | Eric Clapton  |
| ...                             | ...           |
Oracle SQL 入門

內部聯結拆解

  1. 選擇要輸出的欄位並加上資料表名稱
  2. FROM 中,以 INNER JOIN 分隔列出相關資料表
  3. 使用 ON 指定聯結欄位
SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON Album.ArtistId = Artist.ArtistId

再加入 WHEREORDER BY 等必要子句!

Oracle SQL 入門

內部聯結(Inner join)

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON  Album.ArtistId = Artist.ArtistId
WHERE Artist.Name = 'Pearl Jam'
| Album.Title | Artist.Name |
|-------------|-------------|
| Pearl Jam   | Pearl Jam   |
| Riot Act    | Pearl Jam   |
| Ten         | Pearl Jam   |
| ...         | ...         |
Oracle SQL 入門

以 USING 取代 ON

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON  Album.ArtistId = Artist.ArtistId

同等於

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
USING (ArtistId)
  • 兩個資料表中的欄位名稱必須完全相同
  • 將欄位名稱用括號括起來
Oracle SQL 入門

資料表別名

SELECT DISTINCT Customer.FirstName, Customer.LastName, 
                Employee.FirstName, Employee.LastName
FROM Customer INNER JOIN Employee
ON Customer.SupportRepID = Employee.EmployeeID

使用別名:

SELECT DISTINCT c.FirstName, c.LastName, e.FirstName, e.LastName
FROM Customer c INNER JOIN Employee e
ON c.SupportRepID = e.EmployeeID
Oracle SQL 入門

聯結超過兩個資料表

Track、Album、Artist 資料表

SELECT t.Name AS Track, al.Title AS Album, ar.Name AS Artist
FROM 
    Track t INNER JOIN Album al USING (AlbumId)
    INNER JOIN Artist ar USING (ArtistId)
Oracle SQL 入門

聯結超過兩個資料表

SELECT t.Name as Track, al.Title as Album, ar.Name as Artist
FROM 
    Track t INNER JOIN Album al USING (AlbumId)
    INNER JOIN Artist ar USING (ArtistId)
| Track              | Album                          | Artist      |
|--------------------|--------------------------------|-------------|
| The Legacy         | A Matter of Life and Death     | Iron Maiden |
| Lord of Light      | A Matter of Life and Death     | Iron Maiden |
| Out of the Shadows | A Matter of Life and Death     | Iron Maiden |
| ...                | ...                            | ...         |
Oracle SQL 入門

一起來練習吧!

Oracle SQL 入門

Preparing Video For Download...