MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでENUM型のステータスから「Active」のレコードを抽出する方法

MySQLでは、ENUM型のカラムに格納された特定の値(例:「Active」)を持つレコードを簡単に抽出できます。この記事では、ENUM型でステータスを管理するテーブルを作成し、「Active」ステータスのレコードだけを取得する具体的な手順を解説します。

1. ENUM型を使ったテーブルの作成

まず、ステータスをENUM型として定義したテーブルを作成します。ENUM型は、あらかじめ指定した文字列のリストの中から1つの値のみを格納できる便利なデータ型です。

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

この例では、status カラムに「Active」または「Inactive」のいずれかの値しか保存できないよう制限しています。

2. サンプルデータの挿入

次に、INSERTコマンドを使ってテーブルに複数のレコードを挿入します。

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」ステータスのレコードを抽出するクエリ

ここからが本題です。「Active」ステータスのレコードのみを取得するには、WHERE句で条件を指定し、さらにGROUP BY句を使って学生IDごとにまとめます。

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)

ポイント解説

  • WHERE句: status='Active' という条件により、ENUM型カラムが「Active」であるレコードだけが対象になります。
  • GROUP BY句: 同じStudentIdが複数回「Active」として登録されている場合でも、重複を排除して学生IDごとに1件ずつ表示されます。
  • ENUMの内部動作: ENUM型は内部的には数値インデックス(1、2…)として管理されるため、検索や比較も高速に行えます。

このように、ENUM型とWHERE句・GROUP BY句を組み合わせることで、特定のステータスを持つレコードを効率的かつ簡潔に抽出することができます。

  1. MySQLで複数のカラムにNULL値を含むレコードを検索する方法

    はじめにMySQLで複数のカラムの中にNULL値が1つでも含まれているレコードを抽出したい場合、GREATEST()関数を活用するのが効果的です。GREATEST()は引数の中から最大値を返す関数ですが、引数のいずれかにNULLが含まれている場合、結果もNULLを返すという特性があります。この特性を利用すれば、複数カラムにわたるNULL値のチェックをシンプルな条件式で実現できます。この記事では、実際にテーブルを作成し、サンプルデータを挿入して、NULL値を含むレコードを検索する手順を順番に解説します。テーブルの作成まず、4つのINT型カラムを持つテーブルを作成しましょう。mysql> c

  2. MySQLのSELECT文をカスタム変数に設定する方法

    この記事では、MySQLでSELECT文(クエリ)の結果をカスタム変数(ユーザー定義変数)に設定する方法を解説します。まずサンプル用のテーブルを作成してデータを挿入し、その後SET句と「@」から始まる変数を使ってクエリを変数に格納する手順を、実際の実行例とともに見ていきましょう。 1. テーブルを作成する 最初に、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable2013     -> (     -> Name varchar(20)