SQL 是「結構化查詢語言」(Structured Query Language),當初的設計目標是讓非程式設計師也能自行處理報表需求——這也解釋了它為什麼長得不像一般程式語言,而是刻意模仿英文句子。
除了外觀,SQL 最值得學會善用的特質是:它是宣告式(declarative)程式語言。
- 你宣告「想要什麼結果」,因此思考的對象是你要解決的問題。
- 多數程式語言則要求開發者把心中的解法轉成一步一步的操作流程,思考的對象是你選定的解法。
因此可以說 SQL 是非常高階的語言:即使身為開發者,你也不必想出詳細解法,只要把問題理解到能夠精確轉述的程度;接著由你選用的 RDBMS 找出執行計畫(plan)並執行,回傳你要的結果集。
有些開發者因為無法掌控查詢計畫的每個細節而感到挫折,於是把 SQL 藏在另一層技術底下,讓自己「感覺」仍握有控制權。但任何架在 SQL 上面的額外抽象層,最終仍只是替你產生 SQL——你對實際執行計畫的控制反而更少。
本節的目標是讓你對寫 SQL 足夠自在:不覺得失去了對執行細節的控制,而是能放心交給 RDBMS。使用 PostgreSQL 尤其容易建立這種信任——它完全開源、文件完善、支援非常詳細的 EXPLAIN 指令,而且原始碼註解充足、易於閱讀與檢視。