MySQLのIN()でアンダースコアを含む列の値を扱う方法
MySQLのIN()演算子は、指定した値リストと完全一致するレコードのみを抽出します。そのため、列の値にアンダースコア(_)が含まれている場合、アンダースコアを除いた値で検索してもマッチしません。この記事では、その挙動を実際の例で確認します。
1. テーブルの作成
まず、テーブルを作成します。
mysql> create table DemoTable1363
-> (
-> StudentId varchar(20)
-> );
Query OK, 0 rows affected (0.57 sec)2. レコードの挿入
insertコマンドを使って、テーブルにいくつかのレコードを挿入します。ここでは、アンダースコアを含む値と含まない値を混在させています。
mysql> insert into DemoTable1363 values('901');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1363 values('702');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1363 values('901_John_Doe');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1363 values('1001_Carol_Taylor');
Query OK, 1 row affected (0.26 sec)3. テーブルの全レコードを表示
selectステートメントを使って、テーブルの全レコードを表示します。
mysql> select * from DemoTable1363;
以下の出力が得られます。
+-------------------+ | StudentId | +-------------------+ | 901 | | 702 | | 901_John_Doe | | 1001_Carol_Taylor | +-------------------+ 4 rows in set (0.00 sec)
4. IN()を使った検索
IN()を使用したMySQLクエリは以下の通りです。
mysql> select * from DemoTable1363 where StudentId IN('702','1001');以下の出力が得られます。
+-----------+ | StudentId | +-----------+ | 702 | +-----------+ 1 row in set (0.00 sec)
結果の解説
上記の結果から、IN('702','1001')と指定した場合、「702」のみがマッチしていることがわかります。
「1001_Carol_Taylor」というレコードが存在するにもかかわらず、「1001」では抽出されません。これは、IN()が部分一致ではなく完全一致で評価されるためです。アンダースコアを含む値を抽出したい場合は、値そのもの(例:'1001_Carol_Taylor')を指定するか、LIKE '1001_%'のようなパターンマッチングを使う必要があります。
-
MySQLで列にENUM型を設定する方法
```html MySQLでは、テーブルを作成する際に、あらかじめ決められた文字列のリストから値を選ばせたい列に対してENUM型を設定できます。ENUMは、指定した候補値以外のデータが登録されるのを防ぎたい場合に便利なデータ型です。ここでは、実際にテーブルを作成しながら基本的な使い方を見ていきましょう。ENUM型を含むテーブルを作成するまず、学生の点数と合否ステータスを管理するテーブルを作成します。「StudentStatus」列には「First」「Second」「Fail」の3つの値のみを許可するENUM型を設定しています。mysql> create table DemoTable20
-
ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本
ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに