SQL 速習チュートリアル

SQL ワイルドカード

1. SQL ワイルドカード文字

ワイルドカード文字は、ストリング(文字列)内の一つの文字、あるいは複数の文字を置換するために使用されます。

ワイルドカード文字は、LIKE 演算子と共に使用されます。LIKE 演算子は WHERE 句内で使用され、カラム内の指定されたパターンを検索します。

1.1 例(自分専用の SQL Server を取得)

'a' で始まるすべての顧客をリターンします:

SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';

2. ワイルドカード文字一覧

記号説明
%0文字以上の任意の文字列を表す
_任意の1文字を表す
[ ]括弧内のいずれかの1文字を表す
^括弧内に含まれない任意の文字を表す
-指定した範囲内の任意の1文字を表す
{ }エスケープされた任意の文字を表す

PostgreSQL および MySQL データベースではサポートされていません。
Oracle データベースでのみサポートされています。

3. デモ用データベース

以下は、例題で使用する Customers テーブルの抜粋です。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

4. % ワイルドカードの使用

% ワイルドカードは、0 文字以上の任意の数の文字を表します。

4.1 例

'es' で終わるパターンのすべての顧客をリターンします:

-- 'es' で終わる名前を検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '%es';

4.2 例

'mer' というパターン含んでいるすべての顧客をリターンします:

-- 名前のどこかに 'mer' が含まれるレコードを検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '%mer%';

5. _ ワイルドカードの使用

_ ワイルドカードは、単一の文字を表します。
任意の文字や数字を指定できますが、一つの _ は必ず一文字(一文字のみ)に対応します。

5.1 例

任意の 1 文字で始まり、その後に "ondon" と続く City を持つすべての顧客をリターンします:

-- 1文字 + 'ondon' の都市名を検索 (例: London) --
SELECT * FROM Customers
WHERE City LIKE '_ondon';

5.2 例

"L" で始まり、その後に任意の 3 文字が続き、"on" で終わる City を持つすべての顧客をリターンします:

-- 'L' + 任意3文字 + 'on' の都市名を検索 (例: London) --
SELECT * FROM Customers
WHERE City LIKE 'L___on';

6. [] ワイルドカードの使用

[] ワイルドカードは、括弧内の文字のいずれかが一致した場合に結果をリターンします。

6.1 例

"b"、"s"、または "p" のいずれかで始まるすべての顧客をリターンします:

-- 'b', 's', 'p' のいずれかで始まる名前を検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '[bsp]%';

7. - ワイルドカードの使用

- ワイルドカードを使用すると、[] 内で文字の範囲を指定できます。

7.1 例

"a"、"b"、"c"、"d"、"e"、または "f" で始まるすべての顧客をリターンします:

-- 'a' から 'f' の範囲の文字で始まる名前を検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '[a-f]%';

8. ワイルドカードの組み合わせ

%_ などの任意のワイルドカードを組み合わせて使用することが可能です。

8.1 例

"a" で始まり、長さが少なくとも 3 文字以上あるすべての顧客をリターンします:

-- 'a' で始まり、後ろに最低2文字以上続くパターン --
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';

8.2 例

2 文字目に "r" があるすべての顧客をリターンします:

-- 1文字目不問、2文字目が 'r' のパターン --
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';

9. ワイルドカードを使用しない場合

ワイルドカードが指定されていない場合、そのフレーズと完全に一致する(完全一致)結果のみがリターンされます。

9.1 例

Country が Spain であるすべての顧客をリターンします:

-- 'Spain' と完全に一致する国名を検索 --
SELECT * FROM Customers
WHERE Country LIKE 'Spain';

10. Microsoft Access のワイルドカード

Microsoft Access データベースでは、異なるワイルドカード記号が使用されます。

記号説明
*0文字以上の任意の文字列を表すbl* は bl, black, blue, blob に一致
?任意の1文字を表すh?t は hot, hat, hit に一致
[ ]括弧内のいずれかの1文字を表すh[oa]t は hot, hat に一致(hit は不可)
!括弧内に含まれない任意の文字を表すh[!oa]t は hit に一致(hot, hat は不可)
-指定した範囲内の任意の1文字を表すc[a-b]t は cat, cbt に一致
#任意の1つの数字を表す2#5 は 205, 215, 225...295 に一致