데이터 처리 도구/SQL

[SQL] 연산 종류와 우선 순위

yourhm 2025. 4. 18. 15:55

일반적인 SQL 연산 우선 순위

(RDBMS에 따라 약간의 차이는 있을 수 있음)

 

1. 괄호

2. 산술연산 (단항 부호 > 곱셈,나눗셈,나머지구하 > 덧셈,뺄셈)

3. 비교연산 (>=, between, In, Like, ISNULL)

4. 논리연산 (NOT > AND > OR)

 

 

1. 괄호

SELECT 2 + 3 * 4;         -- 결과: 14 (괄호가 없어서 곱셈 먼저)
SELECT (2 + 3) * 4;       -- 결과: 20 (괄호가 있는 덧셈 먼저)

 

 

2. 산술 연산

우선 순위 연산자 설명 예시
1 -, + (단항) 단일 값의 부호 -a, +a
2 *, /, % 곱셈, 나눗셈, 나머지 a * b, b / c, a % b
3 +, - (이항) 덧셈, 뺄셈 a + b, a - c

 

 

3. 비교 연산

우선 순위 연산자 설명 예시
- =, !=, <>, <, >, <=, >= 기본 부등호 price >= 10000
- BETWEEN ... AND ... 범위 포함 여부 price BETWEEN 5000 AND 10000
- IN (...) 목록 포함 여부 category IN ('Book', 'Toy')
- LIKE, NOT LIKE 문자열 패턴 비교 name LIKE 'A%'
- IS NULL, IS NOT NULL NULL 여부 판단 discount IS NULL

 

SQL에서 비교 연산자를 연달아 연속 사용하는 경우는 없다. ex. price > 100 < 200 (❌)

=> 대부분 문법 오류 or 의도와 다른 잘못된 결과

 

대부분 문법 오류이지만, 일부 DBMS에서는 허용하기도 한다. 예를 들어 MySQL에서는 아래 쿼리가 오류없이 실행된다.

SELECT 5 > 3 < 10;   -- 결과: TRUE (MySQL)

이유는 아래와 같은 과정으로 계산이 되기 때문이다.

 

[step 1]  5 > 3 → TRUE : MySQL 에서는 TRUE 를 1로 취급

[step 2]  1 < 10 → TRUE

 

그러므로 만약 여러 조건을 의도적으로 비교하려면? AND, OR, BETWEEN 등 사용하여 명확히 표현하는 것이 좋다.

 

4. 논리 연산

우선 순위 연산자 설명 예시
1 NOT 조건의 반대값: 부정 (1 → 0, 0 → 1) NOT is_active
2 AND 둘 다 참일 때만 참 age > 20 AND gender = 'F'
3 OR 둘 중 하나만 참이어도 참 price < 100 OR calorie < 50

 

 

[예시] NOT 우선 순위

-- 상태가 'sold'가 아니고, 가격이 5000 이상인 상품

-- NOT가 먼저 실행됨
SELECT * FROM products
WHERE NOT status = 'sold' AND price >= 5000;

-- 해석: (NOT (status = 'sold')) AND (price >= 5000)

 

 

[예시] AND vs. OR 우선 순위

-- 조건: 1) 가격이 10000원 이상이고 2) 할인 상품이거나 3) 배송비가 무료인 경우

-- AS-IS
-- 괄호 없으면: AND 먼저 실행됨
SELECT * FROM products
WHERE price >= 10000 AND is_discounted = 1 OR shipping_fee = 0;

-- 해석: (price >= 10000 AND is_discounted = 1) OR (shipping_fee = 0)

-- TO-BE
-- 명확하게 괄호 사용
SELECT * FROM products
WHERE price >= 10000 AND (is_discounted = 1 OR shipping_fee = 0);

 

 

 

요약

더보기

✔️ 일반 연산 우선 순위: 산술 → 비교 → 논리

✔️ 복잡한 경우, 괄호 ( ) 를 사용하여 항상 명확하게 순서를 통제하는 게 안전하고 가독성도 좋음.