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

MySQL SELECT 쿼리에서 AND와 OR 연산자의 우선순위 완벽 정리

MySQL에서 AND와 OR의 우선순위

MySQL SELECT 쿼리에서는 OR 연산자보다 AND 연산자가 더 높은 우선순위를 가집니다. 즉, 조건식에 AND와 OR가 함께 사용되면 MySQL은 항상 AND 조건부터 먼저 평가합니다.

간단한 예제를 통해 MySQL이 AND 연산자에 어떻게 높은 우선순위를 부여하는지 확인해 보겠습니다.

예제 쿼리

mysql> select 0 AND 0 OR 1 as Result;

실행 결과는 다음과 같습니다.

+--------+
| Result |
+--------+
| 1 |
+--------+
1 row in set (0.00 sec)

만약 OR의 우선순위가 더 높다면?

반대로 OR 연산자가 더 높은 우선순위를 가진다고 가정해 보면, 위 쿼리는 다음과 같이 해석될 것입니다.

select 0 AND (0 OR 1) as Result;

이 경우 계산 순서는 다음과 같습니다.

  • 먼저 괄호 안의 0 OR 1을 계산하면 결과는 1
  • 그다음 0 AND 1을 계산하면 결과는 0

하지만 실제 출력 결과는 1이므로, 이 가정은 성립하지 않습니다. 따라서 위 쿼리에서는 AND가 OR보다 먼저 평가되어 최종적으로 1이라는 결과가 나온 것입니다.

실제 평가 순서

MySQL의 실제 동작 방식대로 계산 과정을 살펴보면 다음과 같습니다.

select 0 AND 0 OR 1 as Result;
  1. 먼저 AND 연산자를 계산합니다. 0 AND 0의 결과는 0입니다.
  2. 그다음 OR 연산자를 계산합니다. 0 OR 1의 결과는 1입니다.

이렇게 하면 실제 출력 결과인 1과 정확히 일치함을 확인할 수 있습니다.

실무 팁: 괄호로 의도를 명확하게

연산자 우선순위에 의존한 조건식은 코드를 읽기 어렵고 실수를 유발하기 쉽습니다. WHERE 절에서 여러 조건을 조합할 때는 괄호 ()를 사용해 평가 순서를 명시적으로 지정하는 것이 좋습니다.

-- 모호한 표현
SELECT * FROM users WHERE a = 1 AND b = 2 OR c = 3;

-- 명확한 표현
SELECT * FROM users WHERE (a = 1 AND b = 2) OR c = 3;

괄호를 활용하면 쿼리의 의도가 명확해지고, 우선순위 규칙을 잘못 이해해 발생하는 논리 오류를 예방할 수 있습니다.