Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 조건에 따라 월별·연도별 결과를 조회하는 쿼리 작성 방법

MySQL에서 특정 월과 연도 조건에 해당하는 데이터만 조회하고 싶다면, WHERE 절과 함께 OR 연산자를 사용하면 됩니다. 이 글에서는 테이블 생성부터 실제 쿼리 실행, 결과 분석까지 전 과정을 예제와 함께 살펴보겠습니다.

1. 테이블 생성하기

먼저 월(MonthNumber)과 연도(YearNumber) 정보를 저장할 테이블을 만듭니다.

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    MonthNumber int,
    YearNumber int
    );
Query OK, 0 rows affected (0.22 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable(MonthNumber,YearNumber) values(11,2018);
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(MonthNumber,YearNumber) values(3,2019);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(MonthNumber,YearNumber) values(12,2018);
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(MonthNumber,YearNumber) values(1,2019);
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(MonthNumber,YearNumber) values(12,2019);
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(MonthNumber,YearNumber) values(6,2018);
Query OK, 1 row affected (0.12 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+-------------+------------+
| Id | MonthNumber | YearNumber |
+----+-------------+------------+
| 1  | 11          | 2018       |
| 2  | 3           | 2019       |
| 3  | 12          | 2018       |
| 4  | 1           | 2019       |
| 5  | 12          | 2019       |
| 6  | 6           | 2018       |
+----+-------------+------------+
6 rows in set (0.00 sec)

4. 월·연도 조건으로 결과 조회하기

이제 WHERE 절에 OR 조건을 조합해 원하는 기간의 데이터만 추출하는 쿼리를 작성합니다. 아래 쿼리는 2019년 11월 이후의 데이터 또는 2018년 11월 이전의 데이터를 가져옵니다.

mysql> select Id,MonthNumber,YearNumber from DemoTable
where (MonthNumber >= 11 AND YearNumber = 2019)
OR
(MonthNumber <=11 AND YearNumber = 2018);

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+----+-------------+------------+
| Id | MonthNumber | YearNumber |
+----+-------------+------------+
| 1  | 11          | 2018       |
| 5  | 12          | 2019       |
| 6  | 6           | 2018       |
+----+-------------+------------+
3 rows in set (0.00 sec)

결과 분석

쿼리 결과를 보면 두 조건 중 하나라도 충족하는 레코드만 반환된 것을 확인할 수 있습니다.

  • (MonthNumber >= 11 AND YearNumber = 2019) : 2019년 11월~12월 사이의 데이터 → Id 5 (12월, 2019)
  • (MonthNumber <= 11 AND YearNumber = 2018) : 2018년 1월~11월 사이의 데이터 → Id 1 (11월, 2018), Id 6 (6월, 2018)

이처럼 AND 조건으로 각 그룹의 범위를 좁힌 뒤 OR로 두 조건을 묶으면, 연도가 바뀌는 시점을 걸치는 복잡한 기간 조건도 손쉽게 처리할 수 있습니다. 날짜 데이터가 DATE 타입이 아닌 월·연도 컬럼으로 분리되어 있을 때 특히 유용한 패턴입니다.