MySQLのSELECT文で大文字・小文字の違いを無視して同名データを取得する方法
MySQLでは、LOWER()関数を使うことで、大文字と小文字の違いを無視して、同じ名前のレコードを1つの条件で抽出できます。ここでは、姓(LastName)が「Smith」と「smith」のように表記ゆれしているデータをまとめて取得する方法を、具体的な手順とともに解説します。
テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable623 (FirstName varchar(100),LastName varchar(100),Age int); Query OK, 0 rows affected (0.76 sec)
レコードの挿入
INSERT文を使って、いくつかのレコードを挿入します。あえて「Smith」と「smith」、「Brown」と「brown」のように、大文字・小文字の異なる同じ姓を登録している点に注目してください。
mysql> insert into DemoTable623 values('John','Smith',23);
Query OK, 1 row affected (0.66 sec)
mysql> insert into DemoTable623 values('Adam','smith',23);
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable623 values('Chris','Brown',24);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable623 values('Robert','brown',21);
Query OK, 1 row affected (0.22 sec)
登録されたレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable623;
実行結果は以下の通りです。
+-----------+----------+------+ | FirstName | LastName | Age | +-----------+----------+------+ | John | Smith | 23 | | Adam | smith | 23 | | Chris | Brown | 24 | | Robert | brown | 21 | +-----------+----------+------+ 4 rows in set (0.00 sec)
LOWER()関数で大文字・小文字を区別せずに検索する
ここが本題です。WHERE句の中でLOWER()関数を使い、LastNameの値をすべて小文字に変換してから比較します。
mysql> select FirstName from DemoTable623 where lower(LastName)='smith';
このクエリを実行すると、「Smith」と「smith」の両方が該当し、以下のような出力が得られます。
+-----------+ | FirstName | +-----------+ | John | | Adam | +-----------+ 2 rows in set (0.00 sec)
ポイント解説
LOWER()関数は、文字列をすべて小文字に変換する関数です。比較対象の検索値も小文字('smith')で指定することで、元のデータが「Smith」でも「smith」でも同じ条件に一致します。なお、UPPER()関数を使って両者を大文字に揃えて比較しても、同じ結果が得られます。
また、テーブルやカラムの照合順序(COLLATE)が大文字・小文字を区別しない設定(例:utf8mb4_general_ci など _ci 系)になっている場合は、WHERE句での比較自体がもともと大文字・小文字を無視して行われるため、LOWER()関数は不要です。逆に大文字・小文字を厳密に区別して検索したい場合は、照合順序を_cs(ケースセンシティブ)系に変更するか、BINARY演算子を利用してください。
-
MySQLで最新50件のレコードからランダムに5行だけ抽出する方法
MySQLでテーブルの末尾(最新)50件の中から、さらにランダムに5行だけ取り出したい場合は、サブクエリと ORDER BY RAND() を組み合わせるのが効果的です。この記事では、実際にテーブルを作成しながら手順を解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1853 ( UserId int NOT NULL AUTO_INCREMENT, PRIMARY KEY(UserId) ); Query OK, 0 rows affected (0.00 s
-
JavaからMySQLを操作する:WHERE句の条件値にPreparedStatementを正しく使う方法
JavaからMySQLデータベースに対して、WHERE句の条件に変数の値を渡してクエリを実行したい場合、PreparedStatementを使用するのが最も安全かつ確実な方法です。SQLインジェクション対策にもなり、パフォーマンス面でもメリットがあります。基本的な構文は以下の通りです。String anyVariableName = select yourColumnName from yourTableName where name = ?; PreparedStatement ps = (PreparedStatement) con.prepareStatement(yourVariabl