前言

開始學習 SQL 之後,常會遇到這些疑問:

  • SQL 到底該先學什麼?
  • 語法太多,根本記不住……
  • 實際專案會用到哪些 SQL?
  • 在參與專案之前,至少要先記住哪些內容?

SQL 的語法很多,但其實不需要一開始全部背起來。

這次要介紹的是,SQL 初學者在參與專案前應該先掌握的 10 個基本語法

我們會邊看實際的 SQL,邊一個一個確認。

目錄

什麼是 SQL?

SQL(Structured Query Language)是用來操作資料庫的語言

例如,假設使用者資料儲存在資料庫中。

idnameage1田中252佐藤303鈴木18透過 SQL,可以進行以下操作:

  • 取得資料
  • 新增資料
  • 更新資料
  • 刪除資料
  • 指定條件搜尋
  • 結合多個資料表
  • 彙總資料

1. SELECT

什麼是 SELECT?

SELECT用來取得資料的語法

如果要學 SQL,這是首先一定要記住的基本中的基本。

SELECT name
FROM users;

這段 SQL 的意思是:

從 users 資料表取得 name

取得所有欄位

SELECT *
FROM users;

使用 * 可以取得所有欄位。

取得多個欄位

SELECT name, age
FROM users;

只會取得 nameage

:bulb:重點

SELECT → 要取得什麼?
FROM → 從哪個資料表?

先把這兩個搭配起來記住。

2.WHERE

什麼是 WHERE?

WHERE用來指定要取得資料條件的語法

例如,

只想取得 20 歲以上的使用者

可以這樣寫:

SELECT *
FROM users
WHERE age >= 20;

常用比較運算子

運算子意義=等於<>不等於>大於<小於>=大於等於<=小於等於例如,要取得 30 歲的使用者:

SELECT *
FROM users
WHERE age = 30;

就會得到這樣的結果。


指定多個條件

可以使用 AND 來指定多個條件。

SELECT *
FROM users
WHERE age >= 20
AND age <= 30;

這代表:

20 歲以上且 30 歲以下


3. ORDER BY

什麼是 ORDER BY?

ORDER BY用來排序取得資料的語法

例如,若要依年齡由大到小排列:

SELECT *
FROM users
ORDER BY age DESC;

升冪與降冪

指定意義ASC升冪DESC降冪```
-- 年齡由小到大
SELECT *
FROM users
ORDER BY age ASC;

-- 年齡由大到小
SELECT *
FROM users
ORDER BY age DESC;


`ASC` 有時也可以省略。

SELECT *
FROM users
ORDER BY age;


這種情況下,通常預設為升冪。

---

### [](#4-insert)4. INSERT

**什麼是 INSERT?**

`INSERT` 是**用來新增資料的語法**。

例如,在 users 資料表中新增一位新使用者:

INSERT INTO users (name, age)
VALUES ('山田', 25);


這樣就會新增以下資料:

name:山田
age :25


**基本語法**

INSERT INTO 資料表名稱 (欄位名稱)
VALUES (要新增的值);


**注意事項**

指定字串時,基本上要用單引號包住。

'山田'


數字則可以直接指定,例如:

25


---

### [](#5-update)5. UPDATE

**什麼是 UPDATE?**

`UPDATE` 是**用來更新已經登錄的資料的語法**。

例如,要把山田先生的年齡改成 26 歲:

UPDATE users
SET age = 26
WHERE name = '山田';


**基本語法**

UPDATE 資料表名稱
SET 欄位名稱 = 要更新的值
WHERE 條件;


**注意不要忘了 WHERE**

例如:

UPDATE users
SET age = 26;


這樣做的話,**users 資料表中的所有使用者年齡都可能變成 26。**

因此,使用 UPDATE 時一定要確認:

> 「要更新哪筆資料?」

---

### [](#6-delete)6. DELETE

**什麼是 DELETE?**

`DELETE` 是**用來刪除資料的語法**。

例如,要刪除 id 為 3 的使用者:

DELETE FROM users
WHERE id = 3;


**基本語法**

DELETE FROM 資料表名稱
WHERE 條件;


**DELETE 也要注意 WHERE**

DELETE FROM users;


這樣可能會把資料表中的所有資料全部刪除。

在實務上尤其要特別小心這個語法。

---

### [](#7-group-by)7. GROUP BY

**什麼是 GROUP BY?**

`GROUP BY` 是**用來把相同值分組的語法**。

例如,假設有一個管理購買紀錄的 orders 資料表。

iduser\_idprice111000212000321500423000如果想按使用者彙總購買金額:

SELECT user_id, SUM(price)
FROM orders
GROUP BY user_id;


這樣就可以得到:

user_id 1 → 3000 日圓
user_id 2 → 4500 日圓


像這樣,依使用者分組整理。

**GROUP BY 的概念**

零散的資料

依相同值分組

按群組進行彙總


`GROUP BY` 常常會和後面要介紹的 `COUNT`、`SUM` 等彙總函數一起使用。

---

### [](#8-having)8. HAVING

**什麼是 HAVING?**

`HAVING` 是**用來對 GROUP BY 分組後的資料指定條件的語法**。

例如,

> 想要彙總每位使用者的購買金額,只取得總金額 3000 日圓以上的使用者

可以寫成:

SELECT user_id, SUM(price)
FROM orders
GROUP BY user_id
HAVING SUM(price) >= 3000;


**和 WHERE 的差異**

這是初學者很容易混淆的地方。

WHERE
→ 對分組前的資料指定條件

HAVING
→ 對 GROUP BY 分組後的資料指定條件


先記成:

> **WHERE 是資料,HAVING 是群組**

會比較容易理解。

---

### [](#9-join)9. JOIN

**什麼是 JOIN?**

`JOIN` 是**用來結合多個資料表的語法**。

在實際資料庫中,不一定會把所有資訊都存放在同一個資料表裡。

例如:

**users 資料表**

idname1山田2佐藤**orders 資料表**

iduser\_idprice111000222000如果想同時取得:

> 使用者名稱和購買金額

就要使用 JOIN。

SELECT users.name, orders.price
FROM users
INNER JOIN orders
ON users.id = orders.user_id;


**INNER JOIN**

`INNER JOIN` 是**取得兩個資料表中都能對應上的資料**。

SELECT users.name, orders.price
FROM users
INNER JOIN orders
ON users.id = orders.user_id;


**LEFT JOIN**

`LEFT JOIN` 是**在結合資料時,基本上保留左邊資料表的資料**。

SELECT users.name, orders.price
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;


**JOIN 在實務上很重要**

在 SQL 專案中,常常需要從多個資料表取得資料,因此:

- `INNER JOIN`
- `LEFT JOIN`
- `ON`

這些都是參與專案前應該先理解的重點。

---

### [](#10-countsumavg)10. COUNT・SUM・AVG

**什麼是 COUNT・SUM・AVG?**

這些是**在彙總資料時會使用的函數**。

**COUNT**

計算資料筆數。

SELECT COUNT(*)
FROM users;


可以取得 users 資料表中有幾筆資料。

**SUM**

加總數值。

SELECT SUM(price)
FROM orders;


可以取得購買金額總和等資料。

**AVG**
求平均值。

SELECT AVG(age)
FROM users;


可以取得使用者的平均年齡等資料。

**常用的彙總函數**

函數意義`COUNT`筆數`SUM`總和`AVG`平均`MAX`最大值`MIN`最小值先記住 `COUNT`、`SUM`、`AVG` 會比較好。

[](#%E5%AE%9F%E5%8B%99%E3%81%A7%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86sql%E3%81%AE%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B)實務上常用的 SQL 組合
---------------------------------------------------------------------------------------------------------------------------------------------

SQL 通常不是只單獨使用一種語法,而是會將多種語法組合起來使用。

例如,

> 取得 20 歲以上的使用者,並依年齡由大到小排序

可以寫成:

SELECT name, age
FROM users
WHERE age >= 20
ORDER BY age DESC;


再加上 JOIN 的話:

SELECT users.name, orders.price
FROM users
INNER JOIN orders
ON users.id = orders.user_id
WHERE orders.price >= 1000
ORDER BY orders.price DESC;


就會變成像這樣的 SQL。

一開始可能會覺得很難,但如果從各個語法的角色來理解,會比較容易掌握:

SELECT → 要取得什麼?
FROM → 從哪裡?
JOIN → 要和其他資料表結合嗎?
WHERE → 什麼條件?
ORDER BY → 要怎麼排序?


---

### [](#%E5%8F%82%E7%94%BB%E5%89%8D%E3%81%AB%E7%89%B9%E3%81%AB%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E6%A7%8B%E6%96%87)參與專案前特別想先記住的語法

如果 10 個語法無法全部完美記住,可以先優先學下面這些。

**優先度 ★★★**

SELECT
WHERE
ORDER BY
JOIN
GROUP BY


這些在 SQL 搜尋、取得資料時很常出現。

特別是 `SELECT` 和 `WHERE` 是 SQL 的基礎,務必要優先記住。

**優先度 ★★**

INSERT
UPDATE
DELETE
HAVING
COUNT / SUM / AVG


這些在實務上也會用到,因此至少先理解基本用法會比較安心。

[](#sql%E3%82%92%E8%A6%9A%E3%81%88%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88)學習 SQL 時的重點
-------------------------------------------------------------------------------------------------------------------------

SQL 只靠死背語法,很難真正學會。

例如看到:

SELECT name
FROM users
WHERE age >= 20;


時,能夠用中文說出:

> 「從 users 資料表取得 20 歲以上的人名」

這點很重要。

**看到 SQL 時,試著轉成中文理解**

SELECT


↓

「要取得什麼?」

FROM


↓

「從哪個資料表?」

WHERE



↓

「什麼條件?」

養成這樣思考的習慣,會更容易理解 SQL。

[](#%E3%81%BE%E3%81%A8%E3%82%81)總結
-----------------------------------

這次介紹了 SQL 初學者在參與專案前應該先記住的 10 個語法。

\#語法作用1`SELECT`取得資料2`WHERE`指定條件3`ORDER BY`排序4`INSERT`新增資料5`UPDATE`更新資料6`DELETE`刪除資料7`GROUP BY`將資料分組8`HAVING`對群組指定條件9`JOIN`結合資料表10`COUNT`・`SUM`・`AVG`彙總資料SQL 的語法雖然很多,但不需要一開始全部都記起來。

先以

**SELECT → WHERE → ORDER BY → JOIN → GROUP BY**

為中心學習,慢慢增加能夠使用的語法吧。

實際寫寫看 SQL,確認資料會如何被取得,才是學會 SQL 的捷徑。

感謝你讀到最後!

---

原文出處:https://qiita.com/nt_matsuda56/items/156d782818f30a3b563e

精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝9   💬4   ❤️1
189
🥈
我愛JS
💬1  
6
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登