2025-08-18 00:21
Tags: SQL
WHERE
- 테이블의 데이터 중 원하는 조건에 맞는 데이터만 조회하고 싶을 경우 사용(엑셀의 필터기능과 유사)
- 여러 조건 동시 전달 가능(AND와 OR로 조건 연결
- NULL 조회 시 IS NULL / IS NOT NULL 연산자 사용 (= 연산자로 조회 불가)
- 연산자를 사용하여 다양한 표현이 가능
- 조건 전달 시 비교 대상의 데이터 타입 일치하는것이 좋음
ex) EMP 테이블의 부서번호 컬럼의 데이터타입은 숫자지만 문자상수로 비교 시, 성능 문제 발생할 수 있음 - 집계 그룹 함수 사용 불가
SELECT [DISTINCT/ALL] 칼럼명 [별칭명]
FROM 테이블명
WHERE 조건식
연산자 종류
연산자 종류 | 설명 |
---|---|
= | 같은 조건을 검색 |
!= , <> | 같지 않은 조건을 검색 |
> | 큰 조건을 검색 |
>= | 크거나 같은 조건을 검색 |
< | 작은 조건을 검색 |
<= | 작거나 같은 조건을 검색 |
BETWEEN a AND b | A와 B 사이에 있는 범위 값을 모두 검색, 이상이하, 순서 중요 |
IN(a, b, c) | A이나 B나 C인 조건을 검색(= OR 의 축약형) |
LIKE | 특정 패턴을 가지고 있는 값을 검색 |
IS NULL / IS NOT NULL | Null 값이거나 Null이 아닌 값을 검색 |
A AND B | 2개의 조건이 모두 참일 때만 참인 값을 검색 |
A OR B | 2개의 조건이 모두 거짓일 때만 참인 값을 검색 |
NOT A | A가 아닌 모든 조건을 검색 |
연산자 우선순위 (NAO)
- 괄호
- 부정연산자(NOT)
- 비교 연산자, SQL 연산자
- AND
- OR
WHERE 과 IN
- 특정 컬럼의 값이 지정된 목록 중에 일치하는 값 있는지 확인
SELECT * FROM EMPLOYEES
WHERE 부서 IN ('개발부', '영업부', '마케팅부');
SELECT * FROM EMPLOYEES
WHERE 부서 = '개발부'
OR 부서 = '영업부'
OR 부서 = '마케팅부';
SELECT * FROM EMPLOYEES
WHERE 부서 NOT IN ('개발부', '영업부', '마케팅부');
-- 직업이 MANAGER이면서 부서 20이거나, 직업이 CLERK이면서 30번 부서에 속하는 사원 조회
SELECT ENAME, JOB, DEPTNO
FROM EMP
WHERE (JOB, DEPTNO) IN (('MANAGER', 20), ('CLERK', 30));
-- 직업이 MANAGER이거나 CLERK이면서, 20번이나 30번 부서에 속하는 사원 조회
SELECT ENAME, JOB, DEPTNO
FROM EMP
WHERE JOB IN ('MANAGER', 'CLERK') AND DEPTNO IN (20, 30);
WHERE 과 BETWEEN A AND B
- A 보다 크거나 같고 B 보다 작거나 같은 조건을 만족 (반드시 A < B)
- A와 B에는 범위로 묶을 상수값 전달(숫자, 문자, 날짜 모두 가능)
SELECT * FROM BOOKSHELT
WHERE PRICE BETWEEN 15000 AND 20000;
SELECT * FROM BOOKSHELT
WHERE PRICE >= 15000 AND PRICE <= 20000;
SELECT * FROM BOOKSHELT
WHERE PRICE NOT BETWEEN 15000 AND 20000;
WHERE 과 LIKE 연산자
- 정확하게 일치하지 않아도 되는 패턴 조건 전달 시 사용
- LIKE는 특정 패턴과 일치하는 데이터들을 조회할 때 사용
- %와 _와 함께 사용됨
- % : 자리수 제한 없는 모든이라는 의미, 0개 이상의 문자
- _ : 하나 당 한 자리수를 의미하며 모든 값을 표현함, 1개의 문자 만 예제) LIKE 연산자
- ENAME LIKE ‘S%’ : 이름이 S로 시작하는
- ENAME LIKE ‘%S%’ : 이름에 S를 포함하는
- ENAME LIKE ‘%S’ : 이름이 S로 끝나는
- ENAME LIKE ‘_S%’ : 이름의 두 번째 글자가 S(맨 앞이 _인 것 주의! %이면 자리수 상관없이 S를 포함하기만 하면 됨)
- ENAME LIKE ‘
__S__
’ : 이름의 가운데 글자가 S이며 이름의 길이가 5글자인
WHERE TITLE LIKE 'S%'
WHERE TITLE LIKE '%S%'
WHERE TITLE LIKE '%S'
WHERE TITLE LIKE 'S__'
WHERE 과 IS NULL
- NULL값과의 수치연산은 NULL값 리턴
- NULL값과의 비교연산은 거짓을 리턴
따라서 비교연산자 ’=’, ’>’, ’<’ 사용 시 WHERE 절의 조건이 FALSE가 되어 WHERE 절의 조건을 만족하는 데이터를 한 건도 얻지 못하게 됨
어떤 값과 비교할 수도 없으며, 특정 값보다 크다, 작다라고 표현 불가
-- 포지션이 없는 선수 조회
SELECT PLAYER_NAME, TEAM_NAME
FROM PLAYER
WHERE POSITION IS NULL;