在 SQL 編寫中,運算符的正確選用直接影響查詢邏輯的正確性與性能。本文通過實例演示,重點解析 <=>、LEAST/GREATEST、REGEXP 等易混淆、高頻使用的運算符。
<=>標準 = 在處理 NULL 時遵循三值邏輯:NULL = NULL 結果為 NULL(非 TRUE)。而 <=> 將 NULL 視為可比較值:
NULL <=> NULL → 1 (TRUE)NULL <=> 1 → 0 (FALSE)1 <=> 0 → 0 (FALSE)SELECT NULL <=> NULL UNION ALL
SELECT NULL <=> 1 UNION ALL
SELECT 1 <=> 0 UNION ALL
SELECT NULL = NULL;

應用場景:去重邏輯、關聯查詢中含 NULL 列的 JOIN 條件、WHERE col <=> val 替代 WHERE (col = val OR (col IS NULL AND val IS NULL))。
LEAST() 與 GREATEST()SELECT LEAST(2,0), LEAST('a','b','c','d'), LEAST(10,20,NULL);

0'a'⚠ 禁忌:嚴禁混合數據類型(如數值與字符串),會報錯:

邏輯與 LEAST 相反,同樣遇 NULL 則 NULL:
SELECT GREATEST(2,0), GREATEST('a','b'), GREATEST(10,NULL);

REGEXPMySQL 支持 POSIX 正則語法,常用元字符:
| 模式 | 含義 | 示例匹配 |
|---|---|---|
^s | 以 s 開頭 | 'ssky' ✓ |
y$ | 以 y 結尾 | 'ssky' ✓ |
.sky | 任意字符 + sky | 'ssky' ✓ |
[s]* | 0 或多個 s | 'ssky' ✓(匹配開頭 ss) |
SELECT 'ssky' REGEXP '^s',
'ssky' REGEXP 'y$',
'ssky' REGEXP '.sky',
'ssky' REGEXP '[s]*';

性能提示:REGEXP 無法利用索引,大表查詢慎用;若僅做前綴匹配,優先用 LIKE 'prefix%' 走索引。
避坑清單
NULL 比較務必用 <=> 或 IS NULL,切勿用 =。LEAST/GREATEST 參數類型必須統一,且含 NULL 直接返回 NULL。LIKE,複雜模式才用 REGEXP,並評估全表掃描代價。