SQL | 語法基礎篇 (2)

更新 發佈閱讀 5 分鐘

繼之前的 SQL CRUD、運算子、函式之後,今天來寫 SQL 很常用到的指令 JOINJOIN的功能呢,就是建立資料表之間的聯繫。

前一篇文章裡,已經建立了三個資料表:drinks、customers、orders。接下來會說明如何用JOIN讓他們產生關聯。



JOIN

為什麼會需要JOIN?我們已知在 orders 資料表裡記錄了每個飲料品項的販賣情況,但這個資料表中只記錄了飲料的 drinks_id,並沒有飲料的詳細名稱,詳細名稱是記錄在 drinks 資料表裡面,所以會需要用JOIN來幫忙兩個資料表做連結。

INNER JOIN

所謂INNER JOIN,就是查尋兩邊資料表都有的資料,比方說,現在要把 orders 的 drinks_id 對回 drinks 的 id 來找出飲料名稱,那就是這樣寫:

SELECT orders.`drinks_id`, orders.`amounts`, drinks.`name`
FROM drinks
JOIN orders
ON drinks.`id` = orders.`drinks_id`;

於是乎我們得到下面這個結果,現在知道我們賣出的飲料名稱了:

vocus|新世代的創作平台

所以JOIN的重點在於:

  1. SELECT,反正查詢一定要有SELECT
  2. FROM是原本的資料表
  3. JOIN是要加入查詢的資料表
  4. ON則是參考點

LEFT JOIN 和 RIGHT JOIN

從上述可以看到,INNER JOIN為我們列出了兩邊資料相符的部分,但如果今天想把參考點對應不到的資料也一併呈現呢?比方說我還是想列出所有飲料名稱怎麼辦,那就是LEFT JOINRIGHT JOIN 上場的時候啦!

在這裡,LEFT指的是FROM後面的資料表,RIGHT指的是JOIN後面的資料表,這樣講可能不太清楚,看 code 和結果就會清晰很多:

// LEFT JOIN
SELECT orders.`drinks_id`, orders.`amounts`, drinks.`name`
FROM drinks
LEFT JOIN orders
ON drinks.`id` = orders.`drinks_id`;

// RIGHT JOIN
SELECT orders.`drinks_id`, orders.`amounts`, drinks.`name`
FROM orders
RIGHT JOIN drinks
ON drinks.`id` = orders.`drinks_id`;

上述兩種寫法差別在 drinks 資料表所在的位置,但都會得到下圖這個結果:

vocus|新世代的創作平台

SELF JOIN

這玩意兒有點邪門,自己和自己JOIN是啥鬼?其實這種情況會用在像下面這種在同一張資料表做比較的狀況。

比方說,我們要在 drinks 中找比冰咖啡便宜的飲料:

SELECT d1.`name`, d2.`name` AS `cheaper_name`, d2.price
FROM drinks AS d1
JOIN drinks AS d2
ON d1.price > d2.price
WHERE d1.`name` = '冰咖啡';
vocus|新世代的創作平台

綜合練習一下

  1. 哪項飲料銷售量最高?
SELECT drinks.`name`, SUM(orders.`amounts`) AS `total`
FROM drinks
JOIN orders
ON drinks.`id` = orders.`drinks_id`
GROUP BY orders.`drinks_id`
ORDER BY `total` DESC
LIMIT 1;
vocus|新世代的創作平台
  1. 誰是購買額最高的顧客?
SELECT customers.`name`, SUM(orders.`amounts` * drinks.`price`) AS `revenue`
FROM orders
JOIN customers
ON customers.`id` = orders.`customers_id`
JOIN drinks
ON drinks.`id` = orders.`drinks_id`
GROUP BY customers.`id`
ORDER BY `revenue` DESC
LIMIT 1;
vocus|新世代的創作平台



SQL Transaction

這是一個補充知識~ 什麼是 Transaction (交易)?

SQL 作為操縱資料的語言,有時難免會遇到複數資料操縱必須全部執行完成,否則乾脆不要執行的時候,比如說:轉帳時 A、B 帳戶的資料。

若是今天 A 轉了錢給 B,那他們的帳戶金額資料勢必得更新嘛。但當 A 更新完後,程式突然崩潰了,B 沒更新到帳戶資料,這樣算有入帳還是沒入帳?所以會需要交易來幫助管理需要全部執行完畢的步驟來避免這種情形。

操作就像這樣:

set autocommit = 0;
START TRANSACTION;
UPDATE ... SET ... WHERE account = "A";
UPDATE ... SET ... WHERE account = "B";
COMMIT;
留言
avatar-img
Jeremy Ho的沙龍
20會員
37內容數
這個專題用來存放我在學習網頁開發時的心得及知識。
Jeremy Ho的沙龍的其他內容
2023/12/03
從 leetcode 學資料結構堆疊 (stack)
Thumbnail
2023/12/03
從 leetcode 學資料結構堆疊 (stack)
Thumbnail
2023/10/03
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
2023/10/03
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
2023/09/27
MySQL 應用到 URL Shortener 上
Thumbnail
2023/09/27
MySQL 應用到 URL Shortener 上
Thumbnail
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
BigQuery M是 BigQuery 中的一項功能,數據分析師可以使用SQL語句創建、訓練、評估和預測機器學習模型。 在這次實作將使用一個電子商務(Google 商品商店)數據集來運行一些典型的查詢和模型訓練和預測,以讓企業更了解其客戶的購買習慣。
Thumbnail
BigQuery M是 BigQuery 中的一項功能,數據分析師可以使用SQL語句創建、訓練、評估和預測機器學習模型。 在這次實作將使用一個電子商務(Google 商品商店)數據集來運行一些典型的查詢和模型訓練和預測,以讓企業更了解其客戶的購買習慣。
Thumbnail
題目會給我們兩張資料表。 第一張是Customer資料表,裡面分別有customer_id 、product_key 等欄位。其中product_key 是這張資料表的外鍵foreign key,關連到第二張Product資料表。 題目還特別提醒,這張資料表可能包含重複的data row
Thumbnail
題目會給我們兩張資料表。 第一張是Customer資料表,裡面分別有customer_id 、product_key 等欄位。其中product_key 是這張資料表的外鍵foreign key,關連到第二張Product資料表。 題目還特別提醒,這張資料表可能包含重複的data row
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
有兩張資料表格,第一張是顧客資料表,第二張是訂單資料表。請找出所有顧客資料,不管這位顧客有沒有訂購過商品。請列出名字、姓氏、居住城市、訂購明細。注意:可能會有重複的資料點,因為一位顧客可以重複訂購同一件商品。最後依照顧客名字、訂購明細遞增排序。
Thumbnail
有兩張資料表格,第一張是顧客資料表,第二張是訂單資料表。請找出所有顧客資料,不管這位顧客有沒有訂購過商品。請列出名字、姓氏、居住城市、訂購明細。注意:可能會有重複的資料點,因為一位顧客可以重複訂購同一件商品。最後依照顧客名字、訂購明細遞增排序。
Thumbnail
有兩張資料表格,第一張是顧客資料,第二張是訂單資料。請找出名字叫Jill和Eva的客戶資料,並其對應的訂單日期、明細、金額,最後依照顧客號碼由小至大排序。
Thumbnail
有兩張資料表格,第一張是顧客資料,第二張是訂單資料。請找出名字叫Jill和Eva的客戶資料,並其對應的訂單日期、明細、金額,最後依照顧客號碼由小至大排序。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
題目敘述 題目會給我們一張Products資料表。裡面分別有product_id、new_price、change_date等欄位。其中(product_id, change_date)是這張資料表的複合主鍵Primary key。 所有商品預設都是10元。之後若有更新,則以新價格為主。 要求
Thumbnail
題目敘述 題目會給我們一張Products資料表。裡面分別有product_id、new_price、change_date等欄位。其中(product_id, change_date)是這張資料表的複合主鍵Primary key。 所有商品預設都是10元。之後若有更新,則以新價格為主。 要求
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News