SQL 연산자 우선순위 정리

TJK·2025년 8월 22일
0

SQL 연산자 우선순위 정리

SQL 쿼리는 여러 연산자들로 구성될 때, 정해진 우선순위에 따라 실행됩니다. SQLD 시험에서는 이 우선순위를 정확히 이해하여 복잡한 WHERE 절의 결과를 예측하는 문제가 자주 출제됩니다.


1. 전체 연산자 우선순위

시험 핵심 (★★★★★): 연산자 그룹별 우선순위

  1. 괄호 ( )
  2. 산술 연산자: *, / > +, -
  3. 비교 연산자: =, >, <
  4. IS NULL, IS NOT NULL, LIKE, IN, BETWEEN
  5. 부정 연산자: NOT
  6. 논리 연산자: AND
  7. 논리 연산자: OR
  8. 집합 연산자: UNION, UNION ALL, INTERSECT, MINUS

2. 세부 연산자 그룹별 핵심 정리

1) 산술 연산자

  • 순서: ( )*, /+, -
  • 예시: 10 + 20 * 320 * 3이 먼저 계산되어 70이 됩니다. (10 + 20) * 330 * 3이 되어 90이 됩니다.

2) 비교 연산자

  • IN vs =: IN은 다중 비교, =는 단일 비교입니다. WHERE sal = (SELECT ...)에서 서브쿼리 결과가 여러 개이면 오류가 발생합니다.
  • NULL 비교 (★★★★★): NULL은 '값이 없다'는 특수한 상태이므로, **IS NULL 또는 IS NOT NULL**로만 비교해야 합니다. WHERE column = NULL은 항상 UNKNOWN을 반환하여 원하는 결과를 얻을 수 없습니다.

3) 논리 연산자

  • 순서: NOT > AND > OR
  • 예시: A AND B OR C(A AND B) OR C와 동일한 순서로 실행됩니다. ANDOR보다 우선순위가 높기 때문입니다.

4) 집합 연산자

  • 순서: UNION, UNION ALL, INTERSECT, MINUS는 동일한 우선순위를 가집니다.
  • 실행: 쿼리가 작성된 순서대로 위에서 아래로 실행됩니다.
  • UNION vs UNION ALL: UNION은 중복을 제거하지만, UNION ALL은 중복을 그대로 유지합니다.

3. SQLD 시험 핵심 포인트

  • 복잡한 WHERE 절: WHERE 절에 여러 연산자가 있을 때, 연산자 우선순위를 명확히 파악하는 것이 중요합니다.
  • 괄호 사용: 연산자 우선순위를 무시하고 원하는 순서로 실행시키려면 **괄호 ( )**를 사용해야 합니다.
  • NOT INNULL 함정 (★★★★★): WHERE column NOT IN (1, 2, NULL)과 같이 NOT IN 서브쿼리나 리스트에 NULL이 포함되어 있으면, 전체 조건이 UNKNOWN이 되어 아무런 행도 반환되지 않습니다.

4. 암기 팁

  • 순서 (산술비교논리집합)
  • 논리: NOT AND OR 순으로 실행.
  • 비교: IN, LIKE, **IS NULL**은 일반 비교보다 후순위.

실전 기출 문제 스타일

1. 다음 쿼리의 실행 순서와 결과에 대한 설명으로 옳은 것은?

SELECT *
FROM Employees
WHERE salary > 3000 AND dept_id = 10 OR job_id = 'IT_PROG';

A. (salary > 3000) AND (dept_id = 10 OR job_id = 'IT_PROG')
B. (salary > 3000 AND dept_id = 10) OR (job_id = 'IT_PROG')
C. (salary > 3000 OR job_id = 'IT_PROG') AND (dept_id = 10)

2. 다음 중 NULL이 포함된 Employees 테이블에서 phone 번호가 없는 직원을 찾기 위한 쿼리로 올바른 것은?
A. SELECT * FROM Employees WHERE phone = NULL;
B. SELECT * FROM Employees WHERE phone IS NULL;
C. SELECT * FROM Employees WHERE phone <> NULL;
D. SELECT * FROM Employees WHERE phone IS NOT NULL;

3. 다음 쿼리 실행 결과로 반환되는 행의 개수는?
(단, dept_id는 10, 20, 30이고 30번 부서에는 NULL인 직원이 1명 있다.)

SELECT * FROM Employees WHERE dept_id NOT IN (10, NULL);

A. 0개
B. 1개
C. 2개
D. 3개


정답 및 해설

  • 문제 1 정답: B
    • 해설: 논리 연산자에서는 ANDOR보다 우선순위가 높으므로 AND 조건이 먼저 실행됩니다.
  • 문제 2 정답: B
    • 해설: NULL 값과의 비교는 IS NULL 또는 IS NOT NULL 연산자만 사용해야 합니다. =<>와 같은 일반 비교 연산자는 NULL에 대해 UNKNOWN을 반환합니다.
  • 문제 3 정답: A
    • 해설: NOT IN 리스트에 NULL이 포함되어 있으므로, 전체 조건이 UNKNOWN이 되어 어떤 행도 반환되지 않습니다.
profile
Hello world!

0개의 댓글