WHERE을 이용해 자료를 제한할 수 있다.
WHERE절은 두 개 이상의 테이블에 대한 조인 조건을 기술하거나 결과를 제한하기 위한 조건을 기술할 수도 있다.
WHERE절에 조건이 없는 FTS(Full Table Scan) 문장은 SQL 튜닝의 1차적인 검토 대상이 된다.(FTS는 무조건 나쁜 것은 아니며 병렬 처리 등을 이용해 유용하게 사용하는 경우도 많다.)
WHERE절 사용법.
SELECT [DISTINCT/ALL]
칼럼명 [ALIAS명]
FORM 테이블명
WHERE 조건식;
WHERE절은 FROM절 다음에 위차하며, 조건식 아래 내용으로 구성된다.
- 칼럼명(보통 조건식의 좌측에 위치)
- 비교 연산자
- 문자, 숫자, 표현식(보통 조건식의 우측에 위치)
- 비교 칼럼명(JOIN 사용 시)
- 비교 연산자(부정 비교 연산자 포함)
- SQL 연산자(부정 SQL 연산자 포함)
- 논리 연산자
연산자 종류
구분 | 연산자 | 연산자의 의미 |
---|---|---|
= | 같다. | |
> | 보다 크다. | |
비교 연산자 | >= | 보다 크거나 같다. |
< | 보다 작다. | |
<= | 보다 작거나 같다. | |
BETWEEN a AND b | a와 b의 값 사이의 값을 갖는다.(a와 b 포함) | |
SQL | IN (list) | 리스트에 있는 값 중에서 어느 하나라도 일치한다. |
연산자 | LIKE '비교문자열' | 비교문자열과 형태가 일치한다(%, _ 사용) |
IS NULL | NULL 값을 갖는다. | |
AND | 앞의 조건과 뒤의 조건이 참이면 참이다. | |
논리 연산자 | OR | 앞의 조건과 뒤의 조건 중 하나가 참이면 참이다. |
NOT | 뒤에 오는 조건에 반대되는 결과를 되돌려 준다. | |
!= | 같지 않다. | |
부정 | ^= | 같지 않다. |
비교 | <> | 같지 않다(ISO 표준, 모든 운영체제에서 사용 가능) |
연산자 | NOT 칼럼명 = | ~와 같이 않다. |
NOT 칼럼명 > | ~보다 크지 않다. | |
부정 | NOT BETWEEN a AND b | a와 b의 사이에 있지 않다(a, b 포함X) |
SQL | NOT IN (list) | list 값과 일치하지 않다. |
연산자 | IS NOT NULL | NULL 값을 갖지 않다. |
연산자 우선순위
연산자 우선순위 | 설명 |
---|---|
1 | 괄호 () |
2 | 비교 연산자, SQL 연산자 |
3 | NOT 연산자 |
4 | AND |
5 | OR |
여기서부터는 EMP 테이블이 사용됩니다.
SELECT * FROM EMP WHERE SAL > 2000;
SELECT * FROM EMP WHERE SAL <= 1000;
SQL 연산자는 SQL 문장에서 사용하도록 기본적으로 예약돼 있는 연산자로서 모든 데이터 타입에 대해 연산이 가능한 4가지 종류가 있다.
SELECT * FROM EMP WHERE SAL BETWEEN 800 AND 1500;
SELECT * FROM EMP WHERE SAL IN (1000, 1500, 2000, 2500, 3000);
SELECT * FROM EMP WHERE ENAME LIKE 'SCOTT';
SELECT * FROM EMP WHERE ENAME LIKE '___D';
SELECT * FROM EMP WHERE ENAME LIKE 'S%';
SELECT * FROM EMP WHERE MGR IS NULL;
SELECT * FROM EMP WHERE SAL > 800 AND SAL <= 1250;
SELECT * FROM EMP WHERE SAL > 800 OR SAL <= 1250;
SELECT * FROM EMP WHERE SAL > 800 AND NOT SAL <= 2500;
SELECT * FROM EMP WHERE DEPTNO != 20 AND DEPTNO <> 30;
SELECT * FROM EMP WHERE NOT SAL <= 2500;
SELECT * FROM EMP WHERE DEPTNO NOT IN (10, 30);
SELECT * FROM EMP WHERE COMM IS NOT NULL;