Home SQL개념- WHERE문
Post
Cancel

SQL개념- WHERE문

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
;

image.png

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;
;

image.png

02. NOT 사용

예를 들어 주문 금액이 30에서 50달러가 아닌 주문 내역 확인(NOT)

1
2
3
4
5
6
7
SELECT *

FROM orderdetails

WHERE NOT
    (priceeach BETWEEN 30 AND 50)
;

image.png

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'
;

image.png

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')
;

image.png

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')
;

image.png

WHERE + IS NULL - 결측치 탐색1

어떤 데이터를 사용하고 분석하던 결측치 탐색은 중요하다.

SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] IS NULL

예를 들어 보고 대상이 없는 직원을 찾기 위해

1
2
3
4
5
6
SELECT *

FROM employees

WHERE reportsTo IS NULL
;

image.png

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
;

image.png

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
;

image.png

WHERE + LIKE + ‘%특정문자%’ - 특정 문자 찾기

데이터 중 특정 문자를 찾고 싶을 때 사용.

SELECT [열 이름] FROM [테이블명] WHERE [필터 열 이름] LIKE '%문자%'

1. 문자가 아무 위치에나 존재 할 경우 - ‘%문자%’

1
2
3
4
5
6
7
SELECT *

FROM
	customers

WHERE addressLine1 LIKE '%St.%'
;

image.png

2. 문자가 맨 끝에만 존재 할 경우 - ‘%문자’

1
2
3
4
5
6
7
SELECT *

FROM
	customers

WHERE addressLine1 LIKE '%St.'
;

image.png

3. 문자가 맨 앞에만 존재 할 경우 - ‘문자%’

1
2
3
4
5
6
7
SELECT *

FROM
	customers

WHERE addressLine1 LIKE '54%'
;

image.png

참고자료 및 데이터

서적: SQL로 맛보는 전처리 분석

참고자료1

참고자료2

MYSQL SampleDATA

Kaggle: Women’s E-Commerce Clothing Reviews

Kaggle: Titanic extended dataset (Kaggle + Wikipedia)

Instacart Market Basket Analysis

This post is licensed under CC BY 4.0 by the author.