su-tudy 님의 블로그
WHERE와 연산자 본문
𖤐 조건에 맞는 데이터 찾기
데이터를 조회하거나 수정할 때 원하는 데이터만 골라내려면 조건이 필요하다. WHERE 절과 다양한 연산자를 잘 활용하면 원하는 데이터를 정확하게 필터링할 수 있다.
𖤐 정리 노트
✧ WHERE
특정 조건을 만족하는 행만 가져올 때 사용한다. SELECT뿐만 아니라 UPDATE, DELETE에서도 쓴다.
SELECT column1, column2
FROM table_name
WHERE condition;
✧ 비교 연산자
= |
같다 |
> |
보다 크다 |
< |
보다 작다 |
>= |
크거나 같다 |
<= |
작거나 같다 |
<> / != / ^= |
같지 않다 |
SELECT * FROM users WHERE age >= 20;
SELECT * FROM users WHERE name != '홍길동';
✧ SQL 연산자
▸ BETWEEN
범위 안에 있는 값을 필터링할 때 사용한다.
-- age가 20 이상 30 이하인 행 조회
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
-- 범위 밖
SELECT * FROM users WHERE age NOT BETWEEN 20 AND 30;
▸ IN
여러 값 중 하나라도 일치하는 행을 조회한다. OR을 여러 번 쓰는 것과 같다.
-- city가 '서울' 또는 '부산' 또는 '대구'인 행 조회
SELECT * FROM users WHERE city IN ('서울', '부산', '대구');
-- 해당 값 제외
SELECT * FROM users WHERE city NOT IN ('서울', '부산');
▸ IS NULL / IS NOT NULL
NULL 값 여부를 확인할 때 사용한다. NULL은 =로 비교할 수 없고 반드시 IS NULL을 써야 한다.
-- 전화번호가 없는(NULL) 행 조회
SELECT * FROM users WHERE phone IS NULL;
-- 전화번호가 있는 행 조회
SELECT * FROM users WHERE phone IS NOT NULL;
▸ LIKE + 와일드카드
문자열 패턴으로 필터링할 때 사용한다.
| % | 0개 이상의 문자 |
| _ | 정확히 1개의 문자 |
-- '김'으로 시작하는 이름
SELECT * FROM users WHERE name LIKE '김%';
-- '동'으로 끝나는 이름
SELECT * FROM users WHERE name LIKE '%동';
-- 이름이 정확히 3글자
SELECT * FROM users WHERE name LIKE '___';
-- 이름에 '길'이 포함된 행
SELECT * FROM users WHERE name LIKE '%길%';
% 나 _ 자체를 문자로 검색하고 싶을 때는 ESCAPE를 사용한다.
-- '_'를 와일드카드가 아닌 일반 문자로 검색
SELECT * FROM table_name
WHERE column LIKE '%#_%' ESCAPE '#';
✧ 논리 연산자
-- AND: 두 조건 모두 만족
SELECT * FROM users WHERE age >= 20 AND city = '서울';
-- OR: 하나라도 만족
SELECT * FROM users WHERE city = '서울' OR city = '부산';
-- NOT: 조건 반전
SELECT * FROM users WHERE NOT city = '서울';
여러 연산자를 조합할 수도 있다.
SELECT * FROM users
WHERE (city = '서울' OR city = '부산') AND age >= 20;
✧ 연산자 우선순위
우선순위가 높을수록 먼저 실행된다.
1. 산술 연산자 *, / → +, -
2. 연결 연산자 ||
3. 비교 연산자 =, >, <, >=, <=, <>, !=
4. SQL 연산자 LIKE → IN → IS NULL → BETWEEN
5. 논리 연산자 AND → OR
💡 AND가 OR보다 우선순위가 높다. 헷갈리면 괄호로 묶어서 명확하게 표현하는 게 낫다.
𖤐 체크포인트
🚨 주의 — NULL 비교는 = 쓰면 안 됨
WHERE phone = NULL → 이렇게 하면 안 됨 (결과가 항상 false)WHERE phone IS NULL → 이렇게 써야 함
𖤐 오늘의 한 줄 요약
WHERE는 원하는 데이터만 골라내는 조건절. 비교/SQL/논리 연산자를 조합해서 쓰고, NULL 비교는 반드시 IS NULL, 우선순위 헷갈리면 괄호로 해결하자.
'DBMS > Part 2. DML' 카테고리의 다른 글
| JOIN (INNER, LEFT, RIGHT, OUTER) (0) | 2024.10.11 |
|---|---|
| GROUP BY와 HAVING (0) | 2024.09.24 |
| COUNT, SUM, AVG, MAX, MIN (0) | 2024.09.23 |
| ORDER BY와 LIMIT (0) | 2024.09.22 |
| SELECT, INSERT, UPDATE, DELETE (0) | 2024.09.17 |