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

【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を組み合わせることで、大文字・小文字を意識した柔軟な文字列検索が可能になります。ユーザー名やコード値など、英字の大小が意味を持つデータを扱う際にぜひ活用してください。

  1. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す

  2. MySQLでテーブルのすべてのフィールド(カラム)を表示する方法

    MySQLで特定のテーブルに含まれるすべてのフィールド(カラム)名を確認したい場合、information_schema.columns テーブルを利用する方法が便利です。table_schema にデータベース名、table_name に対象のテーブル名を指定することで、そのテーブルの全フィールドを一覧表示できます。基本の構文以下の構文を使うことで、指定したテーブルのすべてのカラム名を取得できます。select column_name as anyAliasName from information_schema.columns     where t