SQL을 배우는 중.
2023-10-05. 목요일
TOOL: MYSQL
SQL WHERE 문
SQL에서 원하는 데이터를 필터링 하는 방법
WHERE 뒤에 조건을 붙이고, 조건을 만족하는 행을 추출한다.
WHERE - 비교 연산
SELECT [열 이름] FROM [테이블명] WHERE [조건]
- 조건: ‘=’, ‘!=’, ‘<>’, ‘<’, ‘<=’, ‘>=’, ‘>’
예를 들어 30달러 이상 주문한 주문번호를 조회하고 싶으면
1
2
3
4
5
6
7
8
9
SELECT
orderNumber
, priceEach
FROM orderdetails
WHERE
priceEach >= 30
;
WHERE + BETWEEN + AND / NOT - 범위 탐색
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] BETWEEN [조건1] [논리연산자(AND, NOT 등. OR는 사용하지 않는다)] [조건2]
01. AND 사용
예를 들어 주문 금액이 30에서 50달러 사이의 주문내역 확인(AND)
1
2
3
4
5
6
7
SELECT *
FROM orderdetails
WHERE
priceEach BETWEEN 30 AND 50;
;
02. NOT 사용
예를 들어 주문 금액이 30에서 50달러가 아닌 주문 내역 확인(NOT)
1
2
3
4
5
6
7
SELECT *
FROM orderdetails
WHERE NOT
(priceeach BETWEEN 30 AND 50)
;
WHERE + OR - OR 연산
중복되는 열 이름이 있어도 따로 작성해야한다.
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] OR [조건1]
예를 들어 주문 국가가 미국, 캐나다, 프랑스 인 경우
1
2
3
4
5
6
7
8
SELECT
customerNumber
, country
FROM customers
WHERE country = 'USA' OR country = 'Canada' OR country = 'France'
;
WHERE + IN - 중복 비교 및 탐색
만약 위 코드를 변형해 필터 할 국가가 10개가 넘는다면?
WHERE IN 으로 OR연산을 한번에 해결하자
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] IN ([조건1],[조건2],[조건3]....)
1
2
3
4
5
6
7
8
SELECT
customerNumber
, country
FROM customers
WHERE country IN('USA', 'Canada', 'France')
;
WHERE + NOT IN - 중복 비교 및 탐색
해당 조건을 제외하고 필터
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] NOT IN ([조건1],[조건2],[조건3]....)
1
2
3
4
5
6
7
8
SELECT
customerNumber
, country
FROM customers
WHERE country NOT IN('USA', 'Canada', 'France')
;
WHERE + IS NULL - 결측치 탐색1
어떤 데이터를 사용하고 분석하던 결측치 탐색은 중요하다.
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] IS NULL
예를 들어 보고 대상이 없는 직원을 찾기 위해
1
2
3
4
5
6
SELECT *
FROM employees
WHERE reportsTo IS NULL
;
WHERE + IS NOT NULL - 결측치 탐색2
이번엔 결측치가 아닌 값을 찾아보자.
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] IS NOT NULL
예를 들어 보고 대상이 있는 직원을 찾기 위해
1
2
3
4
5
6
SELECT employeeNumber
FROM employees
WHERE reportsTo IS NOT NULL
;
WHERE + COUNT - 결측치 탐색 3
만약 결측치가 있는 열도 모르고 빠르게 확인하고 싶다면 COUNT 함수를 활용하면 간단하다.
SELECT COUNT[* 전체 열], COUNT[열 1], COUNT[열2] FROM [테이블명]
1
2
3
4
5
6
7
SELECT
COUNT(employeeNumber)
, COUNT(reportsTo) -- NULL이 존재하면 COUNT 하지 않는다!
, COUNT(*)
FROM employees
;
WHERE + LIKE + ‘%특정문자%’ - 특정 문자 찾기
데이터 중 특정 문자를 찾고 싶을 때 사용.
SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] LIKE '%문자%'
1. 문자가 아무 위치에나 존재 할 경우 - ‘%문자%’
1
2
3
4
5
6
7
SELECT *
FROM
customers
WHERE addressLine1 LIKE '%St.%'
;
2. 문자가 맨 끝에만 존재 할 경우 - ‘%문자’
1
2
3
4
5
6
7
SELECT *
FROM
customers
WHERE addressLine1 LIKE '%St.'
;
3. 문자가 맨 앞에만 존재 할 경우 - ‘문자%’
1
2
3
4
5
6
7
SELECT *
FROM
customers
WHERE addressLine1 LIKE '54%'
;
참고자료 및 데이터
Kaggle: Women’s E-Commerce Clothing Reviews