[MySQL] 3.5 데이터 필터링 - BETWEEN


http://www.mysqltutorial.org 내용을 따라 익히며 정리한 글입니다. 예시에 나오는 데이터셋은 MySQL 샘플 데이터셋인 classicmodels DB입니다.


1. 연산자 BETWEEN 소개

BETWEEN 을 사용하면 범위를 지정해 데이터를 불러올 수 있다.
SELECT, UPDATE, DELETE 문의 WHERE 절에서 사용하는 경우가 많다.

expr [NOT] BETWEEN begin_expr AND end_expr;

위 구문에서 expr, begin_expr, end_expr 에는 모두 동일한 유형의 데이터가 들어간다.

expr의 값이 begin_expr 의 값보다 크거나 같고 (>=) end_expr 의 값보다 작거나 같으면(<=) true 를 반환하고 그렇지 않으면 0을 반환한다.

NOT BETWEENexpr의 값이 begin_expr의 값보다 작거나(<) end_expr의 값보다 큰 경우(>) true를 반환하고 그렇지 않으면 0을 반환한다.

표현식이 NULL이면 BETWEENNULL 값을 반환한다.

2. BETWEEN 예시

2-1

products 테이블에서 구매가가 90~100인 상품의 상품코드, 상품명, 구매가를 불러온다.

SELECT
productCode,
productName,
buyPrice
FROM
products
WHERE
buyPrice BETWEEN 90 AND 100;
+-------------+--------------------------------------+----------+
| productCode | productName | buyPrice |
+-------------+--------------------------------------+----------+
| S10_1949 | 1952 Alpine Renault 1300 | 98.58 |
| S10_4698 | 2003 Harley-Davidson Eagle Drag Bike | 91.02 |
| S12_1099 | 1968 Ford Mustang | 95.34 |
| S12_1108 | 2001 Ferrari Enzo | 95.59 |
| S18_1984 | 1995 Honda Civic | 93.89 |
| S18_4027 | 1970 Triumph Spitfire | 91.92 |
| S24_3856 | 1956 Porsche 356A Coupe | 98.30 |
+-------------+--------------------------------------+----------+
7 rows in set (0.00 sec)

BETWEEN 대신 기호를 사용해도 결과는 위와 같다.

SELECT
productCode,
productName,
buyPrice
FROM
products
WHERE
buyPrice >= 90 AND buyPrice <= 100;

2-2

products 테이블에서 구매가가 20~100 범위에 있지 않은 상품의 상품코드, 상품명, 구매가를 불러온다.

SELECT
productCode,
productName,
buyPrice
FROM
products
WHERE
buyPrice NOT BETWEEN 20 AND 100;
+-------------+-------------------------------------+----------+
| productcode | productname | buyprice |
+-------------+-------------------------------------+----------+
| S10_4962 | 1962 LanciaA Delta 16V | 103.42 |
| S18_2238 | 1998 Chrysler Plymouth Prowler | 101.51 |
| S24_2840 | 1958 Chevy Corvette Limited Edition | 15.91 |
| S24_2972 | 1982 Lamborghini Diablo | 16.24 |
+-------------+-------------------------------------+----------+
4 rows in set (0.00 sec)

이 역시 BETWEEN 대신 기호와 논리 연산자를 사용해 같은 결과를 가져올 수 있다.

SELECT
productCode,
productName,
buyPrice
FROM
products
WHERE
buyPrice < 20 OR buyPrice > 100;

3. BETWEEN 사용해 날짜 데이터 추리기

BETWEEN 연산자를 날짜 값에 정확하게 적용하기 위해선 CAST 함수를 쓰는게 좋다. CAST 함수는 값을 BINARY, CHAR, DATE, DATETIME, TIME 등의 타입으로 바꿔주는 함수를 말한다.

예를 들어, 배송 마감일(requireddate)이 2003년 1월 1일부터 1월 31일까지인 주문들을 가져오기 위해선 다음과 같이 쿼리문을 작성한다.

SELECT
orderNumber,
requiredDate,
status
FROM
orders
WHERE
requireddate BETWEEN
CAST('2003-01-01' AS DATE) AND
CAST('2003-01-31' AS DATE);
+-------------+--------------+---------+
| orderNumber | requiredDate | status |
+-------------+--------------+---------+
| 10100 | 2003-01-13 | Shipped |
| 10101 | 2003-01-18 | Shipped |
| 10102 | 2003-01-18 | Shipped |
+-------------+--------------+---------+
3 rows in set (0.00 sec)
© 2019 THE DATASCIENTIST All Rights Reserved.
Theme by hiero