跳至主要內容
類別 3:程式設計與技術 3 / 6
中階 Guide 15 Coding SQL Database

SQL 查詢撰寫

用 Claude 撰寫高效的 SQL 查詢 — 從簡單的 SELECT 到複雜的 JOIN、CTE 和效能優化。

2026年3月25日 9 min read

你將學到什麼

  • 如何提示 Claude 從你所需內容的自然語言描述撰寫 SQL 查詢
  • 解釋你的 schema 讓 Claude 生成實際能在你的資料表上運行的查詢的技巧
  • 如何使用 Claude 優化慢速查詢並理解查詢執行計劃

使用情境

SQL 是一個你了解語言和你善用它之間的差距是巨大的技能。你可能對撰寫基本的 SELECT 陳述式感到得心應手,但在窗函數、側向連接或遞迴 CTE 上卻舉步維艱。或者你知道你需要什麼數據,但不確定使用哪種連接類型,或如何用集合論邏輯表達業務需求。

Claude 非常擅長將業務需求翻譯成 SQL,因為它既理解自然語言又理解關係代數。你用自然語言描述你想要的——「給我每個地區 2026 年第一季前 10 名客戶的收入」——Claude 處理翻譯成帶有正確聚合、分組和過濾邏輯的可用查詢。

除了生成之外,Claude 在查詢優化方面也很出色。當查詢運行緩慢時,你可以分享查詢和執行計劃,請 Claude 識別瓶頸——缺少索引、全資料表掃描、低效的連接順序,或應該是 CTE 的子查詢。這種優化指導曾經需要隨時待命的 DBA。現在只需一次對話。

逐步指南

第一步:先分享你的 schema

在請求 SQL 查詢之前,你能做的最重要的事情是分享你的資料表結構。沒有了解你的 schema,Claude 無法寫出正確的 JOIN 條件、使用正確的欄位名稱,或正確處理數據類型。

你不需要貼上完整的 DDL 傾印。一個簡潔的 schema 描述就足夠了:

資料表:
- orders (id, customer_id, created_at, status, total_amount)
- customers (id, name, email, region, created_at)
- order_items (id, order_id, product_id, quantity, unit_price)
- products (id, name, category, cost_price)

資料庫:PostgreSQL 15

如果關係不明顯,添加外鍵關係:「orders.customer_id 引用 customers.id」

第二步:用自然語言描述你的需求

用自然語言寫出你想要的,就像向同事解釋一樣。對以下方面要具體:

  • 你想要返回什麼數據(欄位、計算)
  • 要包含哪些記錄(過濾條件)
  • 如何分組或聚合(每個群組的總和、計數、平均值)
  • 如何排序以及你需要多少結果

範例:「我需要一個查詢,顯示每個客戶的訂單總數、總消費和平均訂單金額——但只針對 2025 年下了至少 3 個訂單的客戶。按總消費降序排列,並限制為前 20 名。」

第三步:指定你的 SQL 方言

SQL 方言的差異大到重要。提及你的資料庫:

  • PostgreSQL、MySQL 8、SQLite、SQL Server、BigQuery、Snowflake、DuckDB 等。

每種資料庫都有不同的日期函數、字符串聚合、窗函數和 CTE 語法。在 PostgreSQL 上完美運行的查詢可能需要針對 MySQL 進行調整。

第四步:連同查詢一起請求解釋

Claude 生成查詢時,請它解釋方法——尤其是帶有多個 CTE、窗函數或子查詢的複雜查詢。理解結構幫助你在需求改變時調整它。

在你的提示中添加:「在查詢後,簡要解釋它的工作方式——尤其是窗函數或 CTE 結構等非顯而易見的部分。」

第五步:優化慢速查詢

對於優化,同時貼上慢速查詢和其執行計劃(PostgreSQL 中 EXPLAIN ANALYZE 的輸出、MySQL 中 EXPLAIN 等)。請 Claude:

  1. 識別計劃中最昂貴的操作
  2. 建議對查詢或 schema 的具體修改(索引、將子查詢重寫為連接等)
  3. 顯示優化後的版本

提示範本

資料庫:[PostgreSQL / MySQL / SQLite / 等]

Schema:
[資料表名稱] ([欄位1, 欄位2, ...])
[資料表名稱] ([欄位1, 欄位2, ...])
[任何重要的關係,例如「orders.customer_id 引用 customers.id」]

我需要的:
[你想要的數據的自然語言描述,包括:]
- 要包含哪些記錄(過濾)
- 如何聚合或分組(如果適用)
- 如何排序和限制結果

請為此撰寫一個高效的 SQL 查詢。在查詢後,簡要解釋它的工作方式。

對於查詢優化:

資料庫:[PostgreSQL / MySQL / 等]

我有一個慢速查詢。以下是它:

[貼上查詢]

執行計劃(EXPLAIN ANALYZE 輸出):
[貼上 EXPLAIN 輸出]

是什麼導致了慢速,你如何重寫查詢或添加索引來修復它?

技巧與最佳實踐

  1. 為了可讀性使用 CTE,而不只是正確性 — 當 Claude 生成複雜查詢時,請它使用 CTE(公共資料表運算式)將邏輯分解成命名步驟。這使查詢更容易理解、測試和修改。添加:「請使用 CTE 而不是嵌套子查詢來組織這個。」

  2. 請求邊界情況處理 — SQL 有尖銳的邊緣:聚合中的 NULL、計算欄位中的除以零、空群組。添加 「適當地處理 NULL 值並避免除以零錯誤」 從一開始就獲得強健的查詢。

  3. 請求索引建議 — 獲得查詢後,問:「哪些索引最能改善這個查詢的效能?請撰寫 CREATE INDEX 陳述式。」 這通常是可用的最高槓桿優化。

  4. 先用 LIMIT 測試 — 當 Claude 給你一個你還沒有運行過的查詢時,請它添加一個 LIMIT 100,這樣你可以在不運行昂貴的全掃描的情況下驗證輸出。一旦你確認了正確性,可以刪除限制。

  5. 用數據範例迭代 — 如果查詢沒有返回你期望的,分享樣本輸入數據和預期輸出。「給定 orders 中的這 3 行……我期望得到……但我得到的是……」 這讓 Claude 推理確切的行為,而不是猜測你的數據。

動手試試

想一個你需要從你工作的資料庫中獲取的報告或數據提取。用一段自然語言段落寫出你需要什麼——欄位、過濾條件、分組和排序順序。然後打開 Claude 並貼上:

「以下是我的資料庫 schema:[你的資料表]。我需要:[你的自然語言描述]。請為此撰寫一個 PostgreSQL 查詢,並解釋任何複雜的部分。」

運行查詢,檢查輸出,並使用後續提示精化它。