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

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演算子を利用してください。

  1. 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

  2. JavaからMySQLを操作する:WHERE句の条件値にPreparedStatementを正しく使う方法

    JavaからMySQLデータベースに対して、WHERE句の条件に変数の値を渡してクエリを実行したい場合、PreparedStatementを使用するのが最も安全かつ確実な方法です。SQLインジェクション対策にもなり、パフォーマンス面でもメリットがあります。基本的な構文は以下の通りです。String anyVariableName = select yourColumnName from yourTableName where name = ?; PreparedStatement ps = (PreparedStatement) con.prepareStatement(yourVariabl