【MySQL】大文字を含むすべてのレコードを抽出するクエリの書き方
MySQLで、特定のカラムに大文字が含まれるすべてのレコードを表示したい場合には、文字列式と正規表現パターンの一致を判定するRLIKE演算子を使用します。この記事では、実際にテーブルを作成し、データを挿入して、大文字を含むレコードだけを抽出する手順をわかりやすく解説します。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table contains_capital_letterDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(100) -> ); Query OK, 0 rows affected (1.42 sec)
Idを主キー(AUTO_INCREMENT)とし、名前を格納するvarchar型のNameカラムを持つシンプルな構成です。
レコードの挿入
次に、INSERT文を使って、大文字・小文字が混在する名前データを登録します。
mysql> insert into contains_capital_letterDemo(Name) values('Larry');
Query OK, 1 row affected (0.17 sec)
mysql> insert into contains_capital_letterDemo(Name) values('larry');
Query OK, 1 row affected (0.12 sec)
mysql> insert into contains_capital_letterDemo(Name) values('john');
Query OK, 1 row affected (0.13 sec)
mysql> insert into contains_capital_letterDemo(Name) values('JOHN');
Query OK, 1 row affected (0.36 sec)
mysql> insert into contains_capital_letterDemo(Name) values('mike');
Query OK, 1 row affected (0.14 sec)
mysql> insert into contains_capital_letterDemo(Name) values('Mike');
Query OK, 1 row affected (0.27 sec)
全レコードの確認
SELECT文で、テーブル内のすべてのレコードを表示してみます。
mysql> select * from contains_capital_letterDemo;
実行結果は以下の通りです。
+----+-------+ | Id | Name | +----+-------+ | 1 | Larry | | 2 | larry | | 3 | john | | 4 | JOHN | | 5 | mike | | 6 | Mike | +----+-------+ 6 rows in set (0.00 sec)
大文字・小文字それぞれのパターンが混在した6件のデータが登録されました。
大文字を含むレコードを抽出するクエリ
それでは本題です。Nameカラムに大文字が1つでも含まれるレコードのみを抽出するには、CAST関数で値をBINARY型に変換してから、RLIKEで正規表現パターン [A-Z] と照合します。
mysql> select * from contains_capital_letterDemo WHERE CAST(Name AS BINARY) RLIKE '[A-Z]';
実行結果は以下の通りです。
+----+-------+ | Id | Name | +----+-------+ | 1 | Larry | | 4 | JOHN | | 6 | Mike | +----+-------+ 3 rows in set (0.00 sec)
「Larry」「JOHN」「Mike」の3件、つまり少なくとも1文字の大文字を含むレコードだけが正しく抽出できました。
クエリのポイント解説
- CAST(Name AS BINARY):MySQLでは使用する照合順序によっては、文字列比較で大文字・小文字が区別されない場合があります。BINARY型にキャストすることで、バイト単位の厳密な比較が行われ、大文字と小文字を確実に区別できます。
- RLIKE '[A-Z]':正規表現の文字クラス [A-Z] は、「A〜Zのいずれかの大文字アルファベットが1つでも含まれているか」を判定します。
- なお、REGEXP演算子はRLIKEと同義のため、どちらを使っても同じ結果が得られます。
このように、CASTとRLIKEを組み合わせることで、大文字・小文字を意識した柔軟な文字列検索が可能になります。ユーザー名やコード値など、英字の大小が意味を持つデータを扱う際にぜひ活用してください。
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す
-
MySQLでテーブルのすべてのフィールド(カラム)を表示する方法
MySQLで特定のテーブルに含まれるすべてのフィールド(カラム)名を確認したい場合、information_schema.columns テーブルを利用する方法が便利です。table_schema にデータベース名、table_name に対象のテーブル名を指定することで、そのテーブルの全フィールドを一覧表示できます。基本の構文以下の構文を使うことで、指定したテーブルのすべてのカラム名を取得できます。select column_name as anyAliasName from information_schema.columns where t