Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.
什麼是 SQL 建構器
Visual SQL Builder 讓您在表單中輸入資料表名稱、要取得的欄位、篩選條件與 JOIN 條件,以視覺化方式組出 SELECT 語句。比起每次都要從頭想語法,透過表單整理條件更適合正在學習 SQL 的人,也適合日常的資料抽取工作。

輸入的資料表名稱與條件不會傳送到伺服器,SQL 是在瀏覽器內產生的。
逐步組出一個查詢
- 決定主要資料表
- 加入想取得的欄位(未輸入則為
*) - 視需要指定
WHERE條件 - 需要其他資料表時加入
JOIN - 檢查產生的 SQL,需要的話用 SQL 格式化工具 整理
例如想確認每位使用者的訂單數量,可以結合 users 與 orders:
SELECT
users.id,
users.name,
COUNT(orders.id) AS order_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE users.deleted_at IS NULL
GROUP BY users.id, users.name
ORDER BY order_count DESC;
數值型別如何自動判斷並加上引號
WHERE 的值是以文字方式輸入的,但如果原封不動塞進 SQL,像 age > 20 這種數值條件就會被加上多餘的引號變成 age > '20'。這個工具會檢視每個值,數值就保持原樣,其他情況才自動加上單引號。
let val = w.value;
if (
w.operator !== 'IS NULL' &&
isNaN(Number(val)) && // 無法轉換成數字 -> 視為字串
!val.startsWith("'") // 已經加了引號 -> 不重複包裹
) {
val = `'${val}'`;
}
isNaN(Number(val)) 用來判斷是否為數值,!val.startsWith("'") 則是避免使用者自己輸入 'active' 這種已加引號的值時被重複包裹。選擇 IS NULL 運算子時不會用到值本身,因此不在判斷範圍內。
思考 JOIN 該怎麼選
不確定該用哪種 JOIN 時,先決定要保留哪些列會比較好判斷。
| 想做的事 | JOIN 種類 |
|---|---|
| 只想取得有訂單的使用者 | INNER JOIN |
| 想連沒有訂單的使用者也一併列出 | LEFT JOIN |
| 想附加主檔資料 | LEFT JOIN |
| 只想篩選出有關聯資料的列 | INNER JOIN |
INNER JOIN 只取得兩張表都有對應資料的列,LEFT JOIN 則保留左表的列並連接右表。在工具中切換 JOIN 種類並觀察產生的 SQL 變化,能實際感受這個差異。若要了解 RIGHT JOIN、FULL JOIN、SELF JOIN 等完整內容,可參考 SQL JOIN 完全參考。
連接多張資料表
即使有三張以上的資料表,也只需要在工具中持續加入 JOIN。內部實作只是把 joins 陣列依序串接起來的簡單迴圈:
let sql = `SELECT ${selectParts.join(', ')}\nFROM ${mainTable}`;
state.joins.forEach((j) => {
if (j.leftTable && j.rightTable) {
sql += `\n${j.type} ${j.rightTable} ON ${j.leftTable}.${j.leftCol} = ${j.rightTable}.${j.rightCol}`;
}
});
每加入一個 JOIN 就會多一行,因此不論在表單還是產生的 SQL 中,都很容易追蹤「目前是哪些表連在一起」。
檢查產生的 SQL 時要注意的重點
- 資料表名稱與欄位名稱是否與實際資料庫一致
- JOIN 條件是否有遺漏
WHERE條件是否過嚴或過鬆- 進行彙總時,
GROUP BY的粒度是否正確 - 需要的地方是否加上了
ORDER BY或LIMIT - 對正式環境的資料而言,這個查詢會不會太重
SQL 建構器產生的是查詢草稿。最終仍應搭配所使用資料庫的方言、索引與執行計畫一併確認。
為什麼很適合用來學 SQL
比起死背語法,理解每個子句各自負責什麼能更快掌握 SQL。SELECT 決定要取出的欄位、FROM 指定資料表、WHERE 負責篩選、JOIN 負責合併資料表、ORDER BY 負責排序——一邊操作表單一邊觀察產生的結果,這些對應關係會很自然地浮現出來。熟悉之後,也可以試著手動修改產生的查詢;用 SQL 格式化工具 整理過的結果,還能留作易讀的學習範例。
常見問題
只靠 SQL 建構器能完成複雜的 SQL 嗎?
它很適合用來草擬基本的 SELECT、WHERE、JOIN。資料庫專屬函式、複雜的子查詢,以及需要效能調校的 SQL,產生之後仍需要手動確認。
數值與字串的引號是怎麼判斷的?
依輸入值是否能用 Number() 轉換成數字來判斷。無法轉換就自動加上單引號,已經加過引號的值不會重複包裹。選擇 IS NULL 時則完全不使用該值。
SQL 初學者也能使用嗎?
可以。一邊輸入項目一邊確認 SQL 的樣貌,很適合邊學邊用,特別是拿來比較不同 JOIN 種類與條件式的差異。
輸入的資料表名稱或條件會傳送到伺服器嗎?
不會。SQL 建構器在瀏覽器內運作,不會將輸入內容傳送到伺服器,SQL 是在本機產生的。
總結
- SQL 建構器把 SQL 從「靠背誦寫出來」變成「整理條件後組合出來」
- 值的引號判斷透過
Number()自動化,並避免重複加引號 - 在表單中切換 JOIN 種類並比較結果,是理解 JOIN 最快的方式
- 多個 JOIN 只是依序串接的陣列,結構單純
當 SELECT 或 JOIN 語法卡住時,先用 Visual SQL Builder 組出查詢骨架,再視需要格式化、檢查後執行即可。