MySQLでハイフンを含むレコードを大文字・小文字を区別して完全一致検索する方法
MySQLでは、WHERE句の後にBINARY演算子を使用することで、大文字と小文字を区別した完全一致検索が可能になります。デフォルトの照合順序(collation)では文字列比較が大文字・小文字を区別しないため、厳密な一致を求める場合にはBINARYキーワードが有効です。
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> EmployeeCode varchar(100)
-> );
Query OK, 0 rows affected (0.64 sec)次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。ここでは、同じ英数字でも大文字と小文字が異なるデータを意図的に登録しています。
mysql> insert into DemoTable values('EMP-1122');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('emp-1122');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable values('EMP-6756');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('EMP-8775');
Query OK, 1 row affected (0.16 sec)SELECT文ですべてのレコードを表示して確認します。
mysql> select *from DemoTable;
出力結果
上記のクエリを実行すると、次のような出力が得られます。
+--------------+ | EmployeeCode | +--------------+ | EMP-1122 | | emp-1122 | | EMP-6756 | | EMP-8775 | +--------------+ 4 rows in set (0.00 sec)
テーブルには「EMP-1122」と「emp-1122」という、大文字・小文字のみが異なる2つのレコードが存在します。通常のSELECT文で検索すると、両方のレコードがヒットしてしまいます。
そこで、大文字・小文字を区別した完全一致でレコードを取得するには、以下のようにWHERE句の後にBINARYを指定します。
mysql> select *from DemoTable WHERE BINARY EmployeeCode='EMP-1122';
出力結果
このクエリを実行すると、大文字表記の「EMP-1122」に完全一致するレコードのみが返されます。
+--------------+ | EmployeeCode | +--------------+ | EMP-1122 | +--------------+ 1 row in set (0.00 sec)
このように、BINARY演算子を使うことで、ハイフンを含む社員コードなどの文字列に対しても、大文字・小文字を厳密に区別した正確な検索が実現できます。なお、大量のデータを扱う場合はBINARYによる比較でインデックスが利用されなくなる可能性があるため、パフォーマンスが必要な場面ではバイナリ照合順序(utf8mb4_binなど)をカラムに設定しておく方法も検討するとよいでしょう。
-
MySQLのSELECT *で重複しないID(一意な値)を取得する方法
MySQLでテーブルから全カラム(SELECT *)を取得しつつ、特定のカラムの重複を排除して一意なIDだけを取り出したい場合があります。そんなときはGROUP BY句を使うことで実現できます。基本構文SELECT * FROM テーブル名 GROUP BY カラム名;指定したカラムの値ごとにレコードがグループ化され、各グループから1行ずつ結果として返されます。その結果、重複したIDを持つ行は1行にまとめられます。サンプルテーブルの作成実際に動きを確認するため、テーブルを作成してみましょう。mysql> create table DistinctIdDemo -> (
-
JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手