SQLのNOT LIKEで実現する文字列の除外検索と応用テクニック

SQLのNOT LIKE句を使った文字列の除外検索について、基本的な使い方から実践的なテクニックまでを解説します。データベース操作で特定パターンを除外したい場合、どのように活用すればよいでしょうか?

SQLのNOT LIKE句による文字列除外の基本と応用

NOT LIKE句の特徴
🔍
パターンマッチング

ワイルドカード(%や_)を使用して柔軟な文字列パターンの除外が可能です

高速な検索

インデックスを活用した効率的なデータ抽出が可能です

📊
データクレンジング

不要なデータを効率的に除外し、必要なデータのみを抽出できます

NOT LIKE句の基本的な構文と使い方

NOT LIKE句は、特定のパターンに一致しないデータを抽出するために使用される重要なSQL構文です。基本的な使い方を見ていきましょう。


SELECT カラム名 
FROM テーブル名 
WHERE カラム名 NOT LIKE パターン

 

具体例として、名前に「田」が含まれていない顧客を検索する場合は以下のようになります:


SELECT * FROM 顧客テーブル 
WHERE 氏名 NOT LIKE '%田%'

ワイルドカードを使用した高度な除外パターン

NOT LIKE句では、以下のワイルドカード文字を使用して柔軟な検索が可能です:

  • %(パーセント):0文字以上の任意の文字列
  • _(アンダースコア):任意の1文字

-- 「sample」で始まらないデータを検索
SELECT * FROM products 
WHERE name NOT LIKE 'sample%'
-- 5文字目が「A」ではないデータを検索
SELECT * FROM products 
WHERE name NOT LIKE '____A%'

複数条件を組み合わせたNOT LIKE検索のテクニック

複数のパターンを除外したい場合は、AND演算子を使用して条件を組み合わせます:


SELECT * FROM users 
WHERE name NOT LIKE '%sample%' 
AND name NOT LIKE '%サンプル%'
AND name NOT LIKE '%test%'

NOT LIKE句のパフォーマンス最適化

大規模なデータベースでNOT LIKE句を使用する際は、以下の点に注意が必要です:

  • 先頭一致('pattern%')の場合はインデックスが活用できます
  • 中間一致('%pattern%')の場合はフルスキャンが発生する可能性があります
  • パターンの複雑さによってはパフォーマンスが低下する可能性があります

 

パフォーマンス改善のためのテクニック:


-- インデックスを活用できる書き方
SELECT * FROM users 
WHERE name NOT LIKE 'A%'
-- パーティショニングを活用した検索
SELECT * FROM users PARTITION(p1) 
WHERE name NOT LIKE '%test%'

NOT LIKE句とNULL値の関係性について

NOT LIKE句を使用する際は、NULL値の扱いに注意が必要です。NULL値は「不明な値」として扱われ、NOT LIKE句での比較結果もNULLとなります。


-- NULL値を考慮した検索
SELECT * FROM users 
WHERE name NOT LIKE '%test%' 
AND name IS NOT NULL

 

以下のような場合の動作の違いを理解しておくことが重要です:

比較方法 NULL値の扱い
NOT LIKE NULL
!= NULL
NOT IN FALSE