MySQL 的 WHERE 子句支援多樣化的篩選方式,掌握這些技巧能大幅提升查詢效率。
直接比較數值欄位,例如查詢單價超過 100 的記錄:
SELECT * FROM sheet1 WHERE 銷售單價 > 100
使用單引號包裹字串常數,注意中文欄位名需用反引號:
SELECT * FROM sheet1 WHERE `物品名稱` = '擋泥板'
MySQL 採用 BETWEEN ... AND ... 處理日期區間,格式建議統一為 YYYY-MM-DD:
SELECT * FROM sheet1 WHERE `出庫日期` BETWEEN '2005-01-04' AND '2005-01-10'
透過 AND、OR 邏輯運算子串聯多個條件:
SELECT * FROM sheet1 WHERE `出庫日期` BETWEEN '2005-01-04' AND '2005-01-10' AND `銷售單價` > 100
善用 LIKE 配合萬用字元:% 代表任意長度字串,_ 代表單一字元。
SELECT * FROM sheet1 WHERE `物品名稱` LIKE '%扶手%'
應用程式層面建議使用參數綁定,避免 SQL 注入風險:
SET @item = '擋泥板'; SELECT * FROM sheet1 WHERE `物品名稱` = @item
SELECT * FROM sheet1 WHERE `物品名稱` IN ('車衣', '扶手箱')
如 LEFT()、RIGHT()、SUBSTRING() 等字串函數可針對特定位置比對:
SELECT * FROM sheet1 WHERE LEFT(`物品代碼`, 3) = '028'
SELECT * 會回傳所有欄位,生產環境建議明確列出所需欄位以減少網路傳輸:
SELECT `出庫日期`, `物品代碼`, `規格`, `單位` FROM ChuKu
DISTINCT 關鍵字可過濾重複列:
SELECT DISTINCT `物品代碼` FROM ChuKu
TOP N PERCENT 適用於大數據集快速預覽(MySQL 實際使用 LIMIT 配合隨機排序):
SELECT * FROM ChuKu ORDER BY RAND() LIMIT 30%
DATE_FORMAT() 或 FORMAT() 可在查詢層直接轉換顯示格式:
SELECT `ID`, DATE_FORMAT(`出庫日期`, '%Y-%m-%d') AS `出庫日` FROM ChuKu
ASC 升序、DESC 降序可混合使用,配合 LIMIT 取 Top-N:
SELECT * FROM ChuKu ORDER BY `出庫日期` ASC, `銷售單價` DESC LIMIT 10
GROUP BY 搭配 SUM()、COUNT()、AVG()、MAX()、MIN() 等聚合函數:
SELECT `物品代碼`, SUM(`出庫數量`) AS `總出庫量` FROM ChuKu GROUP BY `物品代碼`
HAVING 子句專門處理聚合後的篩選,不可用 WHERE:
SELECT `物品代碼`, SUM(`出庫數量`) AS `總出庫量` FROM ChuKu GROUP BY `物品代碼` HAVING SUM(`出庫數量`) >= 3
掌握這些 SELECT 核心用法,能應對 90% 以上的業務查詢場景。建議搭配 EXPLAIN 分析執行計畫,持續優化索引與 SQL 結構。