什麼是 SQL?資料庫語言簡單說明
SQL(Structured Query Language,唸作「S-Q-L」或「sequel」)是操作關聯式資料庫的標準語言。關聯式資料庫是以列與欄組成的資料表來儲存資料,例如 Postgres、MySQL、SQLite 和 SQL Server。你可以用 SQL 向資料提出問題(「這個月有哪些顧客預約?」),也可以用它來新增、修改或刪除紀錄。SQL 從 1970 年代就已存在,是國際標準,為全球大量的應用程式提供動力。
用 AI 建立東西時,為什麼 SQL 很重要
當你要求 AI 應用程式建構工具「儲存訂單」或「顯示即將到來的預約清單」時,必須有某個東西與資料庫溝通。在大多數應用程式中,那就是 SQL,它可能是直接撰寫的,也可能是由 ORM 產生的。
你不需要自己寫 SQL,但稍微了解會很有幫助:
- 你可以檢查自己的資料。 一個簡短的查詢,就能比建立新畫面更快回答「這週有多少人註冊?」。
- 你可以要求更好的報表。 「依月份與服務分組計算營收」就是一個 SQL 的概念。了解它能讓你的要求更清楚。
- 你可以發現危險的變更。 沒有
WHERE子句的DELETE或UPDATE會影響每一列資料。在執行前先發現它很重要。 - 你的資料不會被綁死。 SQL 是共通的標準,因此儲存在 SQL 資料庫中的資料,可以被許多工具移動與讀取。
日常生活中的比喻
想像一間整理得非常井然有序的圖書館,館員只會說一種精確而簡單的語言。
你不必自己走遍書架。你把一張卡片交給館員:「找出這位作者的所有書籍,出版於 2010 年之後,依最新排序。」館員對整棟建築瞭如指掌,會把正好符合條件的書,按照那個順序帶回給你。
SQL 就是那張卡片上的語言。你說的是要什麼,而不是如何找到它,資料庫會自己找出最快的路徑。
SQL 如何運作:資料表、列與欄
關聯式資料庫把資料保存在資料表中。每張資料表存放一種事物,每一列是一筆紀錄,每一欄是一項資訊:
customers(顧客)
| id | name | city | |
|---|---|---|---|
| 1 | Lena Ortiz | lena@example.com | Lisbon |
| 2 | Sam Patel | sam@example.com | Leeds |
orders(訂單)
| id | customer_id | total | placed_at |
|---|---|---|---|
| 101 | 1 | 42.00 | 2026-09-20 |
| 102 | 2 | 18.50 | 2026-09-22 |
| 103 | 1 | 25.00 | 2026-09-27 |
customer_id 欄把每筆訂單連結到一位顧客。正是這種連結,讓資料庫成為「關聯式」的。
實例:回答實際問題
1. 讀取資料 — 「列出所有位於 Lisbon 的顧客」:
SELECT name, email
FROM customers
WHERE city = 'Lisbon';
2. 排序與限制筆數 — 「最近的五筆訂單」:
SELECT id, total, placed_at
FROM orders
ORDER BY placed_at DESC
LIMIT 5;
3. 合併資料表 — 「每筆訂單與顧客的姓名」:
SELECT o.id, c.name, o.total
FROM orders o
JOIN customers c ON c.id = o.customer_id;
4. 彙總 — 「每位顧客的總消費金額」:
SELECT c.name, SUM(o.total) AS total_spent
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.name
ORDER BY total_spent DESC;
以上面的範例資料來看,結果會是 Lena Ortiz 的 67.00,以及 Sam Patel 的 18.50。
5. 修改資料:
INSERT INTO customers (name, email, city)
VALUES ('Ana Silva', 'ana@example.com', 'Porto');
UPDATE customers SET city = 'Porto' WHERE id = 1;
DELETE FROM orders WHERE id = 102;
這些操作對應到幾乎所有應用程式的四項基本動作:新增、讀取、更新與刪除,也就是CRUD。
需要特別警告:沒有 WHERE 子句的 UPDATE customers SET city = 'Porto'; 會變更每一位顧客的資料。執行任何變更之前,務必先檢查 WHERE。
SQL 的主要指令
| 指令 | 功能 |
|---|---|
SELECT | 讀取資料 |
INSERT | 新增列 |
UPDATE | 修改既有的列 |
DELETE | 刪除列 |
CREATE TABLE / ALTER TABLE | 建立或修改資料表的結構 |
WHERE | 篩選會受影響的列 |
JOIN | 合併相關的資料表 |
GROUP BY | 將列分組彙總,搭配 COUNT、SUM、AVG 使用 |
ORDER BY / LIMIT | 排序並限制結果筆數 |
SQL 是標準化的,但每種資料庫都會加入自己的擴充功能,稱為方言(dialect)。Postgres、MySQL 和 SQLite 都能理解上面的範例,只是日期函式等細節會略有不同。
關鍵術語
| 術語 | 意思 |
|---|---|
| 查詢(Query) | 一段 SQL 陳述式,尤其是用來讀取資料的。 |
| 資料表/列/欄(Table / row / column) | 一種事物/一筆紀錄/一項屬性。 |
| 主鍵(Primary key) | 能唯一識別每一列的欄位,通常是 id。 |
| 外部鍵(Foreign key) | 指向另一張資料表某一列的欄位,例如 customer_id。 |
| 索引(Index) | 讓搜尋某個欄位快很多的查找結構。 |
| 結構描述(Schema) | 所有資料表與欄位的結構。 |
| 交易(Transaction) | 一組要麼全部成功、要麼全部失敗的變更。 |
| SQL 注入(SQL injection) | 將使用者輸入偷偷混入查詢的攻擊。可透過參數化查詢來防範。 |
常見迷思
- 「SQL 就是資料庫。」 SQL 是語言;Postgres、MySQL 和 SQLite 是能說這種語言的資料庫。
- 「SQL 很老舊,所以已經過時了。」 它是成熟的技術,並非淘汰的技術。現代資料庫與資料工具仍在使用它,而較新的工具也常常加入 SQL 支援。
- 「只有工程師能用 SQL。」 分析師、行銷人員和創辦人每天都在使用簡單的查詢。
- 「SQL 無法處理彈性的資料。」 許多 SQL 資料庫也能儲存 JSON。例如 Postgres 就有
jsonb型別。請參閱SQL 與 NoSQL。 - 「讓 AI 在正式環境執行任何 SQL 都沒問題。」 讀取的風險很低;但對正式資料進行的修改與刪除,需要備份並再次仔細檢查。請參閱如何備份應用程式資料庫。
可以向 AI 建構工具要求的事項
- 「給我看我資料庫中的資料表,以及每個欄位的意義。」
- 「寫一個唯讀查詢:過去 30 天每天有多少新註冊?」
- 「在執行任何 UPDATE 或 DELETE 之前,先給我看查詢內容,以及它會影響多少列。」
- 「為我們最常用來篩選與排序的欄位加上索引。」
- 「確保每個使用使用者輸入的查詢都是參數化的。」
- 「把訂單與付款的更新包在交易中,讓它們不會只完成一半。」
Mythex 中的 SQL
當你的應用程式需要儲存資料時,Mythex 會為專案加入一個專屬的 Postgres 資料庫。你可以在聊天中提出要求,例如「把候補名單的電子郵件儲存到資料庫」,或使用 /database 指令(資料庫)。agent 會建立資料表並撰寫查詢,你也可以在詢問模式中要求它用白話文解釋任何查詢。關於資料庫本身的更多資訊,請閱讀什麼是 Postgres。
常見問題
簡單來說,什麼是 SQL?
SQL(Structured Query Language,結構化查詢語言)是操作關聯式資料庫的標準語言。你可以用它向資料提出問題,例如「這週有哪些訂單」,也可以用來新增、修改或刪除紀錄。
SQL 要怎麼唸?
「S-Q-L」(逐字念出字母)和「sequel」兩種唸法都很常見,也都正確。這個語言原本名為 SEQUEL,第二種唸法就是由此而來。
SQL 是程式語言嗎?
SQL 是專門用來管理資料的查詢語言。你描述想要的結果,資料庫會自己找出取得方式。它本身並不用來建立完整的應用程式,但幾乎所有使用關聯式資料庫的應用程式都會用到它。
SQL 難學嗎?
基礎概念並不難:SELECT、WHERE、ORDER BY、INSERT、UPDATE 和 DELETE 涵蓋了大多數日常需求,讀起來幾乎就像英文句子。而 JOIN、分組和效能調校則需要花較長時間才能熟練。
用 AI 建立應用程式需要懂 SQL 嗎?
不需要。AI 建構工具會替你撰寫 SQL 或資料庫程式碼。稍微了解一些,可以幫助你檢查資料、要求報表,並在風險變更發生前先察覺。