mysql like tutorial with syntax
このチュートリアルでは、MySQLLIKE演算子を使用したパターンマッチングについて説明します。
パターンマッチングは、Java / C#/ Pythonなどのほとんどすべてのプログラミング言語で重要な機能であり、特定の文字列入力に対するパターンマッチングに正規表現の使用を主に活用しています。
MySQLは、LIKEと呼ばれる使いやすい演算子を提供します。これは、文字列値を指定されたパターンと照合するために使用でき、大量のデータのクエリに役立ちます。
学習内容:
MySQL LIKE
構文:
LIKE演算子は、SELECTクエリのWHERE句とともに使用されます。
単純なクエリでは、構文は次のようになります。
SELECT {column_names} (*) FROM {table_name} WHERE {column_with_string_value} LIKE {match_pattern}
この構文のさまざまなコンポーネントは、次のように説明されています。
- {column_names}: これらは、SELECTクエリの出力として表示される列名です。これらの値は、すべての列または個々の列のコンマ区切りの名前を選択するための*にすることができます。
- {table_name}: これは、クエリを実行する必要があるテーブルの名前です。
- {column_with_string_value}: これは、指定されたパターンに対して値を実行する必要がある列です。比較は、文字列に変換できる列で行われることに注意してください。
- {match_pattern}: これは、列の値を比較する必要がある一致式です。一致パターンのサンプルは次のようになります– ‘ SM% ’。これは、SMで始まるすべての列値に一致します。 例: SMART、SMELL、SMOKEなど。
このクエリと同様に、LIKEは単なる比較演算子であり、列値の比較が可能な場合はどこでも使用できるため、LIKE演算子はJOINSなどの複雑なクエリでも使用できます。
注意: LIKEと同様に、否定されたバリアントである「NOTLIKE」を使用することもできます。したがって、この場合、一致する結果を返す代わりに、「NOT LIKE」演算子を使用したクエリは、一致しない結果を返します。
MySQLの一致パターン
LIKE演算子は、2種類のパターンと併用できます。これらは以下の表に記載されています。
パターン | |
---|---|
%(パーセンテージ) | 任意の数の文字に一致します(文字がまったくない場合を含む) |
_(アンダースコア) | 単一の文字に一致します |
次に、両方のパターンを使用したいくつかの例を示します。
%一致パターン
%patternは、配置の前後に0個以上の文字を一致させる場合に使用されます。
例えば: 従業員名を持つ列の文字列「it」を照合する場合。 Amit、Anchit、Arpit、Nikita、Smithなどのような名前があるとします。すべての名前に「it」サブストリングがあることがわかります。しかし、それらの位置付けは異なります。
列名が 名前 テーブル名は student_names。
次のサンプルデータ作成スクリプトを使用して、データベースにデータを入力します。
CREATE TABLE student_names (name VARCHAR(100)); INSERT INTO student_names VALUES('Amit'),('Ankit'),('Smith'),('Nikita'),('Mohit');
%一致パターンを使用する方法を見てみましょう。
SELECT * FROM student_names WHERE name LIKE '%it%'
出力:
名前 |
---|
アミット |
アンキット |
スミス |
ニキータ |
モヒット |
つまり、これは、任意の場所に「it」部分文字列を持つ文字列と一致でき、一致の前後に任意の数の文字が存在する可能性があることを意味します。一致するすべての名前が出力として返されることがわかります。
「it」部分文字列で終わる名前だけが一致するようにクエリを書き直します。
SELECT * FROM student_names WHERE name LIKE '%it'
したがって、ここでは、末尾の「%」記号を削除し、最後に「it」文字列を配置しました。このパターンでは、「it」の前に任意の数の文字を使用できますが、文字列は「it」部分文字列で終了する必要があります。
上記のクエリの出力:
名前 |
---|
アミット |
アンキット |
モヒット |
注意: ここで重要なのは、「%」文字を使用して言及されているパターンでは大文字と小文字が区別されないことです。したがって、上記の例では、「%it」の代わりに「%IT」または「%It」を使用できますが、出力は同じままです。
_一致パターン
次に、「_」一致パターンを使用する方法を見てみましょう。 「_」では1文字しか使用できないことがわかっています。
同じテーブル(student_names)から5文字の名前すべてをクエリするとします。
この場合に「_」パターンマッチャーを使用するために、5文字の長さの名前のみに一致するLIKEパターンとともに5つの_(アンダースコア)を指定しました。
SELECT * FROM student_names WHERE name LIKE '_____'
出力:
名前 |
---|
アンキット |
モヒット |
スミス |
別の例を見てみましょう。部分文字列「it」で終わる5文字の名前をすべて検索するとします。
SELECT * FROM student_names WHERE name LIKE '___it'
ここでは、3つの「_」(アンダースコア)と、一致する必要のある実際の部分文字列を使用しました。
出力:
名前 |
---|
アンキット |
モヒット |
スミス |
%と_パターンマッチャーの組み合わせ
このセクションでは、%パターンマッチャーと_パターンマッチャーを一緒に一致させる方法について説明します。
ユニットテスト統合テストシステムテスト
「it」部分文字列を持ち、「it」という単語の後に正確に2文字を含めることができるすべての名前を検索するとします。
SELECT * FROM student_names WHERE name LIKE '%it_'
ここでは、%と_の両方の一致パターンを組み合わせて、完全に一致するものを見つけました。
出力:
名前 |
---|
スミス |
ニキータ |
NOTLIKEを使用する
NOT LIKEは、LIKE演算子が返すものの正確な否定です。つまり、パターン一致式に一致しないすべてのレコード/行を返します。
例: 4文字以外のすべての名前を検索するとします。
SELECT * FROM student_names WHERE name NOT LIKE '____'
出力:
名前 |
---|
アンキット |
スミス |
ニキータ |
モヒット |
上記の出力でわかるように、4文字ではない名前のみが返されます。
エスケープ文字でMySQLLIKEを使用する
ここでは、パターンマッチャーと一緒にESCAPE文字を使用する方法を説明します。
架空の状況で、実際に%文字と_文字を含む名前があり、それらの名前を検索したい場合は、実際に%と_を照合する必要があります。これは、エスケープ文字を使用して実現できます。
注意: エスケープ文字のデフォルト値は「」(円記号)です
%および_文字の名前を含むstudent_namesテーブルにデータを追加します。
INSERT INTO student_names VALUES('Darre%n'),('Julia_Roberts'),('Dane_Sherman%');
以下は、これをよりよく理解するためのいくつかの例です。
#1) %記号が付いているすべての名前を検索します。
SELECT * FROM student_names WHERE name LIKE '%\%%'
出力:
名前 |
---|
ダレ%n |
Dane_Sherman% |
#二) _記号が付いているすべての名前を検索します
SELECT * FROM student_names WHERE name LIKE '%\_%'
出力:
名前 |
---|
Julia_Roberts |
Dane_Sherman% |
上記の両方の例で、%文字と_文字に言及するためにエスケープ文字を使用していることがわかります。つまり、%文字自体を照合するために、%記号の前にエスケープ文字を使用しています。つまり、「%」のようになります。
自分で選択したエスケープ文字を使用する
それでは、前の例を拡張してみましょう。
MySQLでは、パターンマッチング検索の実行中にMySQLが使用する独自のESCAPE文字を指定できます。
エスケープ文字をデフォルト値の「」ではなく「!」に更新してみましょう。
SELECT * FROM student_names WHERE name LIKE '%!_%' ESCAPE '!'
出力:
名前 |
---|
Julia_Roberts |
Dane_Sherman% |
上記の例では、エスケープ文字を「!」にオーバーライドし、同じものをパターンマッチャー「%!_%」で使用しています。ここでは、名前の「_」文字と一致させます。
よくある質問
Q#1)SQLで%%はどういう意味ですか?
回答: 「%%」は具体的には何にも一致しません。 1%の文字を持っているのと同じです。列の値で「%」文字自体を照合する場合は、デフォルト値が「」のエスケープ文字と一緒に使用できます。
「%」文字を含む列値に一致させる場合、パターン一致を「% %%」のように記述できます(中央のパーセンテージ(%)文字の前に余分な円記号があることに注意してください。
Q#2)MySQLのワイルドカードとは何ですか?
回答: MySQL LIKE演算子は、MySQLの2つのワイルドカード文字を使用して、さまざまなパターンマッチング方法を実現します。
これらは:
- % –これは任意の数の文字(ゼロを含む)に一致します
- _ –これは正確に1文字に一致します
Q#3)MySQLでLIKEクエリを作成するにはどうすればよいですか?
回答: LIKEは、SELECTクエリでWHERE句とともに一般的に使用される単純な演算子です。これは、列の値を指定されたパターンと照合するために使用されます。
例: employee_detailsを持つテーブルがあり、そのテーブルに、家番号、通りの名前などを含むaddressという名前の列があるとします。住所として「OxfordLane」として定義された通りを持つすべての従業員を検索します。
LIKE演算子を使用して、このようなクエリを記述できます。
SELECT * FROM employee_details WHERE address LIKE '%Oxford Lane%'
その点に注意してください 文字列パターンは 大文字小文字を区別しません 指定された一致式と照合されている間。
Q#4)LIKE演算子と一緒に別のエスケープ文字を指定するにはどうすればよいですか?
回答: MySQLは、デフォルトのエスケープ文字をオーバーライドするカスタムエスケープ文字を指定する方法を提供します。
クエリを実行するためにエスケープ文字を「!」に変更する例を次に示します。
SELECT * FROM employee_details WHERE address LIKE '%!_%' ESCAPE '!'
上記のクエリでは、エスケープ文字として「!」を指定し、一致式で同じものを使用しました。
Windows10に最適なシステムメンテナンスソフトウェア
Q#5)LIKE演算子を使用して実際の%または_文字を一致させる方法は?
回答: %や_などの文字は特別なワイルドカード文字であり、文字列の一部として実際に一致させる必要がある場合はエスケープする必要があります。
デフォルトのエスケープ文字は「」であり、ワイルドカード文字について言及する直前に使用する必要があります。
「_」文字を特定の列値と照合する場合、一致式を次のように記述できます– お気に入り '%\_%'
結論
このチュートリアルでは、LIKE演算子(または否定されたバージョン、つまりNOT LIKE)を使用するさまざまな方法について学習しました。
また、サポートされているワイルドカード文字(_と%)と、検索/照合する文字列の一部である必要がある場合にそれらをエスケープする方法についても説明しました。
LIKE演算子は、MySQLによって提供される強力な機能であり、通常、大量のデータをクエリするときにレコードをフィルタリングするために使用されます。