WHERE란?
- 데이터 필터(조건 걸러내기)
- SELECT, UPDATE, DELETE에서 조건을 만족하는 행(row)만 선택/처리하도록 제한하는 구문
-- 기본 문법
SELECT
컬럼명
FROM
테이블명
WHERE
조건;
※ SQL 실행 순서 : FROM → WHERE → SELECT
1. 테이블에서 데이터를 가져옴
2. WHERE에서 먼저 필터링
3. SELECT에서 컬럼 선택
BETWEEN 연산자
- BETWEEN : 범위 내의 값을 출력
- NOT BETWEEN : 범위 밖의 값을 출력(OR)
-- between
-- products의 price가 10에서 20 사이의 값을 출력
-- 예시1
SELECT
*
FROM
products
WHERE
price BETWEEN 10 AND 20;
-- 예시2
SELECT
*
FROM
products
WHERE
price >= 10 AND price <= 20;
-- not between
-- products의 price가 10에서 20 범위 밖의 값을 출력(null 값이 있는 지 확인 필요)
-- 예시1
SELECT
*
FROM
products
WHERE
price NOT BETWEEN 10 AND 20;
-- 예시2(두 조건을 모두 충족할 수 없으므로, AND는 사용하지 않음) → OR 사용
SELECT
*
FROM
products
WHERE
price < 10 OR price > 20;
IN 연산자 / NOT IN 연산자
- IN 연산자 : 괄호 안의 지정 값 중, 아무거나 출력
- NOT IN 연산자 : 괄호 안의 지정 값을 제외하고(지정 값 중 아무것도 걸리지 않는) 아무거나 출력
-- 예시1 : team_id 내의 k04, k06, k10 중 아무거나 출력
SELECT
player_name,
team_id
FROM
player
WHERE
team_id IN ('k04', 'k06', 'k10');
-- 예시2-1 : team_id 내의 k04, k06를 제외하고 아무거나 출력(4번 팀도, 6번 팀도 아닌 값)
SELECT
player_name,
team_id
FROM
player
WHERE
team_id NOT IN ('k04', 'k06');
-- 예시2-2 : 2-1과 동일한 값 출력
SELECT
player_name,
team_id
FROM
player
WHERE
team_id <> 'k04' AND team_id 'k06';
-- IN 활용 예시
-- team_id가 'k04'이면서 position이 'gk'인 것과 team_id가 'k06'이면서 position이 'mf'인 값을 출력
SELECT
player_name AS '선수 이름',
team_id,
position
FROM
player
WHERE
(team_id, position) IN (('k04', 'gk'), ('k06', 'mf'));
-- NOT IN 활용 예시
-- team_id가 'k04'가 position이 'gk'인 것을 제외한 값과 team_id가 'k06'이면서 position이 'mf'인 것을 제외한 값을 출력
SELECT
player_name AS '선수 이름',
team_id,
position
FROM
player
WHERE
(team_id, position) NOT IN (('k04', 'gk'), ('k06', 'mf'));
LIKE 연산자
- 문자열 비교 연산
- 와일드 카드 사용 가능(와일드 카드 없이 지정 값을 입력하면 '='과 같이 작동)
- ex. LIKE '홍길동'을 입력하면 '홍길동'과 일치하는 값만 출력
- '%' : 임의의 문자 N개
- '_' : 임의의 문자 1개(글자 수 제한)
- ex. LIKE '홍길동'을 입력하면 '홍길동'과 일치하는 값만 출력
* 와일드 카드 : 여러 데이터에서 부분적으로 일치하는 값이 있는지 확인할 때 사용되는 특수 문자(일부만 알고 있을 때 유용)
* 검색 패턴 : 문자나 와일드카드 또는 이 두개의 조합으로 구성된 검색 조건
* 유용한 예시 : 이메일 주소의 일부만으로 검색 가능
ex. WHERE email LIKE 'b%@naver.com'과 같이 이메일 주소의 일부만으로 이메일 주소를 검색할 수 있음
* NULL 주의 : '%' 와일드카드는 모든 것과 매칭되는 것처럼 보일지 모르지만, NULL은 예외(NULL인 행은 가져오지 않음)
-- player의 이름이 '김'인 값
SELECT
player_name
FROM
player
WHERE
player_name LIKE '김';
-- player의 이름이 '김O'인 값
SELECT
player_name
FROM
player
WHERE
player_name LIKE '김_';
-- player의 이름이 '김~'인 값
SELECT
player_name
FROM
player
WHERE
player_name LIKE '김%';
ROWNUM(TOP N개의 레코드 반환) : 사용자가 아닌 시스템이 관리하는 Pseudo(의사) Column
- 채번, 출력 개수 지정 등에 활용 가능
-- rownum : 시스템이 관리하는 번호
SELECT
player_name,
ROWNUM
FROM
player;
-- 활용 예시
-- 한 행만 반환할 때
SELECT
m.mbr_name,
ROWNUM
FROM
members m
WHERE
ROWNUM = 1; //'=' 허용
SELECT
m.mbr_name,
ROWNUM
FROM
members m
WHERE
ROWNUM <= 1;
//여러 행 반환할 때
SELECT
m.mbr_name,
ROWNUM
FROM
members m
WHERE
ROWNUM < 2;
SELECT
m.mbr_name,
ROWNUM
FROM
members m
WHERE
ROWNUM = 3;
SELECT
m.mbr_name,
ROWNUM
FROM
members m
WHERE
ROWNUM <= 3;
SELECT
m.mbr_name,
ROWNUM
FROM
members m
WHERE
ROWNUM < 4;
산술 연산자
| 연산자 | 설명 |
| + | 두 수에 대한 덧셈 |
| - | 두 수에 대한 뺄셈 |
| * | 두 수에 대한 곱셈 |
| / | 두 수에 대한 나눗셈 |
| % | 두 수를 나눈 후 그 나머지를 반환 |
비교 연산자
| 연산자 | 설명 |
| > | 큼 |
| < | 작음 |
| >= | 크거나 같음 |
| <= | 작거나 같음 |
논리 연산자
| 연산자 | 설명 |
| AND | 모든 조건이 true일 때만 true |
| OR | 조건 중 하나라도 true면 true |
| NOT | 조건의 결과(true/false)를 반전시킴 |
'SQL > 내용 정리' 카테고리의 다른 글
| 복잡한 연산을 서브쿼리(Subquery)로 해결하기 (0) | 2026.04.20 |
|---|---|
| 조건에 따라 다른 연산하기(IF, CASE) (0) | 2026.04.19 |
| SQL에서 시간 계산하기(YEAR, CURDATE, DATEDIFF, NOW 등) (0) | 2026.04.18 |
| 문자 데이터 변경(SUBSTR, CONCAT)+GROUP BY 같이 사용 (0) | 2026.04.17 |
| 집계함수, 그룹핑(GROUP BY, HAVING) (0) | 2026.04.16 |