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句を組み合わせることで、特定のステータスを持つレコードを効率的かつ簡潔に抽出することができます。
-
MySQLで複数のカラムにNULL値を含むレコードを検索する方法
はじめにMySQLで複数のカラムの中にNULL値が1つでも含まれているレコードを抽出したい場合、GREATEST()関数を活用するのが効果的です。GREATEST()は引数の中から最大値を返す関数ですが、引数のいずれかにNULLが含まれている場合、結果もNULLを返すという特性があります。この特性を利用すれば、複数カラムにわたるNULL値のチェックをシンプルな条件式で実現できます。この記事では、実際にテーブルを作成し、サンプルデータを挿入して、NULL値を含むレコードを検索する手順を順番に解説します。テーブルの作成まず、4つのINT型カラムを持つテーブルを作成しましょう。mysql> c
-
MySQLのSELECT文をカスタム変数に設定する方法
この記事では、MySQLでSELECT文(クエリ)の結果をカスタム変数(ユーザー定義変数)に設定する方法を解説します。まずサンプル用のテーブルを作成してデータを挿入し、その後SET句と「@」から始まる変数を使ってクエリを変数に格納する手順を、実際の実行例とともに見ていきましょう。 1. テーブルを作成する 最初に、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable2013 -> ( -> Name varchar(20)