~/VibeHandbook
免費 PDF

程式語言

iso.org

SQL

是什麼

(Structured Query Language,結構化查詢語言)是查詢和操作關係型資料庫的標準語言,適用於 PostgreSQL、MySQL、SQLite 和 SQL Server 等。想像在餐廳點菜:你只說盤子裡要什麼,而不說怎麼烹飪。SQL 也是這樣工作的。你描述想要的結果,由資料庫引擎決定如何高效地取出它。這就叫作宣告式。

優勢

  • 宣告式:陳述你想要什麼,而非如何逐行遍歷。
  • 歷經數十年驗證,引擎成熟,一致性保障強。
  • 基於集合的操作(連線、聚合、視窗函式)簡潔而高效。
  • 可遷移——核心 SQL 在大多數關係型資料庫上通用。

權衡取捨

  • 方言各異(Postgres 對比 MySQL 對比 SQLite),因此可移植性並非完全。
  • 很容易寫出慢查詢;效能取決於索引和查詢計劃。
  • 它不是通用程式語言——控制流和邏輯寫起來彆扭。
  • 模式變更(遷移)在生產環境中需要謹慎對待。

何時選用

每當你的資料是關係型的、且按結構查詢時就選用 SQL:報表、分析、應用後端,以及任何資料完整性和連線很重要的系統。對於結構化資料上的聚合和臨時查詢,它是合適的工具,並且幾乎可以和任何後端語言搭配使用。

與 vibe coding 的契合度

AI 助手擅長 SQL,能出人意料地把大白話問題翻譯成查詢,但它們可能會猜測你的模式。指揮 AI 時,把實際的表定義(CREATE TABLE 語句)貼上進去,並指明你具體使用的資料庫(Postgres、SQLite 等),這樣它才會使用正確的方言和函式。要求它解釋查詢,併為慢查詢建議索引。務必讓它對使用者輸入做引數化,而不是把值直接拼進查詢語句裡。設想有人在輸入框裡填的不是名字,而是一條命令;如果你把這段文字原樣拼進查詢,資料庫可能會執行它。把使用者輸入隔離開就能防止這種情況,這種攻擊叫作 SQL 注入。在對生產環境執行之前,先在小樣本上驗證生成的查詢。

SELECT u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.active = true
GROUP BY u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC;