MySQL에서 특정 범위의 값을 선택하는 방법
MySQL 테이블에서 원하는 범위의 값을 조회하려면 WHERE 절을 사용하면 됩니다. WHERE 절에 비교 연산자(>=, <= 등)와 논리 연산자(AND)를 조합하면 여러 조건을 동시에 만족하는 레코드만 정확하게 추출할 수 있습니다.
이번 글에서는 실제 예제를 통해 고객 나이 범위와 정기 고객 여부를 함께 필터링하는 방법을 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다. 아래 쿼리는 고객 ID, 이름, 나이, 정기 고객 여부를 저장하는 테이블을 만듭니다.
mysql> create table DemoTable
(
CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
CustomerName varchar(200),
CustomerAge int,
isRegularCustomer bool
);
Query OK, 0 rows affected (0.57 sec)2단계: 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 테스트용 레코드를 추가합니다.
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Chris',24,true);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Robert',26,false);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Mike',27,false);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Larry',22,true);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Sam',30,true);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Carol',26,true);
Query OK, 1 row affected (0.16 sec)3단계: 전체 레코드 확인하기
SELECT 명령어로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+-------------------+ | CustomerId | CustomerName | CustomerAge | isRegularCustomer | +------------+--------------+-------------+-------------------+ | 1 | Chris | 24 | 1 | | 2 | Robert | 26 | 0 | | 3 | Mike | 27 | 0 | | 4 | Larry | 22 | 1 | | 5 | Sam | 30 | 1 | | 6 | Carol | 26 | 1 | +------------+--------------+-------------+-------------------+ 6 rows in set (0.00 sec)
4단계: WHERE 절로 특정 범위 조회하기
이제 핵심인 범위 조회 쿼리입니다. 아래 예제는 다음 두 조건을 동시에 만족하는 고객만 선택합니다.
- 나이가 24 이상 27 이하인 고객
- isRegularCustomer 컬럼 값이 1(true), 즉 정기 고객인 경우
mysql> select CustomerId,CustomerName,CustomerAge,isRegularCustomer from DemoTable where isRegularCustomer=true AND CustomerAge >=24 AND CustomerAge <= 27;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+-------------------+ | CustomerId | CustomerName | CustomerAge | isRegularCustomer | +------------+--------------+-------------+-------------------+ | 1 | Chris | 24 | 1 | | 6 | Carol | 26 | 1 | +------------+--------------+-------------+-------------------+ 2 rows in set (0.00 sec)
BETWEEN 연산자를 활용한 대안
참고로 위 쿼리는 BETWEEN 연산자를 사용해 더 간결하게 작성할 수도 있습니다.
mysql> select CustomerId,CustomerName,CustomerAge,isRegularCustomer from DemoTable where isRegularCustomer=true AND CustomerAge BETWEEN 24 AND 27;
BETWEEN은 시작값과 끝값을 모두 포함(이상, 이하)한다는 점에서 >=와 <= 조합과 동일한 결과를 반환합니다. 상황에 따라 가독성이 좋은 방식을 선택하면 됩니다.
마무리
이처럼 MySQL에서는 WHERE 절과 비교 연산자 또는 BETWEEN을 조합하여 손쉽게 특정 범위의 데이터를 조회할 수 있습니다. 여러 조건을 AND로 연결하면 복합적인 필터링도 가능하므로, 실무에서 데이터 추출 시 매우 유용하게 활용할 수 있습니다.