【その4】sqlserver Selectクエリ(あいまいな条件を変えてみる)

【その4】sqlserver Selectクエリ(あいまいな条件を変えてみる)

この記事を読むのに必要な時間は約 9 分です。

あいまいな条件を色々指定してみようぜ!

はい。今回は、前回の実施したあいまい検索について、「あいまいな感じ」をちょっといろいろ書き換えてみようと思います。あいまい具合の指定は結構柔軟にできますので、覚えておくといろいろ便利です。また、本当に覚える事は少ないので、習得するのに時間もかからないと思います。

前回の内容であいまいな条件を指定する際には

%

を、使ってみました。

パールとかでプログラムをやられている方は、正規表現で、あいまいな条件指定をする際には

* 】を使っていると思います。

このあたりが、一般的なプログラミング言語と異なっていますので、取っつきにくくなる部分かもしれませんね。

と、いう事であいまいな条件を指定するときは % を使いますが、これを使うと

0文字以上の任意の言葉

という意味になります。

ここで曲者なのが 0文字以上 の部分です。

データを見ながらの方が理解しやすいと思うので実際に見てみましょう

/****** SSMS の SelectTopNRows コマンドのスクリプト  ******/
SELECT 
       [漢字都道府県名]
      ,[漢字市区町村名]
      ,[漢字町域名]
  FROM [test001].[dbo].[yubin]

こんな感じになりますね。

 

それではこの例を使って上から 旭ケ丘 を参考に検索を色々かけてみたいと思います。

/****** SSMS の SelectTopNRows コマンドのスクリプト  ******/
SELECT 
       [漢字都道府県名]
      ,[漢字市区町村名]
      ,[漢字町域名]
  FROM [test001].[dbo].[yubin]
  where [漢字町域名] ='旭ケ丘'

以下のようになりました。

油断しましたね。

旭ヶ丘は日本全国で 33件もあるようです。

条件に北海道を追加して再度実施です。

/****** SSMS の SelectTopNRows コマンドのスクリプト  ******/
SELECT 
       [漢字都道府県名]
      ,[漢字市区町村名]
      ,[漢字町域名]
  FROM [test001].[dbo].[yubin]
  where  [漢字都道府県名]='北海道' and
         [漢字町域名] ='旭ケ丘'

はい。こんな感じです。これぐらいなら見やすいのでこのまま行きます。

この状態にして、

いろいろ検索結果を変えていきたいと思います。

[漢字町域名] = ‘旭ケ丘’ を [漢字町域名] like ‘旭ケ丘’ に
/****** SSMS の SelectTopNRows コマンドのスクリプト  ******/
SELECT 
       [漢字都道府県名]
      ,[漢字市区町村名]
      ,[漢字町域名]
  FROM [test001].[dbo].[yubin]
  where  [漢字都道府県名]='北海道' and
         [漢字町域名]  like '旭ケ丘'

 

この通り、元通りの結果で  = で指定していた時と同じですね。

意外とこれは知らない人が多いですが同じ結果を返してくれます。

ここでポイントなのですが、= を like で置き換えた場合、同じ結果を返してくれるのですが、その逆の意味で like を = で置き換えた場合も同じ結果を返してくれる事はSQL文を書いていく上で非常に大事なポイントです。

[speech_bubble type=”drop” subtype=”L1″ icon=”02ukiyoe/tomi_R.png” name=”とみさん”]なにいってんの?[/speech_bubble]
これはデバッグ段階でよくやる事なのですが、別記事で別途おこしたいと思います。

[漢字町域名] = ‘旭ケ丘’ を [漢字町域名] like ‘旭%丘’ に

次は、  の部分を  % に置き換えて実行してみたいと思います。

 

/****** SSMS の SelectTopNRows コマンドのスクリプト  ******/
SELECT 
       [漢字都道府県名]
      ,[漢字市区町村名]
      ,[漢字町域名]
  FROM [test001].[dbo].[yubin]
  where  [漢字都道府県名]='北海道' and
         [漢字町域名] like '旭%丘'

お!なんか表示される場所が増えましたね。

さっきまで存在しなかった以下の列が増えています。

漢字都道府県名 漢字市区町村名 漢字町域名
北海道 二海郡八雲町 旭丘
北海道 檜山郡厚沢部町 旭丘
北海道 余市郡赤井川村 旭丘

ここが今回のポイントである、

0文字以上の任意の言葉
になります。 % を指定した場合、言葉が無い場合も含めて検索してくれることになります。
これは良い時もありますが悪い時もあります。 例えば、
「はっきりは覚えてないんだけど確か一文字何か必ず入っていたんだよな・・・」といった覚え方をしていた場合、今回の例の場合は検索結果が少ないので良いのですが、
大量にでてくるような場合は表示を減らしたいですよね。
そのようなときに使うのが
_ 】※アンダーバー
です。
これを利用すると任意の一文字に置き換えることができます。
それではやってみましょう。
[漢字町域名] = ‘旭ケ丘’ を [漢字町域名] like ‘旭_丘’ に
/****** SSMS の SelectTopNRows コマンドのスクリプト  ******/
SELECT 
       [漢字都道府県名]
      ,[漢字市区町村名]
      ,[漢字町域名]
  FROM [test001].[dbo].[yubin]
  where  [漢字都道府県名]='北海道' and
         [漢字町域名] like '旭_丘'

この通り、初めの % で指定した時と同じ結果になりました。

※これはデータ的に偶々です。

任意の一文字である【 _ 】を指定するとこの様な形なります。

基本的には【 % 】と【 _ 】の2個を利用して、さらにそれらの否定形を利用してあいまい検索は対応できます。

因みに否定形は like の頭に not をつけて

not like 

となります。

今回の結果をよく使うであろうExcelのフィルタ条件で考えてみましょう。

また、

試しによく利用するであろうエクセルのフィルタと比較してみましょう。

指定の値が【 ヤンバルクイナ 】とします。

 Where区の条件 説明
 指定の値に等しい =‘ヤンバルクイナ’ 一番オーソドックスな形
 指定の値に等しくない <>‘ヤンバルクイナ’ ↑の否定形は<>
 指定の値で始まる like ‘ヤンバルクイナ% うしろに %
 指定の値で終わる like%ヤンバルクイナ’ 前に%
 指定の値を含む like%ヤンバルクイナ% %で囲む
 指定の値を含まない not like%ヤンバルクイナ% ↑を否定

如何だったでしょうかこの様な形であいまい検索については実施可能です。

 

本日はここまで!!

 

タイトルとURLをコピーしました