指南

什麼是 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(客戶)

idnameemailcity
1Lena Ortizlena@example.comLisbon
2Sam Patelsam@example.comLeeds

orders(訂單)

idcustomer_idtotalplaced_at
101142.002026-09-20
102218.502026-09-22
103125.002026-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 或者數據庫程式碼。識少少就有幫助,可以用嚟檢查你嘅數據、要求報告,並喺高風險改動發生之前就察覺。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)