728x90
반응형
SQL을 학습할 때 우선순위를 알고 있어야 SQL의 실행 흐름을 정확하게 파악할 수 있습니다.
1. NOT > 2. AND > 3. OR
다음 sql 문장 중 실행 결과가 다른 하나는?
1. SELECT COUNT(*) FROM EMP WHERE DEPTNO = 10 OR DEPTNO = 20 AND JOB = 'CLERK';
2. SELECT COUNT(*) FROM EMP WHERE (DEPTNO = 10 OR DEPTNO = 20) AND JOB = 'CLERK';
3. SELECT COUNT(*) FROM EMP WHERE DEPTNO = 10 OR (DEPTNO = 20 AND JOB = 'CLERK');
4. SELECT COUNT(*) FROM EMP WHERE (DEPTNO = 10 OR DEPTNO = 20 AND JOB = 'CLERK');
출처 : 홍쌤의 데이터랩 (https://hdatalab.co.kr/)
✅ 예제문제로 OR과 AND의 우선순위 기억하기
- AND 연산자가 OR보다 먼저 실행됨 ( 우선순위 나오~( N, A, O )라고 기억하기 )
- DEPTNO = 20 AND JOB = 'CLERK'
- 위 조건이 먼저 실행된 후, OR 조건이 평가됨
- 괄호 ( )를 사용하면 우선순위를 변경할 수 있음
- (DEPTNO = 10 OR DEPTNO = 20) AND JOB = 'CLERK'
- 먼저 OR 조건을 평가한 후, AND 조건을 적용
✅ 각 SQL 문의 실행 순서 분석
1️⃣ SELECT COUNT(*) FROM EMP WHERE DEPTNO = 10 OR DEPTNO = 20 AND JOB = 'CLERK';
- 우선순위 적용
AND가 OR보다 먼저 실행되므로, 아래와 같이 해석됨SELECT COUNT(*) FROM EMP WHERE DEPTNO = 10 OR (DEPTNO = 20 AND JOB = 'CLERK');
- 즉, 결과는
- DEPTNO = 10 인 모든 직원
- 또는 DEPTNO = 20 AND JOB = 'CLERK'인 직원만 포함됨
2️⃣ SELECT COUNT(*) FROM EMP WHERE (DEPTNO = 10 OR DEPTNO = 20) AND JOB = 'CLERK';
- 우선순위 적용
괄호 ( )가 있으므로 OR 먼저 실행됨SELECT COUNT(*) FROM EMP WHERE JOB = 'CLERK' AND (DEPTNO = 10 OR DEPTNO = 20);
- 즉, 결과는
- DEPTNO가 10 또는 20인 직원 중에서
- JOB = 'CLERK'인 직원만 포함됨
3️⃣ SELECT COUNT(*) FROM EMP WHERE DEPTNO = 10 OR (DEPTNO = 20 AND JOB = 'CLERK');
- 우선순위 적용
괄호 ( )가 있으므로 AND 먼저 실행됨SELECT COUNT(*) FROM EMP WHERE DEPTNO = 10 OR (DEPTNO = 20 AND JOB = 'CLERK');
- 1번과 동일한 의미의 SQL 문
- DEPTNO = 10인 모든 직원
- 또는 DEPTNO = 20 AND JOB = 'CLERK'인 직원 포함
4️⃣ SELECT COUNT(*) FROM EMP WHERE (DEPTNO = 10 OR DEPTNO = 20 AND JOB = 'CLERK');
- 우선순위 적용
괄호가 있긴 하지만 AND가 여전히 OR보다 우선 적용됨SELECT COUNT(*) FROM EMP WHERE (DEPTNO = 10 OR (DEPTNO = 20 AND JOB = 'CLERK'));
- 1번과 동일한 의미의 SQL 문
- DEPTNO = 10인 모든 직원
- 또는 DEPTNO = 20 AND JOB = 'CLERK'인 직원 포함
✅ 정답은?
정답은 2번!
- 2번만 JOB = 'CLERK' 조건을 DEPTNO = 10 OR DEPTNO = 20에 적용함
- 나머지는 DEPTNO = 10인 경우에는 JOB 조건을 확인하지 않음
💡 NOT, AND, OR 우선순위 정리
SQL을 사용하다 보면 여러 개의 조건을 결합해서 데이터를 조회하는 경우가 많습니다. AND와 OR을 함께 사용할 때, 연산자의 우선순위를 제대로 알고있지 않다면 예상과 다른 결과가 나올 수 있습니다.
✅ 1. SQL에서 AND와 OR의 우선순위
- NOT이 제일 먼저 그 다음이 AND, 마지막이 OR( 1. NOT 2. AND 3. OR )
- NOT 연산이 항상 AND, OR보다 우선 적용됨
- AND 연산이 항상 OR보다 우선 적용됨
- 괄호 ( )를 사용하면 우선순위를 변경할 수 있음
✅ 3. 괄호로 우선순위 조절하기
SQL에서 AND가 OR보다 우선 실행되므로, 원하는 결과를 얻기 위해 괄호 ( )를 사용해야 함
-- "부서가 10이거나 20인 사람 중에서 CLERK만 찾기"
SELECT * FROM EMP
WHERE (DEPTNO = 10 OR DEPTNO = 20) AND JOB = 'CLERK';
만약 괄호가 없으면?
-- "부서가 10인 사람 + (부서가 20이고 CLERK인 사람)"
SELECT * FROM EMP
WHERE DEPTNO = 10 OR DEPTNO = 20 AND JOB = 'CLERK';
마무리
✅ SQL에서 AND는 OR보다 우선순위가 높음
✅ 원하는 실행 순서를 만들려면 괄호 ( )를 사용해야 함
✅ 복잡한 WHERE 조건을 사용할 때 우선순위를 명확히 이해하면 오류를 방지할 수 있음
728x90
반응형
'Web Frontend > Database' 카테고리의 다른 글
[SQL] 오름차순(ASC)과 내림차순(DESC) 정렬 순서 (0) | 2025.03.05 |
---|---|
[SQL] + 연산자와 집계 함수( SUM, AVG, COUNT, MIN, MAX etc ) 차이점 (0) | 2025.03.05 |
[SQL] WHERE절은 조건 필터링 절 (0) | 2025.03.05 |
[SQL] NULL 데이터 처리(ISNULL, NULLIF, NVL, COALESCE) (0) | 2025.03.05 |
GraphQL 맛보기 (2) | 2024.10.02 |