데이터 베이스/SQL 첫걸음(인프런 강의)

Ch04. 조회와 정렬 - where

webmaster 2025. 10. 17. 21:26
728x90

Where 절과 비교 연산자

WHERE 절은 FROM  바로 뒤에 위치하며, 우리가 원하는 (Row) 걸러내는 필터 역할을 한다.

SELECT 열이름
FROM 테이블이름
WHERE 조건;

 

 

WHERE 절에는 '조건문' 들어가는데, 조건문은 보통 '비교 연산자' 사용하여 만들어진다. 가장 기본이 되는 비교 연산자들은 다음과 같다

연산자 의미 예시
= 같다 WHERE name = '이순신'
!= 또는 <> 같지 않다 WHERE name != '세종대왕'
> 크다 WHERE price > 10000
< 작다 WHERE stock_quantity < 50
>= 크거나 같다 WHERE price >= 10000
<= 작거나 같다 WHERE stock_quantity <= 50

 

실습 1) customers 테이블에서 이메일이 "yisunsin@example.com" 고객 조회하기 

select * from customers
where email = 'yisunsin@example.com';

실습 2) products 테이블에서 가격(price) 10000 이상인 상품만 조회해 보자

select * from products
where price >= 10000

여러 조건들을 조합하는 논리 연산자: AND, OR, NOT

이상의 조건을 결합하여 정교한 필터링을 하고 싶을 , 논리 연산자를 사용한다.

  • AND : 양쪽의 조건이 모두 참(True) 일 때 최종적으로 참이 된다. '그리고', '~이면서'의 의미.
  • OR : 양쪽의 조건 하나라도 (True)이면 최종적으로 참이 된다. '또는', '~이거나' 의미.
  • NOT : 주어진 조건을 부정한다. '아닌' 의미. (뒤에서 알아볼 IN, LIKE, BETWEEN, IS NULL 등과 함께 사용된다.)

실습 1) 가격이 5000원 이상이면서, 재고가 50개 이상인 상품 조회하기 (AND)

SELECT * 
FROM products 
WHERE price >= 5000 
AND stock_quantity >= 50;

 

실습 2) 가격이 20000원이거나, 재고가 100개 이상인 상품 조회하기 (OR)

select * from products
where price = 20000 
or stock_quantity >= 100;

 

실습 3) 가격이 20000원이 아닌 상품 조회하기 (!=)

select * from products
where price != 20000;

편리한 조건 검색(Between, In, Like, IsNull)

매번 이나 > 같은 기본 연산자만 사용하면 쿼리가 길어지고 비효율적일 있다. SQL 편리한 검색을 위해 여러 유용한 연산자들을 제공한다.

 

BETWEEN: 특정 범위에 있는 값 찾기

예) 가격이 5,000원에서 15,000원 사이인 상품들만 모아서 보여주세요

-- SELECT * FROM products WHERE price >= 5000 AND price <= 15000;
select * from products
where price between 5000 and 15000;

 

NOT BETWEEN: 특정 범위에 있는 값 찾기

예) "가격이 5,000원에서 15,000원 사이인 상품들은 특별 할인 행사 대상입니다. 이 상품들을 제외 한 나머지 모든 상품 목록을 보여주세요.

-- SELECT * FROM products WHERE price < 5000 OR price > 15000;
select * from products
where price not between 5000 and 15000;

 

IN: 목록에 포함된 값 찾기

예) 갤럭시, 아이폰과 에어팟만 모아서 할인 행사를 하고 싶어요. 해당 상품들 목록만 뽑아주세요

-- SELECT * FROM products WHERE name ='갤럭시' OR name ='아이폰' OR name ='에어팟';
select * from products
where name in ('갤럭시', '아이폰', '에어팟');

 

NOT IN: 목록에 포함되지 않은 값 찾기

예) 갤럭시, 아이폰, 에어팟은 행사 상품으로 지정했으니, 이 상품들을 제외한 나머지 상품들 의 재고를 점검하고 싶습니다. 목록을 뽑아주세요

-- SELECT * FROM products WHERE name != '갤럭시' AND name != '아이폰' AND name != '에어팟';

select * from products
where name not in ('갤럭시', '아이폰', '에어팟');

 

LIKE: 문자열의 일부로 검색하기 (패턴 매칭)

문자열의 일부만으로 데이터를 검색하고 싶을 때 LIKE 연산자와 '와일드카드' 함께 사용한다.

  • %(퍼센트): 0개 이상의 모든 문자를 의미한다.
    • 'sejong%' : sejong으로 시작하는 모든 문자열 (sejong@example.com , sejong123 )
    • '%@example.com' : @example.com'으로 끝나는 모든 문자열(aaa@example.com, hello@example.com )
    • '% 서울%' : 서울이라는 단어를 포함하는 모든 문자열 (수도서울 , 서울에 살자 , 수도 서울에 살자 )
  • _(언더스코어): 정확히 개의 문자 의미한다.
    • '_' : '' 시작하고 ''으로 끝나는 글자 이름 ("이순신" , "이방신" , 예를 들어 "이나라신" 정확히 개의 문자가 아니므로 탈락)

예) customers 테이블에서 이메일이 'sejong'으로 시작하는 고객 검색하기

select * from customers
where email like 'sejong%';

 

NOT LIKE: 특정 패턴을 제외하고 검색하기

예) 서울특별시에 살지 않는 고객을 대상으로 마케팅을 하고 싶어요. 대상 고객 목록을 출력해 주세요.

select * from customers
where address not like '서울특별시%';

728x90