NOT LIKE演算子で使用できるワイルドカード文字の種類と使い方を徹底解説
SQLのNOT LIKE演算子は、ワイルドカード文字と組み合わせて使用することで、指定したパターンに一致しない文字列を抽出できます。ワイルドカードとは、複雑な条件に合致するデータを柔軟に検索するための特殊文字のことです。NOT LIKE演算子と組み合わせて使用できるワイルドカードには、主に以下の2種類があります。
%(パーセント)ワイルドカード
「%」は、0文字・1文字・それ以上の任意の文字列を表すワイルドカードです。NOT LIKE演算子で「%」を使用する際の基本構文は次のとおりです。
SELECT文...WHERE column_name NOT LIKE 'X%'
ここで「X」は任意の開始パターン(1文字以上)を表し、「%」が0文字以上の任意の文字列に一致します。
「%」はパターンの位置や組み合わせによって、さまざまな検索が可能です。以下に代表的な使用例を示します。例中の「X」は指定パターンを表します。
1. NOT LIKE 'X%':「X」で始まる値を除外
「X」で始まる値以外をすべて検索します。
実行例
mysql> Select * from Student Where Name NOT LIKE 'a%'; +------+---------+---------+-----------+--------------------+ | Id | Name | Address | Subject | year_of_Admission | +------+---------+---------+-----------+--------------------+ | 1 | Gaurav | Delhi | Computers | 2001 | | 15 | Harshit | Delhi | Commerce | 2009 | | 20 | Gaurav | Jaipur | Computers | 2017 | | 21 | Yashraj | NULL | Math | 2000 | +------+---------+---------+-----------+--------------------+ 4 rows in set (0.00 sec)
2. NOT LIKE '%X':「X」で終わる値を除外
「X」で終わる値以外をすべて検索します。
実行例
mysql> Select * from Student Where Name NOT LIKE '%v'; +------+---------+---------+----------+--------------------+ | Id | Name | Address | Subject | year_of_Admission | +------+---------+---------+----------+--------------------+ | 15 | Harshit | Delhi | Commerce | 2009 | | 21 | Yashraj | NULL | Math | 2000 | +------+---------+---------+----------+--------------------+ 2 rows in set (0.00 sec)
3. NOT LIKE '%X%':任意の位置に「X」を含む値を除外
文字列中のどこかに「X」を含む値以外をすべて検索します。
実行例
mysql> Select * from Student Where Name NOT LIKE '%h%'; +------+--------+---------+-----------+--------------------+ | Id | Name | Address | Subject | year_of_Admission | +------+--------+---------+-----------+--------------------+ | 1 | Gaurav | Delhi | Computers | 2001 | | 2 | Aarav | Mumbai | History | 2010 | | 20 | Gaurav | Jaipur | Computers | 2017 | +------+--------+---------+-----------+--------------------+ 3 rows in set (0.00 sec)
4. NOT LIKE 'X%X':「X」で始まり「X」で終わる値を除外
先頭が「X」で始まり、末尾が「X」で終わる値以外をすべて検索します。
実行例
mysql> Select * from Student Where Name NOT LIKE 'a%v'; +------+---------+---------+-----------+--------------------+ | Id | Name | Address | Subject | year_of_Admission | +------+---------+---------+-----------+--------------------+ | 1 | Gaurav | Delhi | Computers | 2001 | | 15 | Harshit | Delhi | Commerce | 2009 | | 20 | Gaurav | Jaipur | Computers | 2017 | | 21 | Yashraj | NULL | Math | 2000 | +------+---------+---------+-----------+--------------------+ 4 rows in set (0.00 sec)
_(アンダースコア)ワイルドカード
「_」は、任意の1文字と完全に一致するワイルドカードです。NOT LIKE演算子で「_」を使用する際の基本構文は次のとおりです。
SELECT文...WHERE column_name NOT LIKE 'X_'
ここで「X」は任意の開始パターンを表し、「_」がその直後のちょうど1文字に一致します。
「_」は単独でも、「%」との組み合わせでも使用できます。以下に代表的な使用例を示します。
1. NOT LIKE 'X_':「X」の直後に1文字だけ続く値を除外
「X」で始まり、その後にちょうど1文字が続く値以外を検索します。
実行例
mysql> Select * from Student Where Year_of_Admission NOT LIKE '200_'; +------+--------+---------+-----------+--------------------+ | Id | Name | Address | Subject | year_of_admission | +------+--------+---------+-----------+--------------------+ | 2 | Aarav | Mumbai | History | 2010 | | 20 | Gaurav | Jaipur | Computers | 2017 | +------+--------+---------+-----------+--------------------+ 2 rows in set (0.00 sec)
2. NOT LIKE '_X':「X」の直前に1文字だけある値を除外
「X」で終わり、その直前にちょうど1文字がある値以外を検索します。
実行例
mysql> Select * from Student Where Year_of_Admission NOT LIKE '_017'; +------+---------+---------+-----------+--------------------+ | Id | Name | Address | Subject | year_of_admission | +------+---------+---------+-----------+--------------------+ | 1 | Gaurav | Delhi | Computers | 2001 | | 2 | Aarav | Mumbai | History | 2010 | | 15 | Harshit | Delhi | Commerce | 2009 | | 21 | Yashraj | NULL | Math | 2000 | +------+---------+---------+-----------+--------------------+ 4 rows in set (0.00 sec)
3. NOT LIKE '_X%':「%」との組み合わせで2文字目が「X」の値を除外
「_」と「%」を組み合わせた例です。2番目の位置に「X」がある値以外を検索します。
実行例
mysql> Select * from Student Where Name NOT LIKE '_a%'; Empty set (0.00 sec)
4. NOT LIKE 'X_%_%':「%」との組み合わせで特定長以上の値を除外
「_」と「%」を組み合わせた例です。「X」で始まり、全体の長さが3文字以上である値以外を検索します。
実行例
mysql> Select * from Student Where Name NOT LIKE 'g_%_%'; +------+---------+---------+----------+--------------------+ | Id | Name | Address | Subject | year_of_Admission | +------+---------+---------+----------+--------------------+ | 2 | Aarav | Mumbai | History | 2010 | | 15 | Harshit | Delhi | Commerce | 2009 | | 21 | Yashraj | NULL | Math | 2000 | +------+---------+---------+----------+--------------------+ 3 rows in set (0.00 sec)
まとめ
NOT LIKE演算子では、「%」で任意の0文字以上の文字列、「_」で任意の1文字を表現でき、両者を組み合わせることで「前方一致の除外」「後方一致の除外」「部分一致の除外」「文字数指定の除外」など、多彩な絞り込み条件を構築できます。データの除外検索が必要な場面で、ぜひ活用してみてください。
-
MySQLの引用符の使い方を解説!バッククォートとシングルクォートの違い
MySQLでは、主に「バッククォート(`)」と「シングルクォート()」という2種類の引用符を使い分けます。それぞれ役割が異なり、バッククォートはテーブル名やカラム名(識別子)を囲むために使用し、シングルクォートは文字列などの値を囲むために使用します。バッククォートとシングルクォートの基本的な違いバッククォート(`):テーブル名・カラム名など、データベース内のオブジェクト名を囲むのに使います。予約語や特殊文字を含む名前を安全に扱いたい場合に特に有効です。シングルクォート():INSERT文やWHERE句などで指定する文字列の値を囲むのに使います。それでは、実際の例を見ていきましょう。まずは動作確
-
MySQLで指定したセットに含まれないすべてのレコードを取得する方法
MySQLのNOT IN()関数とはMySQLである値のセット(配列)に含まれないレコードだけを抽出したい場合には、NOT IN() 関数を使用します。WHERE句と組み合わせることで、指定したリスト外のデータを簡単に絞り込むことができます。ここでは、実際にサンプルテーブルを作成し、NOT IN() を使ったレコードの取得方法を順番に見ていきましょう。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable718 ( Id int,