Operator
연산자
- SQL의 WHERE
절에 사용될 수 있는 연산자들에 대해 알아본다.
- 비교 연산자, SQL 연산자, 논리 연산자로 구분할 수 있다.
Category | Operator | Description |
Comparison Operator |
= | |
> | ||
>= | ||
< | ||
<= | ||
!= | - 같지 않다. | |
^= | - 같지 않다. | |
<> | - 같지 않다. - ISO 표준 (모든 OS에서 사용가능하다.) |
|
NOT <col_nm> = | ||
NOT <col_nm> > | ||
SQL Operator |
BETWEEN <a> AND <b> | |
IN (<list>) | ||
LIKE <str> | ||
IS NULL | ||
NOT BETWEEN <a> AND <b> | ||
NOT IN (<list>) | ||
IS NOT NULL | ||
Logical Operator |
AND | |
OR | ||
NOT |
Operator Priority (연산자 우선순위)
- ()
- 비교 연산자 및 SQL 연산자
- NOT 연산자
- AND 연산자
- OR 연산자
- 만일, 이 연산에 있어서 연산자들의 우선순위를 염두에 두지 않고 WHERE Clause를 작성한다면,
테이블에서 원하는 데이터를 찾지 못하거나, 틀린 데이터를 모른채 사용하게 될 수도 있다.
- 실수하기 쉬운 비교 연산자와 논리 연산자의 경우, 괄호(( ))를 사용해 우선순위를 명시적으로 표시하는 것이 권고된다.
Negative Operators (부정 연산자)
- 부정 연산자를 통한 비교에서는 논리적으로 인덱스가 활용되지 않는다.
- 그러므로, 부정형의 비교를 동치의 긍정형의 비교로 변환하여 인덱스의 활용을 유도하여 성능을 제고할 수 있다.
<>
Operator
- Singular Operator(단일값에 대한 연산자)이다.
- List 값과 같은 Set을 <> 연산자의 피연산자로 두면 Syntax Error가 발생하거나,
오직 List의 첫 번째 값과 비교하게 되므로 Logical Error를 야기할 가능성이 높다.
- <> 연산자를 NULL 값을 포함한 List와 비교할 경우,
내부적으로 col_nm <> NULL 로 최적화되는데,
NULL 값과의 비교는 UNKNOWN(정의되지 않음)하므로 항상 Fail을 야기하게 된다.
NOT IN
Operator
- Set Operator(하나 이상의 값들에 대한 연산자)이다.
-NOT IN
은 NULL-Tolerant 하지 않다.
- 즉, NULL 값이 포함된 Set을 반환하는 서브쿼리를 칼럼과 NOT IN
으로 비교할 경우, 어떠한 Record도 반환되지 않는다.
Reference: The Guide for SQL Professional
(Kdata 한국데이터산업진흥원 저, Kdata 한국데이터산업진흥원, 2020)
Reference: Stack Overflow, "<>" vs "NOT IN", URL, 2023년 1월 26일 검색.