SQL에서 BETWEEN을 사용할 떄마다 맨날 헷갈리는 것이 있다.
'BETWEEN 10 AND 20'이라고 하면
10 이상 20 이하?
10 이상 20 미만?
어쩜 할 때마다 또 잊어먹고 또 헷갈리는지..
그래서 이번 기회에 확실히 정리하려고 한다!
(아래의 예시는 Bigquery에서 thelook_ecommerce 데이터 샘플을 사용했습니다.)
BETWEEN의 범위
'BETWEEN (조건1) AND (조건2)'는
'(조건1) 이상 (조건2) 이하'를 의미한다.
숫자형
요청사항: 나이가 10세 이상 20세 이하인 유저의 first name과 나이를 추출해주세요.
SELECT first_name, age
FROM `thelook_ecommerce.users`
WHERE age BETWEEN 10 and 20
ORDER BY age DESC
나이가 10세 이상 20세 이하인 유저를 추출한다.
age를 기준으로 내림차순 했을 때 20세도 출력되는 것을 볼 수 있다.
날짜형
요청사항: 주문날짜가 2020년 1월인 주문의 order id와 주문날짜를 출력해주세요.
SELECT order_id, created_at
FROM `thelook_ecommerce.orders`
WHERE created_at BETWEEN '2020-01-01' and '2020-01-31'
ORDER BY created_at DESC
2020년 1월만 추출하려고 위와 같이 쿼리를 작성하면
보시다시피 2020년 1월 30일까지만 출력된다.
왜냐하면 위 쿼리가 의미하는 것은
'2020-01-01 00:00:00 부터 2020-01-31 00:00:00 까지'를 의미하기 때문이다.
1월 31일까지 포함하고 싶다면 '2020-01-31' 대신 '2020-02-01'로 수정해야 한다.
이렇게 날짜형에서 BETWEEN을 사용할 땐,
날짜만 적었더라도 항상 시간까지 염두에 두고 쿼리를 작성해야한다.
+)
날짜 조건을 거는 또 다른 방법으로는
날짜를 문자형으로 변경해서 추출하는 방법이 있다.
SELECT order_id, created_at
FROM `thelook_ecommerce.orders`
WHERE string(created_at) LIKE '2020-01-%'
ORDER BY created_at DESC
between은 숫자형보다 날짜형이 진짜 헷갈리는데 이번부터는 절대 까먹지 말자~!
'데이터공부기록 > SQL' 카테고리의 다른 글
[독서메모] 데이터 분석을 위한 SQL 레시피 | 3장 5강 (0) | 2023.07.28 |
---|---|
[독서메모] 데이터 분석을 위한 SQL 레시피 | 2장 3강 시스템 (0) | 2023.07.27 |
[SQL] COUNT(*)와 COUNT(column_name)의 차이점 (0) | 2023.07.07 |