TOP

SQL レッスン 5. ワイルドカードと正規表現 (LIKE)

多くの場合、データをフィルターするには、条件の完全な一致ではなく、近似値によってサンプリングする必要があります。つまり、たとえば、名前が特定のパターン (正規表現) に一致するか、特定の記号や単語が含まれる製品を検索する場合です。このような目的のために、SQL には近似値を検索する演算子 LIKE があります。このようなパターンを構築するには、メタキャラクター (値の一部を検索するための特殊文字)、つまり「パーセント記号」 (%) またはアスタリスク (*)、「アンダースコア」 (_) または「疑問符」 (?) が使用されます。 、「角括弧」([ ])。


1. メタキャラクターのパーセント記号 (%) またはアスタリスク (*)

たとえば、名前に Skis という単語が含まれる製品のみに関連するレコードをテーブルから選択してみましょう。これを行うには、適切なテンプレートを作成します。

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

ご覧のとおり、DBMS は、Product 列に Skis という単語を含む製品が含まれるレコードのみを選択しました。

MS Access は LIKE 演算子の「パーセント記号」 (%) をサポートしていないため、この例ではアスタリスク (*) メタキャラクタを使用します。

2. メタキャラクターのアンダースコア (_) または疑問符 (?)

アンダースコアまたは疑問符は、単語内の 1 文字を置き換えるのに使用されます。 Bikes という単語のすべての母音を「疑問符」 (?) に置き換えて、結果を見てみましょう。

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
MS Access は LIKE 演算子の「アンダースコア」 (_) をサポートしていないため、「疑問符」 (?) メタキャラクターを使用しました。

3. メタキャラクター角括弧 ([ ])

角括弧メタ文字 ([ ]) は、検索対象の文字セットを同時に指定するために使用されます。

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

上の例では、City フィールドで都市名が文字 T または N で始まるレコードを選択しました。

角括弧メタキャラクタ ([ ]) は、MySQL 方言ではサポートされていません。

また、この場合、その逆のことを行う別のメタキャラクターを使用することもできます。正規表現に感嘆符 (!) を追加しましょう。これは、「等しくない」 (MS Access の場合) または電源記号 (^) (他の DBMS の場合) を意味します。

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

つまり、作成した最後のクエリは次のように読み取られます。Sumproduct テーブルからすべての列を選択し、City フィールド内の都市の名前が文字 T または N で始まらないレコードのみを選択します。 「角括弧」メタキャラクター内の文字セットは、テキスト内の 1 つの位置にのみ対応します。

すでに知っている NOT 演算子を使用しても同様の結果が得られますが、感嘆符 (!) を使用するとレコードが短くなります。