MySQLのENUMフィールドを使って行を選択する方法
MySQLでは、ENUM型のカラムを条件に指定して行を抽出することができます。ここでは、ENUMフィールドを使用して特定の行を選択する手順を、実際のSQL文と実行結果とともに解説します。
サンプルテーブルの作成
まず、ENUM型のカラムを持つテーブルを作成します。以下の例では、従業員の雇用形態を格納する「EmployeeStatus」カラムに、「FULLTIME」と「Intern」という2つの値を許容するENUM型を定義し、デフォルト値をNULLに設定しています。
mysql> create table DemoTable
-> (
-> EmployeeStatus ENUM('FULLTIME','Intern') default NULL
-> );
Query OK, 0 rows affected (0.66 sec)
テストデータの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。最後のレコードは値を指定していないため、NULLが登録されます。
mysql> insert into DemoTable values('FULLTIME');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Intern');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Intern');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.12 sec)全レコードの確認
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
実行すると、以下のような結果が出力されます。
+----------------+
| EmployeeStatus |
+----------------+
| FULLTIME |
| Intern |
| Intern |
| NULL |
+----------------+
4 rows in set (0.00 sec)
ENUMフィールドで行を選択するクエリ
それでは本題です。「EmployeeStatus」がNULLである行、または「Intern」以外の行を抽出したい場合は、以下のようにWHERE句で条件を組み合わせます。
mysql> select * from DemoTable
-> where EmployeeStatus is null or EmployeeStatus <> 'Intern';
このクエリを実行すると、次のような結果が得られます。
+----------------+
| EmployeeStatus |
+----------------+
| FULLTIME |
| NULL |
+----------------+
2 rows in set (0.00 sec)
ポイントの解説
このクエリの重要なポイントは、「EmployeeStatus is null or EmployeeStatus <> 'Intern'」という条件式です。
SQLでは、NULLは比較演算子(= や <>)での評価が常にUNKNOWNになるという特殊な性質を持っています。そのため、「EmployeeStatus <> 'Intern'」だけの条件ではNULLの行は一致しないと判定され、抽出されません。そこで、「is null」による条件をORで明示的に追加することで、NULLの行も含めて正しく取得できるのです。
ENUM型のカラムを扱う際は、デフォルト値としてNULLを許可しているケースが多いため、このようにNULL判定を組み合わせたクエリの書き方を覚えておくと便利です。
-
MySQLで最も出現回数の多い値を取得する方法(ORDER BY COUNT(*)の使い方)
MySQLでカウント(出現回数)が最も多い値を取得する方法MySQLで特定のフィールドに出現回数が最も多い値を取得したい場合は、GROUP BYとORDER BY COUNT(*)を組み合わせます。この記事では、実際にテーブルを作成しながら、その手順をサンプルコード付きでわかりやすく解説します。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1940 ( FirstName varchar(20) ); Query OK, 0 rows affected (0.00 se
-
MySQL SLESリポジトリを使ったMySQLのアップグレード手順
MySQLは、MySQL SLESリポジトリを利用することで簡単にアップグレードできます。ここでは、そのアップグレードに必要な手順を詳しく解説します。デフォルトでは、MySQL SLESリポジトリは、インストール時にユーザーが選択したリリースシリーズ内で最新バージョンへとMySQLを更新します。別のリリースシリーズへ更新したい場合は、現在選択されているシリーズのサブリポジトリを無効化する必要があります。また、複数のシリーズをまたいだ一括アップグレードは避け、必ず一つ隣のシリーズへ段階的にアップグレードすることが推奨されています。なお、MySQL SLESリポジトリを使用している場合、インプレー