演算子の優先順位 (Transact-SQL)
複合式に複数の演算子がある場合は、演算子の優先順位によって、操作の実行順序が決まります。実行順序は、結果値に大きく影響します。
演算子には、次の表に示す優先順位レベルが定義されています。優先順位が高い演算子は、優先順位が低い演算子よりも前に評価されます。
レベル |
演算子 |
---|---|
1 |
~ (ビットごとの NOT) |
2 |
* (乗算)、/ (除算)、% (剰余) |
3 |
+ (正号)、- (負号)、+ (加算)、(+ 連結)、- (減算)、& (ビットごとの AND)、^ (ビットごとの排他的 OR)、| (ビットごとの OR) |
4 |
=, >, <, >=, <=, <>, !=, !>, !< (比較演算子) |
5 |
NOT |
6 |
AND |
7 |
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME |
8 |
= (代入) |
式の中の 2 つの演算子が同じ優先順位レベルの場合は、式の中での位置に従って演算子は左から右へと評価されます。たとえば、次の SET ステートメントで使用される式では、減算演算子が加算演算子よりも前に評価されます。
DECLARE @MyNumber int
SET @MyNumber = 4 - 2 + 27
-- Evaluates to 2 + 27 which yields an expression result of 29.
SELECT @MyNumber
式の中で演算子の定義済みの優先順位を無効にするには、かっこを使用します。この場合、かっこ内のすべての演算が評価され、1 つの値が作成されてから、かっこ外の演算子でこの値が使用されます。
たとえば、次の SET ステートメントで使用される式では、乗算演算子の優先順位は加算演算子よりも高くなります。したがって、乗算演算子が先に評価され、式の結果は 13 になります。
DECLARE @MyNumber int
SET @MyNumber = 2 * 4 + 5
-- Evaluates to 8 + 5 which yields an expression result of 13.
SELECT @MyNumber
次の SET ステートメントで使用される式では、かっこにより、加算が先に実行されます。式の結果は 18 になります。
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + 5)
-- Evaluates to 2 * 9 which yields an expression result of 18.
SELECT @MyNumber
式の中でかっこが入れ子になっている場合は、最も深い入れ子になった式が先に評価されます。次の例ではかっこが入れ子になっており、かっこで囲まれている 5 - 3 という式が最も深い入れ子になっています。この式の結果は 2 になります。次に、加算演算子 (+) によって、この結果に 4 が加算されます。ここでの結果は 6 になります。最後に 6 に 2 が乗算され、式の最終的な結果は 12 になります。
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + (5 - 3) )
-- Evaluates to 2 * (4 + 2) which then evaluates to 2 * 6, and
-- yields an expression result of 12.
SELECT @MyNumber