指南

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

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。

需要特別警告:沒有 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 或資料庫程式碼。稍微了解一些,可以幫助你檢查資料、要求報表,並在風險變更發生前先察覺。

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 简体中文 繁體中文(香港)