
데이터를 필터링할 때는 WHERE 문법을 쓰자 !
WHERE 알아보기
기본적인 문법은 다음과 같다.
SELECT * FROM 테이블명 WHERE 조건식
WHERE 뒤에 조건식을 입력하면 그 조건과 일치하는 행만 필터리할 수 있다.
그래서 조건식 컬럼명 = 값 형태로 입력할 수 있는데, 이렇게 등호 말고 부등호도 가능하다.
예를 들어 리그오브레전드라는 테이블에서 마법사 챔피언을 필터링하는 단순 예제는 다음과 같다
SELECT champion_name, champion_role FROM champions WHERE champion_role = 'wizard'
부등호는 숫자에 적용해보자.
예를 들어 리그오브레전드에서 가격이 3000 골드 이상인 아이템을 필터링하려면 어떻게 작성하면 될까?
아마도 다음과 같을 것이다.
SELECT item_name, item_price FROM items WHERE item_price >= 3000
~이상 ~ 이하 표현시에는 BETWEEN n AND m
아이템 가격이 2000 골드 이상 3000 골드 이하 이런 식은 어떻게 작성할까?
쿼리를 두개 작성해서 첫번째 쿼리의 결과를 그대로 복사해서 두번째 쿼리를 작성해도 되지만 다음과 같이 작성하는 것이 좋다.
SELECT item_name, item_price FROM items WHERE item_price BETWEEN 2000 AND 3000
이 결과는 2000 원인 아이템과 3000원인 아이템을 모두 포함하는 식이다.
여러 조건문이 필요할 땐 AND / OR 로 연결하기
만약 롤에서 마법사이면서 출신이 데마시아인 챔피언을 필터링하는 방법이 있을까?
WHERE 조건문에 조건식을 AND 혹은 OR로 연결해주면 되는데, 마법사이면서 출신이 데마시아 챔피언은 ~이면서 라는 조건이 붙었으니 다음과 같이 AND 를 써서 작성하면 된다.
SELECT * FROM champions WHERE role = 'wizard' AND origin = 'demacia'
그럼 위 쿼리를 응용했을 때 OR을 쓰면 어떻게 될까?
SELECT * FROM champions WHERE role = 'wizard' OR origin = 'demacia'
결과는 마법사 이거나, 데마시아 출신인 챔피언들이 필터링 될 것이다.
이처럼 여러 조건문이 필요할땐 WHERE 절 안에서 여러 조건들을 묶어서 필터링할 수도 있다.
역이 필요할땐 NOT
아까 봤던 AND 예제에서 마법사이면서 출신이 데마시아인 챔피언이 아닌 챔피언을 필터링 하고 싶다면 다음과 같이 WHERE 바로 다음에 NOT 부정문을 적어주면 된다.
SELECT * FROM champions WHERE NOT role = 'wizard' AND origin = 'demacia'
조건문 우선순위 정하는법
프로그래밍 공부할 때 연산 우선순위 외웠던 때가 생각난다. 사실 그렇게 안해도 되고 그냥 연산 먼저 해야할데에 괄호만 쳐주면 된다.
SQL도 똑같다. 다음과 같이 예시를 보자.
SELECT * FROM champions WHERE (origin = 'noxus' OR origin = 'demacia') AND role = 'wizard'
이렇게 적게 되면, 먼저 출신이 녹서스 이거나 데마시아인 챔피언들을 먼저 필터링하고, 그 필터링된 데이터에서 다시 역할이 마법사인 챔피언을 필터링 할 수 있다.
이건 그냥 당연하다ㅋㅋ..
OR 조건이 너무 많은때는 IN() 도 고려하자
위의 내용들을 기반으로, 만약 출신이 녹서스이거나 데마시아이거나 필트오버인 챔피언을 필터링 하려면 다음과 같이 작성할 수 있다.
SELECT * FROM champions WHERE origin = 'noxus' OR origin = 'demacia' OR origin = 'piltover'
그런데 이렇게 줄줄이 작성할 필요 없이 다음과 같이 IN() 문법을 사용해도 된다.
SELECT * FROM champions WHERE origin IN('demacia', 'noxus', 'piltover')
이렇게 작성하면 IN 안에 있는 값을 만족하는 행을 모두 출력해준다.
주의할 점은 IN 연산자는 같은 카테고리에 있는 데이터들을 대상으로 사용하는 문법이기 때문에 서로 다른 카테고리로는 축약하지 못하고 직접 OR 로 연결해줘야 한다.
참고로 OR 여러개보다 이렇게 IN 으로 축약하는게 성능상 처리속도가 더 빠르다.
결론
1. WHERE 는 조건식으로 필터링하는 구문이다.
2. 조건식에는 등호, 부등호를 사용할 수 있다.
3. 조건식 여러개는 AND / OR 로 이어붙일 수 있다.
4. 괄호로 우선순위 조건식을 설정할 수 있다.
5. OR 조건식 여러개는 IN() 으로 묶을 수 있으면 묶자.
'DataBase > SQL' 카테고리의 다른 글
| [SQL] 통계 - ALIAS와 집계함수 (0) | 2025.07.16 |
|---|---|
| [SQL] WHERE 을 더 맛있게 쓰는 방법 - LIKE (0) | 2025.07.16 |
| [SQL] SQL Data type (0) | 2025.07.16 |
| [RDB] SQL과 NoSQL 기반의 데이터베이스 입문 1장 연습문제 (0) | 2023.10.07 |
| [RDB] SQL과 NoSQL 기반의 데이터베이스 입문 1장 (0) | 2023.10.07 |