SQLでは、LIKE 演算子を使用すると、パターンマッチングを実行できます。特定の文字列が指定されたパターンと一致するかどうかを判別します。
パターンには、通常の文字とワイルドカード文字を含めることができます。
ソーステーブル
このページの例では、次の表を使用しています。
SELECT * FROM Owners; 結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
例
LIKEがどのように行われるかを示す例を次に示します。 オペレーターが動作します。
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com'; 結果:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
この例では、LIKEを使用しました %と組み合わせた演算子 メールアドレスが.comで終わる所有者を返すワイルドカード演算子 。
LIKE _などの他の文字列演算子でも使用できます 、[] 、および[^] 。
% ワイルドカード演算子
% ワイルドカード演算子は、0文字以上の任意の文字列に一致します。プレフィックスまたはサフィックスとして使用でき、文字列の途中でも使用できます。
接尾辞としてより一般的に使用される傾向があり、パターンの途中での使用は制限されていますが、次のように、パターンの途中で使用するための有効なユースケースがいくつかあります。
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE 'example@sqldat.com%.com'; 結果:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
この場合、バートのメールアドレスはわかりませんでしたが、example@sqldat.comで始まっていることはわかっていました。 .comで終わりました 。したがって、LIKEを使用することができました %と組み合わせて 残りを入力するワイルドカード演算子。
この手法では、データやSQLステートメントの作成方法によっては、無関係な行が多数返される可能性があることに注意してください。
_ ワイルドカード演算子
アンダースコア(_ )ワイルドカード演算子は任意の1文字に一致します。
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt'; 結果:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
[] ワイルドカード演算子
角かっこ([] )ワイルドカード演算子は、角かっこで囲まれた指定された範囲またはセット内の任意の1文字に一致します。
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%'; 結果:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
ここでは、角かっこワイルドカードとパーセント記号を組み合わせて、名がbで始まるすべての所有者を返します。 またはh 。
角かっこ演算子は、DBMSでは広く採用されていないことに注意してください。 SQL Serverではサポートされていますが、MySQL、Oracle、DB2、およびSQLiteではサポートされていません。 DBMSのドキュメントをチェックして、この演算子がサポートされているかどうかを確認してください。
[^] ワイルドカード演算子
キャレット文字(^ )は、角かっこ演算子を使用するときに結果を無効にするために使用できます。
したがって、前の例を変更して、名がではない所有者のみを返すようにします。 bで始まります またはh 。
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%'; 結果:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
NULL値
パーセンテージ(% )ワイルドカードは何にでも一致します–ほぼ。一致しないものの1つは、NULLです。 。
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%'; 結果:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
このテーブルには、NULLの2つの行があります Emailで 列ですが、ここには返されません。
パフォーマンス
LIKEを含むクエリ 演算子は他のクエリよりも実行速度が大幅に低下する可能性があるため、LIKEの使用はおそらく避けてください。 本当に必要でない限り、演算子。 %を使用する 接頭辞としての演算子は特に遅くなる可能性があります。
それはあなたがそれを全く使うべきではないということではありません。 LIKE 演算子はSQLの不可欠な部分であり、それが唯一のオプション(または少なくとも最良のオプション)になる多くのシナリオに遭遇します。