Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 연산자 우선순위가 결과 집합에 미치는 영향 완벽 정리

MySQL은 연산자 우선순위(operator precedence)를 따르며, 표현식을 평가할 때 우선순위가 높은 연산자부터 먼저 처리합니다. 아래는 MySQL의 연산자들을 우선순위 순서대로 나열한 목록으로, 같은 줄에 있는 연산자들은 서로 동일한 우선순위를 가집니다.

INTERVAL
BINARY, COLLATE
!
- (단항 마이너스), ~ (단항 비트 반전)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&, AND
XOR
||, OR
:=

목록에서 맨 위에 있는 연산자일수록 우선순위가 높고, 맨 아래에 있을수록 우선순위가 낮습니다. 예를 들어 산술 연산자(*, /, DIV, %, MOD)는 비교 연산자(=, >, < 등)보다 먼저 평가되며, 논리 연산자(AND, OR, NOT)는 대체로 가장 나중에 평가됩니다.

동일한 우선순위 연산자의 평가 순서

하나의 표현식 안에서 동일한 우선순위 수준의 연산자가 여러 개 등장하면, MySQL은 왼쪽에서 오른쪽 방향으로 차례대로 평가합니다. 따라서 같은 우선순위를 가진 연산자가 섞여 있을 때는 평가 순서도 결과에 영향을 줄 수 있습니다.

연산자 우선순위가 결과에 미치는 영향 예시

다음 예제는 연산자 우선순위가 실제 결과 집합에 어떤 영향을 주는지 보여줍니다.

mysql> SELECT 5+3/2-2;
+---------+
| 5+3/2-2 |
+---------+
| 4.5000  |
+---------+
1 row in set (0.00 sec)

위 계산에서 MySQL은 +(덧셈)나 -(뺄셈)보다 우선순위가 높은 /(나눗셈)을 먼저 평가합니다. 즉, 3/2 = 1.5000이 먼저 계산된 후, 5 + 1.5000 - 2 순서로 처리되어 최종 결과는 4.5000이 됩니다. 만약 덧셈과 뺄셈이 먼저 평가되었다면 (5+3)/2-2 = 2라는 전혀 다른 결과가 나왔을 것입니다.

주의 사항 및 활용 팁

이처럼 복잡한 산술식이나 WHERE 절의 조건식을 작성할 때는 연산자 우선순위를 항상 염두에 두어야 의도하지 않은 결과를 피할 수 있습니다. 특히 AND와 OR가 함께 사용되는 조건문에서는 우선순위 때문에 논리가 달라질 수 있으므로, 평가 순서를 명확히 하고 싶다면 괄호( )를 사용해 우선순위를 직접 지정하는 것이 가장 안전한 방법입니다.