什麼是 SQL?數據庫語言簡單解說
SQL(結構化查詢語言,Structured Query Language,讀作「S-Q-L」或者「sequel」)係處理關聯式數據庫嘅標準語言。關聯式數據庫會以行同列組成嘅表格儲存數據,例如 Postgres、MySQL、SQLite 同 SQL Server。你用 SQL 向數據提問(「呢個月邊啲客人預約咗?」),亦可以用佢新增、修改或者移除紀錄。佢由 1970 年代開始已經存在,係國際標準,而全球好大比例嘅應用程式都以它為基礎運作。
用 AI 建造嘢時,點解 SQL 重要
當你要求 AI 應用程式建構器「儲存訂單」或者「顯示即將到來嘅預約列表」,就需要有嘢同數據庫溝通;喺大部分應用程式入面,呢樣嘢就係 SQL,可能係直接寫出嚟,或者由 ORM 生成。
你唔需要自己寫 SQL,但識少少都好有用:
- 你可以檢查自己嘅數據。 一條簡短查詢,就可以快速回答「今個星期我哋有幾多個新註冊?」,唔使另外建造一個新畫面。
- 你可以要求更好嘅報告。 「按月同服務分組統計收入」就係一個 SQL 概念。明白呢點,你嘅要求就會更清楚。
- 你可以察覺危險嘅改動。 冇
WHERE子句嘅DELETE或者UPDATE會影響每一行,所以喺執行之前就要捉到。 - 你嘅數據唔會被鎖死。 SQL 係共用嘅標準,所以存放喺 SQL 數據庫嘅數據,可以被好多工具搬移同讀取。
日常生活比喻
想像一間組織得非常好嘅圖書館,有一位只會講精準而簡單語言嘅管理員。
你唔使自己逐個書架去搵。你將一張卡片交俾管理員:「搵出呢位作者嘅所有書,2010 年之後出版,最新嘅排喺前面。」管理員對成座建築瞭如指掌,然後會按照次序,將正正係呢啲書拎返嚟俾你。
SQL 就係張卡片上面嘅語言。你講嘅係想要咩,而唔係點樣搵;數據庫會自己搵出最快嘅路線。
SQL 點運作:表、行同列
關聯式數據庫會將數據儲存喺**表(table)入面。每張表存放一類嘢,每一行(row)就係一條紀錄,每一列(column)**就係一項資料:
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。
要特別留意:UPDATE customers SET city = 'Porto'; 如果冇 WHERE 子句,就會改動每一位客戶。執行任何改動之前,一定要先檢查 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 指令(數據庫)。代理會建立表並寫出查詢,而你亦可以喺 Ask 模式要求佢用白話解釋任何查詢。如果想進一步了解數據庫本身,可以閱讀什麼係 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 或者數據庫程式碼。識少少就有幫助,可以用嚟檢查你嘅數據、要求報告,並喺高風險改動發生之前就察覺。