su-tudy 님의 블로그

WHERE와 연산자 본문

DBMS/Part 2. DML

WHERE와 연산자

su-tudy 2024. 9. 20. 18:55

 

𖤐 조건에 맞는 데이터 찾기

 

데이터를 조회하거나 수정할 때 원하는 데이터만 골라내려면 조건이 필요하다. 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