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