MySQLのIN()を使った大文字・小文字を区別しないSELECTの実行方法
MySQLでIN()句を使用しながら、大文字と小文字を区別しないSELECTクエリを実行したい場面はよくあります。本記事では、UPPER()関数を組み合わせることで、大文字・小文字の違いを無視してデータを検索する方法を、実際のSQL例とともにわかりやすく解説します。
サンプルテーブルの作成
まず、検索対象となるテーブルを作成しましょう。
mysql> create table DemoTable1460
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.91 sec)
テーブルへのデータ挿入
次に、INSERTコマンドを使っていくつかのレコードを登録します。
mysql> insert into DemoTable1460 values('Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1460 values('David');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1460 values('Bob');
Query OK, 1 row affected (0.52 sec)
mysql> insert into DemoTable1460 values('Robert');
Query OK, 1 row affected (0.11 sec)登録データの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select * from DemoTable1460;
実行結果は以下のとおりです。
+--------+
| Name |
+--------+
| Chris |
| David |
| Bob |
| Robert |
+--------+
4 rows in set (0.00 sec)
大文字・小文字を区別しないSELECTクエリの実行
ここが本題です。UPPER()関数を使ってカラムの値を大文字に変換し、IN()句で大文字の検索値と比較することで、大文字・小文字を区別しない検索が実現できます。
mysql> select * from DemoTable1460 where UPPER(Name) IN('CHRIS','BOB');実行結果は以下のとおりです。
+-------+
| Name |
+-------+
| Chris |
| Bob |
+-------+
2 rows in set (0.00 sec)
解説のポイント
このクエリでは、テーブル内の「Chris」や「Bob」といった値がUPPER()関数によって「CHRIS」「BOB」に変換され、IN()句で指定した大文字の値と一致するため、該当レコードが正しく抽出されます。同様にLOWER()関数を使って小文字に統一する方法でも同じ結果が得られます。
なお、MySQLのデフォルトの照合順序(collation)である「utf8mb4_general_ci」などでは、そもそも比較時に大文字・小文字が区別されません。そのため、大文字・小文字を区別したい場合は「_bin」で終わるバイナリ照合順序を使用する必要があります。今回のUPPER()関数を使う方法は、照合順序の設定に関わらず、確実に意図した動作を実現したい場合に有効なテクニックです。
-
MySQLでSELECT文を使ってレコードを挿入する方法
MySQLでSELECT文を使用したレコード挿入の基本MySQLでは、INSERT INTO SELECT文を使うことで、別のテーブルからSELECT文で取得したデータをそのまま新しいテーブルに挿入できます。この方法は、テーブル間でのデータコピーや、条件に合致するレコードだけを抽出して登録したい場合に非常に便利です。ここでは、実際の手順をサンプルコードとともに詳しく解説していきます。ステップ1:元となるテーブルを作成するまず、データのコピー元となるテーブル「DemoTable1」を作成します。mysql> create table DemoTable1
-
MySQLのCASE WHENステートメントで条件別のカウントを実行する方法
条件に応じてレコードをカウントしたい場合には、CASE WHENステートメントを活用すると便利です。この記事では、サンプルテーブルを作成し、SUM関数と組み合わせて条件別の件数を集計する手順を、実行結果つきでわかりやすく解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成しましょう。 mysql> create table DemoTable1910 ( FirstName varchar(20), Marks int ); Query OK, 0 rows affected (0.00 sec) 2. レコードの挿入 続い