關於各種 join

改進 PostgreSQL 的查詢效能

Amy McCarty

Instructor

課程總覽

  • 查詢結構:包含 join、子查詢、暫存表
  • 限制與彙總資料
  • 資料庫儲存屬性與最佳化工具
  • 查詢規劃與執行
改進 PostgreSQL 的查詢效能

查詢規劃器

Query

  • SQL 指令

餐廳服務生

Query(執行)規劃

  • 實際步驟

多位廚師圍繞大鍋烹煮

改進 PostgreSQL 的查詢效能

查詢規劃器

服務生上菜

服務生送飲料

改進 PostgreSQL 的查詢效能

 

什麼是 join?

  • 合併多個資料表
改進 PostgreSQL 的查詢效能

 

什麼是 join?

  • 合併多個資料表

為什麼用 join?

  • 查表比對
  • 整併資料

怎麼做?

  • inner 與 outer

 

Sales ID Order Dt Amt Cust No
01 2019-02-02 145.30 911

 

ID Name Customer Since
911 Jim Smith 2019-01-01

 

Sales ID Order Dt Amt Name
01 2019-02-02 145.30 Jim Smith
改進 PostgreSQL 的查詢效能

Inner join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
改進 PostgreSQL 的查詢效能

Inner join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX(最後一筆加粗)。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209(最後一筆加粗)。

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
改進 PostgreSQL 的查詢效能

USING 語法的 inner join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
改進 PostgreSQL 的查詢效能

USING 語法的 inner join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX(最後一筆加粗)。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209(最後一筆加粗)。

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
改進 PostgreSQL 的查詢效能

Left outer join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
改進 PostgreSQL 的查詢效能

Left outer join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209(最後一筆加粗)。

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
改進 PostgreSQL 的查詢效能

Right outer join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
改進 PostgreSQL 的查詢效能

Right outer join

運動員表含 4 筆:Jack - AUT、Aditya - IND、Mikhail - RUS、Javier - MEX(最後一筆加粗)。國家表含 4 筆:AUT - Austria - 9、IND - India - 1,339、RUS - Russia - 145、BRA - Brazil - 209。

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
改進 PostgreSQL 的查詢效能

Full outer join

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • Query(執行)規劃

多位廚師圍繞大鍋烹煮

  • 限制查詢規劃器
Athlete Nme Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
BRA Brazil 209
改進 PostgreSQL 的查詢效能

一起來練習吧!

改進 PostgreSQL 的查詢效能

Preparing Video For Download...