[SQL] WHERE절
자료를 검색할 때 SELECT절과 FROM절만 사용해 기본적인 SQL문장을 구성한다면, 테이블에 있는 모든 자료가 결과로 출력되 실제로 원하는 자료를 확인하기 어려울 수 있다. 따라서 사용자들은 자신이 원하는 자료만을 검색하기 위해 SQL 문장에 WHERE절을 이용해 자료를 제한할 수 있다.
현실의 DB는 많은 사용자나 프로그램들이 동시에 접속해 다량의 트랜잭션을 발생하고 있다. WHERE조건절을 사용하지 않고 필요 없는 많은 자료를 DB로부터 요청하는 SQL문장은 대량의 데이터를 검색하기 위해 DB가 설치된 서버의 CPU나 메모리 등의 시스템 자원을 과다하게 사용한다. 또한 많은 사용자들의 쿼리에 대해 바로 처리해 주지 못하게 되고, 또한 검색된 많은 자료가 네트워크를 통해 전달됨으로써 문제점들을 발생시킨다. 이러한 문제점을 방지하기 위해 WHERE절에 조건이 없는 FTS문장은 SQL튜닝의 1차적인 검토 대상이 된다.
그럼 WHERE절을 어떻게 사용하는지 함께 알아보자.
WHERE절 문법
기본적인 SQL문장은 Oracle의 경우 필수적으로 SELECT절과 FROM절로 이루어져 있다. WHERE절은 조회하려는 데이터에 특정 조건을 부여할 목적으로 사용하기 때문에 FROM절 뒤에 오게 된다.
사용법
1
2
3
SELECT [DISTINCT/ALL] 컬럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식;
WHERE절의 조건식은 다음과 같은 내용으로 구성된다.
- 컬럼명(보통 조건식의 좌측에 위치)
- 비교 연산자
- 문자, 숫자, 표현식(보통 조건식의 우측에 위치)
- 비교 컬럼명(JOIN 사용 시)
예제
예제에 사용되는 릴레이션은 아래와 같다.
- 예제 쿼리 및 결과
1
2
3
SELECT DNAME AS 부서명
FROM DEPT
WHERE LOC = 'DALLAS';
연산자의 종류
WHERE절에 조건식을 사용할 때, 사용되는 다양한 연산자들이 있다. 연산자는 크게 4가지로 구분되며, 내용은 다음과 같다.
- 비교 연산자
- SQL 연산자
- 논리 연산자
- 부정 비교 연산자
비교 연산자
비교 연산자들은 적절히 사용한다면 다양한 조건을 구성할 수 있다. 비교 연산자의 종류는 다음과 같다.
- = (같다)
- > (보다 크다)
- >= (보다 크거나 같다)
- < (보다 작다)
- <= (보다 작거나 같다)
비교 연산자는 쉬우므로 예제를 통한 학습은 생략하겠다.
SQL 연산자
SQL 연산자는 SQL문장에서 사용하도록 기본적으로 예약되어 있는 연산자로서, 모든 데이터 타입에 대한 연산이 가능한 4가지 종류가 있다.
- BETWEEN A AND B
A와 B의 값 사이의 값을 갖는다.(A와 B 값이 포함됨)
- IN (list)
리스트에 있는 값 중에서 어느 하나라도 일치한다.
- LIKE ‘비교문자열’
비교문자열과 형태가 일치한다.(%, _ 사용)
- IS NULL
NULL 값인 경우를 의미한다.
사용법
- BETWEEN A AND B
1
2
3
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE 컬럼명 BETWEEN A AND B;
- IN (list)
1
2
3
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE 컬럼명 IN (list);
- LIKE ‘비교문자열’
1
2
3
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE 컬럼명 LIKE '비교문자열';
- IS NULL
1
2
3
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE 컬럼명 IS NULL;
예제
예제에 사용되는 릴레이션은 아래와 같다.
- BETWEEN A AND B
- 예제 쿼리
1 2 3
SELECT * FROM DEPT WHERE DEPTNO BETWEEN 10 AND 20;
- 결과
- IN (list)
- 예제 쿼리
1 2 3
SELECT * FROM DEPT WHERE DEPTNO IN ('30', '40');
- 결과
- LIKE ‘비교문자열’
- 예제 쿼리
1 2 3
SELECT * FROM DEPT WHERE LOC LIKE 'NE%';
- 결과
- IS NULL
- 예제 쿼리
1 2 3
SELECT * FROM DEPT WHERE LOC IS NULL;
- 결과
논리 연산자
논리 연산자는 비교 연산자나 SQL 연산자들로 이루어진 여러 개의 조건들을 논리적으로 연결시키기 위해서 사용되는 연산자라고 말할 수 있다. 논리 연산자의 종류는 다음과 같다.
- AND
앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. 즉 앞의 조건과 뒤의 조건을 동시에 만족해야 하는 것이다.
- OR
앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. 즉 앞뒤의 조건 중 하나만 참(TRUE)이면 된다.
- NOT
뒤에 오는 조건에 반대되는 결과를 되돌려 준다.
사용법
- AND
1
2
3
4
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE 컬럼명 조건
AND 조건;
- OR
1
2
3
4
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE 조건
OR 조건;
- NOT
1
2
3
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명
WHERE NOT 조건;
예제
예제에 사용되는 릴레이션은 아래와 같다.
- AND
- 예제 쿼리
1 2 3 4
SELECT * FROM DEPT WHERE DEPTNO BETWEEN 10 AND 20 AND LOC LIKE 'NE%';
- 결과
- OR
- 예제 쿼리
1 2 3 4
SELECT * FROM DEPT WHERE DEPTNO = 10 OR DEPTNO = 20;
- 결과
- NOT
- 예제 쿼리
1 2 3
SELECT * FROM DEPT WHERE NOT DEPTNO = '10';
- 결과
부정 연산자
비교 연산자, SQL 연산자에 대한 부정 표현을 부정 논리 연산자, 부정 SQL 연산자로 구분할 수 있다. 종류는 다음과 같다.
- 부정 논리 연산자
- !=
같지 않다.
- ^=
같지 않다.
- <>
같지 않다.
- NOT 컬럼명 =
~와 같지 않다.
- NOT 컬럼명 >
~보다 크지 않다.
- !=
- 부정 SQL 연산자
- NOT BETWEEN A AND B
A와 B의 값 사이에 있지 않다.(A, B 값을 포함하지 않음)
- NOT IN (list)
list 값과 일치하지 않는다.
- IS NOT NULL
NULL 값을 갖지 않는다.
- NOT BETWEEN A AND B
부정 연산자는 다른 연산자의 응용이므로 예제를 통한 학습은 생략하겠다.
읽어주셔서 감사합니다. 😊
Reference
SQL 전문가 가이드 - Kdata 한국데이터산업진흥원






