SQL - LIKE演算子

こんにちは、SQLの熱望者さんたち!今日は、SQLで最も便利で多様な演算子の1つであるLIKE演算子に詳しくなります。あなたの近所の親切なコンピュータサイエンスの先生として、この旅をガイドするのが楽しみです。お気に入りの飲み物を手に取り、リラックスして、一緒にこのSQLの冒険を楽しんでいきましょう!

SQL - LIKE Operator

SQLのLIKE演算子

LIKE演算子は、データ内の特定のパターンを検索する強力なツールです。データベース内で何を探しているかを正確に見つけ出すことができるスーパーインテリジェントな拡大鏡のようなものです。

巨大な図書館で本を探すとしましょう。正確なタイトルを覚えていないかもしれませんが、「冒険」という単語が含まれていることは知っています。LIKE演算子は、その「冒険」を含むすべての本を見つけてくれる図書館の司書のような存在です。

LIKE演算子の基本的な構文は以下の通りです:

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

では、この「パターン」について詳しく見ていきましょう...

什么はワイルドカード?

ワイルドカードは、検索パターン内の1つ以上の文字を表す特殊文字です。トランプのジョーカーのように、他のカードの代わりになることができます。SQLでは、LIKE演算子と組み合わせて柔軟な検索パターンを作成するためにワイルドカードを使用します。

LIKE演算子で使用される主なワイルドカードは以下の2つです:

  1. %(パーセント記号)
  2. _(アンダースコア)

それぞれ詳しく見ていきましょう。

'%' ワイルドカード文字

'%'ワイルドカードは、0文字、1文字、または複数の文字を表します。最も多様なワイルドカードで、パターンの正確な位置や長さがわからない場合に頻繁に使用されます。

以下にいくつかの例を示します:

-- 名前が'A'で始まるすべての顧客を検索
SELECT * FROM Customers WHERE CustomerName LIKE 'A%';

-- 'phone'で終わるすべての製品を検索
SELECT * FROM Products WHERE ProductName LIKE '%phone';

-- 'book'が含まれるすべての注文を検索
SELECT * FROM Orders WHERE ProductName LIKE '%book%';

最初の例では、名前が'A'で始まり、任意の文字数の文字が続くすべての顧客を検索します。これは「Alex」、「Anna」、「A very long name」などの名前に一致します。

2番目の例では、製品名が「phone」で終わるすべての製品を検索します。これは「iPhone」、「Smartphone」、「Headphone」などに一致します。

最後の例では、製品名に「book」が含まれるすべての注文を検索します。これは「Bookshelf」、「Notebook」、「Book of Spells」などに一致します。

'_' ワイルドカード文字

'_'ワイルドカードは、1文字を表します。パターン内の正確に1文字のプレースホルダーとして使用されます。

以下にいくつかの例を示します:

-- 名前が正好4文字のすべての顧客を検索
SELECT * FROM Customers WHERE CustomerName LIKE '____';

-- 'A'で始まり、5文字のすべての製品を検索
SELECT * FROM Products WHERE ProductName LIKE 'A____';

-- 注文IDの2番目の文字が'3'のすべての注文を検索
SELECT * FROM Orders WHERE OrderID LIKE '_3%';

最初の例では、名前が正好4文字のすべての顧客を検索します。これは「John」、「Mary」などの名前に一致しますが、「Alexander」、「Bob」などの名前には一致しません。

2番目の例では、5文字で始まる製品名を検索します。これは「Apple」、「Audio」などの名前に一致しますが、「Apricot」、「A4 paper」などの名前には一致しません。

最後の例では、注文IDの2番目の文字が'3'のすべての注文を検索します。これは「13456」、「23789」などの注文IDに一致します。

LIKE演算子とOR

時々、複数のパターンを一度に検索したいことがあります。その場合、OR演算子が便利です。LIKE演算子と組み合わせて、同じクエリ内で異なるパターンを検索することができます。

以下に例を示します:

-- 名前が'A'で始まるか、's'で終わるすべての顧客を検索
SELECT * FROM Customers
WHERE CustomerName LIKE 'A%' OR CustomerName LIKE '%s';

このクエリは、「Alice」、「Andreas」、「Boris」、「Charles」などの名前を返します。名前が'A'で始まるか、's'で終わる(または両方)に一致します。

NOT演算子とLIKE条件

特定のパターンに一致しないすべてのものを見つめたい場合はどうでしょうか?その場合、NOT演算子を使用します。NOT LIKEを使用して、特定のパターンを検索結果から除外することができます。

以下に例を示します:

-- 'A'で始まらないすべての製品を検索
SELECT * FROM Products
WHERE ProductName NOT LIKE 'A%';

このクエリは、「Banana」、「Cherry」、「Dell Laptop」などの製品を返しますが、「Apple」や「Acer Monitor」などの製品は返しません。

LIKE演算子とエスケープ文字

時々、ワイルドカード文字自体を検索パターンに含めたいことがあります。その場合、エスケープ文字を使用して、これらの特殊文字を通常の文字として扱います。

デフォルトでは、SQLのエスケープ文字はバックスラッシュ(\)です。以下にその使い方を示します:

-- 名前に'%'が含まれる製品を検索
SELECT * FROM Products
WHERE ProductName LIKE '%\%%';

-- 名前に'_'が含まれる製品を検索
SELECT * FROM Products
WHERE ProductName LIKE '%\_%';

最初のクエリは、「50% off」、「100% cotton」などの製品名に一致します。2番目のクエリは、「A_B」、「C_D」などの製品名に一致します。

LIKE演算子の使用例

LIKE演算子は、データベースクエリの多くの実用的な用途があります。以下にいくつかの一般的な用途を表にまとめます:

使用例 例クエリ
部分的な一致を探す SELECT * FROM Customers WHERE CustomerName LIKE '%son%';
特定の形式を検索 SELECT * FROM Orders WHERE OrderID LIKE 'ORD_____';
先頭/末尾文字に基づいてフィルタリング SELECT * FROM Products WHERE ProductName LIKE 'A%' OR ProductName LIKE '%z';
特定のパターンを除外 SELECT * FROM Employees WHERE EmployeeName NOT LIKE 'John%';
特殊文字の検索 SELECT * FROM Products WHERE ProductName LIKE '%\%%';

大多数のSQL実装では、LIKE演算子はデフォルトで大文字/小文字を区別しません。つまり、'a%'は'Apple'、'apple'、および'APPLE'に一致します。

結論として、LIKE演算子はあなたのSQLツールキットの中で非常に強力なツールです。柔軟で強力な文字列一致を提供し、多くのデータ分析および検索タスクに不可欠です。さまざまなワイルドカードと組み合わせを練習して、プロのように使用できるようになるまで頑張ってください!

未来のSQLマスター、お楽しみに!

Credits: Image by storyset