掌握 T-SQL 的註解風格、運算子優先順序、萬用字元語意,是撰寫可讀、正確、高效查詢的基礎語法功力。
| 風格 | 語法 | 範圍 | 標準 | 建議用途 |
|---|---|---|---|---|
| 單行註解 | -- 註解文字 | 行尾 | ANSI SQL | 行內說明、暫時停用單行 |
| 多行註解 | /* 註解區塊 */ | 跨行 | C 語言風格 | 區塊說明、大段程式碼暫時停用、檔案標頭資訊 |
/* outer /* inner */ outer */ 會在第一個 */ 結束,導致語法錯誤。| 優先順序 | 運算子類別 | 運算子 | 結合性 |
|---|---|---|---|
| 1 | 括號 | () | 左→右 |
| 2 | 位元一元 | ~ (NOT) | 右→左 |
| 3 | 算術乘除 | * / % | 左→右 |
| 4 | 算術加減 | + - | 左→右 |
| 5 | 位元異或 | ^ | 左→右 |
| 6 | 位元且 | & | 左→右 |
| 7 | 位元或 | | | 左→右 |
| 8 | 比較 | = > < >= <= <> != !> !< | 左→右 |
| 9 | 邏輯非 | NOT | 右→左 |
| 10 | 邏輯且 | AND | 左→右 |
| 11 | 邏輯或 | OR | 左→右 |
注意: !=、!>、!< 為非 ANSI 標準,建議使用 <>、<=、>=。
<運算式1> + <運算式2>
CAST 為字串 (依資料型別優先順序)。SET CONCAT_NULL_YIELDS_NULL OFF,但此選項已棄用)。ISNULL/COALESCE 預處理 NULL 值。範例 4-7:
DECLARE @startdate datetime = '2000-01-01';
SELECT 'Start Date: ' + CONVERT(varchar(12), @startdate, 107);
-- 結果: Start Date: Jan 01 2000
範例 4-8:
SELECT '最高薪員工: ' + e_name + ' 薪資: ' + CONVERT(varchar(10), e_wage)
FROM employee
WHERE e_wage = (SELECT MAX(e_wage) FROM employee);
-- 結果: 最高薪員工: 張三 薪資: 8000.00
| 萬用字元 | 符合條件 | 範例 | 匹配範例 |
|---|---|---|---|
% | 任意長度 (含 0) 任意字元字串 | 'Mc%' | Mc, McDonald, McKinley |
_ | 單一任意字元 | '_ean' | Dean, Sean, Jean |
[range] | 括號內指定範圍內的單一字元 | '[C-P]arsen' | Carsen, Larsen, Karsen (C-P 範圍) |
[^range] | 不在指定範圍內的單一字元 | '[^A-F]arsen' | Garsen, Harsen (非 A-F) |

WHERE col LIKE '100\%' ESCAPE '\' 查詢字面值 '100%'。LIKE '%keyword%' 無法使用索引求值 (Index Seek),導致全表掃描。全文檢索或 CHARINDEX + 計算欄位索引可改善。COLLATE Latin1_General_CS_AS。WHERE col LIKE @pattern 避免動態 SQL 注入風險。& | ^ ~) 僅用於旗標位元操作,勿混雜邏輯判斷。<> 而非 !=)。語法細節決定查詢正確性與可維護性,將運算子優先順序表、萬用字元速查卡貼在工位旁,養成寫查詢時隨手驗證的習慣。