1. WHERE절 개요
1️⃣ WHERE절 기초 개념
1) WHERE절
- SQL 쿼리에서 특정 조건을 만족하는 행만 선택하기 위해 사용됨
- 데이터베이스에서 원하는 데이터를 필터링하는 데 필수
2) 기본 문법
SELECT 칼럼명 [ALIAS 명]
FROM 테이블명
WHERE 조건절;3) 예시
SELECT *
FROM EMP
WHERE SAL > 2000 AND DEPTNO = 10;EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL | 10 |
7782 | CLARK | MANAGER | 7839 | 1981-05-09 | 2450 | NULL | 10 |
2️⃣ WHERE절 연산자의 종류
1) 비교 연산자
연산자 | 내용 |
=, <>, >, <, >=, <= | 부등호 기호 연산 |
2) 부정 비교 연산자
연산자 | 내용 |
!= | 같지 않다 (=의 부정) |
^= | 같지 않다 (=의 부정) |
<> | 같지 않다 (=의 부정) → 표준 SQL |
NOT [칼럼명] = | 칼럼명과 같지 않다 |
NOT [칼럼명] > | 칼럼명보다 크지 않다 |
3) SQL 연산자
연산자 | 내용 |
BETWEEN a AND b | a와 b 사이의 값 |
IN (list) | list에 있는 값들 중 어느 하나라도 일치 |
LIKE ‘비교문자열’ | ‘비교문자열’과 일치하면 참(TRUE) → ( %, _ 사용) |
IS NULL | NULL 값 |
4) 부정 SQL 연산자
연산자 | 내용 |
NOT BETWEEN a AND b | a와 b의 값 사이의 값을 가지지 않음 |
NOT IN (list) | list에 있는 값들 중 어느 하나라도 일치하지 않음 |
IS NOT NULL | NULL 값을 갖지 않음 |
5) 논리 연산자
연산자 | 내용 |
AND | 두 개 이상의 조건이 모두 참(TRUE)일 때만 전체 조건을 참으로 반환
모든 조건을 동시에 만족해야 함 |
OR | 두 개 이상의 조건 중 하나라도 참(TRUE)일 경우 전체 조건을 참으로 반환
하나의 조건만 만족해도 됨 |
NOT | 조건의 참/거짓을 반전
조건이 참(TRUE)이면 거짓(FALSE) 반환, 조건이 거짓(FALSE)이면 참(TRUE) 반환 |
3️⃣ WHERE절 연산자의 우선순위
- 괄호 → 산술 연산자 → 문자열 연결 연산자(
||,+) → 비교 연산자&SQL 연산자 → NOT 연산자 → AND → OR
2. 비교 연산자
1️⃣ 숫자 데이터 타입 비교 연산
1) 같다 (=)
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL = 3000;ENAME | JOB | SAL |
FORD | ANALYST | 3000 |
SCOTT | ANALYST | 3000 |
2) 같지 않다 (<>, !=)
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL <> 3000; ENAME | JOB | SAL |
KING | PRESIDENT | 5000 |
BLAKE | MANAGER | 2850 |
CLARD | MANAGER | 2450 |
3) 크거나 같다 (>=), 작거나 같다 (<=)
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL >= 2000; ENAME | JOB | SAL |
KING | PRESIDENT | 5000 |
BLAKE | MANAGER | 2850 |
CLARD | MANAGER | 2450 |
4) 복합 조건과 괄호 사용
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE (SAL > 2000 AND DEPTNO = 10) OR (SAL BETWEEN 1500 AND 3000);ENAME | JOB | SAL | DEPTNO |
KING | PRESIDENT | 5000 | 10 |
BLAKE | MANAGER | 2850 | 30 |
CLARD | MANAGER | 2450 | 10 |
JONES | MANAGER | 2975 | 20 |
2️⃣ 문자 데이터 타입 비교 연산
1) 같다 (=)
SELECT ENAME, JOB, SAL
FROM EMP
WHERE EMANE = 'SMITH';ENAME | JOB | SAL |
SMITH | CLERK | 800 |
2) 같지 않다 (!=, <>)
SELECT ENAME, JOB, SAL
FROM EMP
WHERE EMANE != 'SMITH';ENAME | JOB | SAL |
KING | PRESIDENT | 5000 |
BLAKE | MANAGER | 2850 |
CLARK | MANAGER | 2450 |
3) 크다 (>), 작다 (<)
- 크다 (
>) : 특정 문자열보다 사전 순으로 큰 값(사전 순으로 뒤에 나오는 값)을 가진 행 선택
- 작다 (
<) : 특정 문자열보다 사전 순으로 작은 값(사전 순으로 앞에 나오는 값)을 가진 행 선택
SELECT ENAME, JOB, SAL
FROM EMP
WHERE EMANE > 'M';ENAME | JOB | SAL |
MARTIN | SALESMAN | 1250 |
TURNER | SALESMAN | 1500 |
WARD | SALESMAN | 1250 |
ENAME > ‘M’은 정확히 M만 제외됨MARTIN은 사전 순서상 M 뒤에 나옴
4) 크거나 같다 (>=), 작거나 같다 (<=)
SELECT ENAME, JOB, SAL
FROM EMP
WHERE EMANE >= 'M';ENAME | JOB | SAL |
MARTIN | SALESMAN | 1250 |
TURNER | SALESMAN | 1500 |
WARD | SALESMAN | 1250 |
3. SQL연산자의 종류
1️⃣ SQL 연산자
1) BETWEEN 연산자
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL BETWEEN 1500 AND 3000;ENAME | JOB | SAL |
BLAKE | MANAGER | 2850 |
CLARD | MANAGER | 2450 |
JONES | MANAGER | 2975 |
2) IN(list)
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN (10, 20, 30);ENAME | JOB | SAL | DEPTNO |
KING | PRESIDENT | 5000 | 10 |
BLAKE | MANAGER | 2850 | 30 |
CLARD | MANAGER | 2450 | 10 |
3) LIKE ‘비교문자열’
SELECT ENAME, JOB, SAL
FROM EMP
WHERE ENAME LIKE 'S%';ENAME | JOB | SAL |
SMITH | CLERK | 800 |
SCOTT | ANALYST | 3000 |
SELECT ENAME, JOB, SAL
FROM EMP
WHERE ENAME LIKE '%R%';ENAME | JOB | SAL |
CLARK | MANAGER | 2450 |
MARTIN | SALESMAN | 1250 |
TURNER | SALESMAN | 1500 |
SELECT ENAME, JOB, SAL
FROM EMP
WHERE ENAME LIKE 'J_NES';ENAME | JOB | SAL |
JONES | MANAGER | 2975 |
SELECT ENAME, JOB, SAL
FROM EMP
WHERE ENAME LIKE '_A%';ENAME | JOB | SAL |
MARTIN | SALESMAN | 1250 |
JAMES | CLERK | 950 |
WARD | SALESMAN | 1250 |
SELECT ENAME, JOB, SAL
FROM EMP
WHERE ENAME LIKE '_a%';ENAME | JOB | SAL |
ㅤ | ㅤ | ㅤ |
SELECT ENAME, JOB, SAL
FROM EMP
WHERE UPPER(ENAME) LIKE 'A%';ENAME | JOB | SAL |
ALLEN | SALESMAN | 1600 |
ADAMS | CLERK | 1100 |
4) IS NULL
SELECT ENAME, JOB, SAL, COMM
FROM EMP
WHERE COMM IS NULL;ENAME | JOB | SAL | COMM |
KING | PRESIDENT | 5000 | NULL |
BLAKE | MANAGER | 2850 | NULL |
CLARK | MANAGER | 2450 | NULL |
2️⃣ 이스케이프 문자(Escape Character) 사용
- 와일드카드 문자(
%,_,*, …)를 와일드카드 문자가 아닌 일반 문자로 인식하도록 지정하는 특별한 문자
- 문자 앞에 역슬래시(
\)를 붙여 그 안에 들어간 문자를 와일드카드가 아닌 문자로 인식시킴
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE ENAME LIKE 'A\%\_LLEN' ESCAPE '\';EMPNO | ENAME | JOB | SAL | DEPTNO |
9993 | A%_LLEN | MANAGER | 2975 | 20 |
4. 논리 연산자
1️⃣ 논리 연산자
1) AND 연산자를 사용한 복합 조건
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL >= 2000 AND JOB = 'MANAGER';ENAME | JOB | SAL |
BLAKE | MANAGER | 2850 |
CLARK | MANAGER | 2450 |
JONES | MANAGER | 2975 |
2) OR 연산자를 사용한 복합 조건
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE SAL > 2000 OR DEPTNO = 20;ENAME | JOB | SAL | DEPTNO |
KING | PRESIDEN | 5000 | 10 |
BLAKE | MANAGER | 2850 | 30 |
CLARK | MANAGER | 2450 | 10 |
2) NOT 연산자
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE NOT SAL > 1000 OR JOB = 'MANAGER';ENAME | JOB | SAL | DEPTNO |
BLAKE | MANAGER | 2850 | 30 |
CLARK | MANAGER | 2450 | 10 |
JONES | MANAGER | 2975 | 20 |
JAMES | CLERK | 950 | 30 |
SMITH | CLERK | 800 | 20 |
2️⃣ 논리 연산자 우선 순위
- NOT → AND → OR
SELECT ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE (NOT (SAL > 2000 AND DEPTNO = 10)) OR JOB = 'CLERK';ENAME | JOB | SAL | DEPTNO |
BLAKE | MANAGER | 2850 | 30 |
JONES | MANAGER | 2975 | 20 |
MARTIN | SLAESMAN | 1250 | 30 |
ALLEN | SLAESMAN | 1600 | 30 |
TURNER | SLAESMAN | 1500 | 30 |
JAMES | CLERK | 950 | 30 |
WARD | SLAESMAN | 1250 | 30 |
FORD | ANALYST | 3000 | 20 |
SMITH | CLERK | 800 | 20 |
SCOTT | ANALYST | 3000 | 20 |
ADAMS | CLERK | 1100 | 20 |
MILLER | CLERK | 1300 | 10 |
드모르간 법칙 (De Morgan’s Law)
NOT (A AND B) → (NOT A) OR (NOT B)
NOT (A OR B) → (NOT A) AND (NOT B)Share article