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

MySQL ENUM 컬럼에서 'Active' 상태 레코드 조회하는 방법

MySQL에서 ENUM 타입으로 정의된 상태(status) 컬럼이 있을 때, 특정 값(예: 'Active')을 가진 레코드만 조회해야 하는 경우가 자주 있습니다. 이번 글에서는 ENUM 컬럼이 설정된 테이블을 만들고, WHERE 절과 GROUP BY를 활용해 'Active' 상태의 레코드를 학생 ID별로 선택하는 방법을 단계별로 알아보겠습니다.

1. ENUM 타입으로 테이블 생성하기

먼저 status 컬럼을 enum('Active','Inactive')로 선언하여 테이블을 생성합니다. ENUM은 미리 정의한 값 목록 중 하나만 저장할 수 있는 편리한 데이터 타입입니다.

mysql> create table DemoTable2037
    -> (
    -> StudentId int,
    -> status enum('Active','Inactive')
    -> );
Query OK, 0 rows affected (0.51 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다. 같은 StudentId에 서로 다른 상태가 섞여 들어가도록 구성했습니다.

mysql> insert into DemoTable2037 values(99,'Active');
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable2037 values(99,'Inactive');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable2037 values(100,'Inactive');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable2037 values(99,'Active');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable2037 values(100,'Inactive');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable2037 values(101,'Active');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable2037 values(101,'Active');
Query OK, 1 row affected (0.12 sec)

3. 전체 레코드 확인하기

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

mysql> select *from DemoTable2037;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-----------+----------+
| StudentId | status   |
+-----------+----------+
| 99        | Active   |
| 99        | Inactive |
| 100       | Inactive |
| 99        | Active   |
| 100       | Inactive |
| 101       | Active   |
| 101       | Active   |
+-----------+----------+
7 rows in set (0.00 sec)

4. 'Active' 상태 레코드만 조회하기

이제 핵심인 조회 쿼리입니다. WHERE 절로 status='Active' 조건을 걸고, GROUP BY로 StudentId별 중복을 제거하여 각 학생의 활성 상태를 한 번씩만 출력할 수 있습니다.

mysql> select StudentId,status
    -> from DemoTable2037 where status='Active'
    -> group by StudentId;

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

+-----------+--------+
| StudentId | status |
+-----------+--------+
| 99        | Active |
| 101       | Active |
+-----------+--------+
2 rows in set (0.00 sec)

정리

결과를 보면 StudentId 99와 101에 대해서는 'Active' 상태의 레코드가 존재하므로 두 개의 행이 반환되었고, 'Inactive' 상태만 있는 StudentId 100은 결과에서 제외된 것을 확인할 수 있습니다.

참고로 단순히 Active 상태의 모든 행을 나열하고 싶다면 GROUP BY 없이 SELECT * FROM DemoTable2037 WHERE status='Active'만 실행하면 되며, DISTINCT를 사용해 SELECT DISTINCT StudentId FROM DemoTable2037 WHERE status='Active'처럼 작성하는 방법도 있습니다. ENUM 값을 문자열 비교로 그대로 조회할 수 있다는 점이 MySQL ENUM의 장점입니다.