1

分享

自學SQL之路(四):MySQL 最常用的4種進階語法

內外部連結、子查詢、if判斷式

學會使用 Select、Having、Group 你已經可以對資料進行基本查詢,但假如你需要更多資訊來自其他表,又或者你要下更複雜的條件時,該怎麼寫呢?以下將介紹 4 種進階語法,為你一一解答。

1. 如何連接多個資料來源

  • Join
  

JOIN 表2 ON 表2.欄位名稱2 = 表1.欄位名稱1SELECT * FROM sql_store.order_items i
JOIN sql_store.products p ON i.product_id = p.product_id

或者:
  

JOIN 表2 USING (欄位名稱)SELECT * FROM sql_store.order_items i
JOIN sql_store.products USING (product_id)

  • Left Join
  

LEFT JOIN 表2 ON 表2.欄位名稱2 = 表1.欄位名稱1SELECT p.product_id,name,quantity FROM products p
LEFT JOIN order_items oi ON p.product_id = oi.product_id

  • Right Join
  

RIGHT JOIN 表2 ON 表2.欄位名稱2 = 表1.欄位名稱1SELECT p.product_id,name,quantity FROM products p
RIGHT JOIN order_items oi ON p.product_id = oi.product_id

2. 聯集組合多個查詢結果

  • Union
  

[SQL 語句1]
UNION
[SQL 語句2]SELECT customer_id, first_name, points,’Bronze’ AS type
FROM customers
WHERE points < 2000
UNION
SELECT customer_id, first_name, points, ‘Sliver’ AS type
FROM customers
WHERE points BETWEEN ‘2000’ AND ‘3000’

3. 巢狀查詢多張表 — 子查詢

  

[SQL 語句1]
WHERE 條件 (
[SQL 語句2]
)SELECT * FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
)

4. 假設條件判斷式

  • IF
  

IF (假設條件,True,False)SELECT product_id, name, count(product_id) AS orders,
IF(count(product_id) = 1 ,’Once’,’Many times’) As frequency
FROM sql_store.order_items oi
JOIN sql_store.products USING (product_id)
GROUP BY product_id

  • IFNULL
  

IFNULL (假設條件, 欄位名稱,'空值顯示文字')SELECT
order_id,
IFNULL(shipper_id,’Not assigned’) AS Shipper
FROM sql_store.orders

  • CASE
  

CASE
WHEN (條件1) THEN (‘結果1’)
WHEN (條件2) THEN (‘結果2’)
ELSE (‘結果3’)
END AS 自定義名稱SELECT
CONCAT(first_name,’ ‘,last_name) AS customer, points,
CASE
WHEN points > 3000 THEN ‘Gold’
WHEN points >= 2000 THEN ‘Silver’
ELSE ‘Bronze’
END AS category
FROM sql_store.customers

SQL 中的空值誤區 — 表達一種狀態,而不是數值

空值用來表示資料庫中不存在的數據值,並不等於「0」。例如有人問你:「Jack 有幾顆蘋果?」可能的答案有:「他沒有蘋果」、「我不知道」或「印象中可能是X顆」之類的回答。此時在資料庫中會標記成空值 Null,因為資料是不確定的,所以不能表示成「零」,除非確定數量為 0。

總結

以上分享的 SQL 語法是我在實務工作上均有使用到的、認為非常必備的語法。範例程式碼為求好呈現設計得比較簡單,只解決單一問題就好,而實務上遇到的需求其實是複雜的。由於每個人對資料的熟悉程度也有所不同,例如對方丟出一個模糊的問題,你要想辦法釐清他真正的需求是什麼,再組合成正確的邏輯。因此,除了會操作 SQL、了解公司資料庫以外,也要學習如何跨部門溝通,並且把自己的意思流暢地表達出來。
接下來想想一個問題:如果你每週或每月都要出固定報表,除了重複複製貼上這個煩人的步驟以外,還有沒有更好的方法?
立即觀看第五篇 ➡自學SQL之路(五):建立多個 view 半自動化管理每月資料
  

感謝你看完這篇文章,覺得有幫助的話,請給我1~50個拍手👏
長按可以連續拍手喔(๑╹◡╹๑)也歡迎留言分享、討論想法~

分類:學習

評論
上一篇
  • 自學SQL之路(三):MySQL 最常用的6種基礎語法
  • 下一篇
  • 自學SQL之路(五):建立多個 view 半自動化管理資料
  • 更多文章
    載入中... 沒有更多了