HOME»データベーススペシャリスト掲示板»令和3年午後1問3設問2(3)k

データベーススペシャリスト掲示板


[0294] 令和3年午後1問3設問2(3)k

 にゃんちゃんさん(No.1) 
エアコンが備え付けてあればY、なければNを表示するCASE文の穴埋め問題
エアコンの設備コード(A1)だけ抽出したBS1テーブルから、左外部結合で設備コードを紐づけできるかどうかで判定しています。

模範解答は以下のどちらかとなっています。
CASE WHEN BS1.設備コード IS NOT NULL THEN 'Y' ELSE 'N' END AS エアコン
CASE WHEN BS1.設備コード = 'A1' THEN 'Y' ELSE 'N' END AS エアコン
NULLじゃない(もしくはA1)ならエアコンあり、それ以外ならエアコンなしという考え方です。

逆に、以下の回答でもよいのではないでしょうか。
CASE WHEN BS1.設備コード IS NULL THEN 'N' ELSE 'Y' END AS エアコン
NULLだったらエアコンなし、それ以外ならエアコンありという考え方です。

個人的には、IS NULLの方がインデックス使ってくれそうだし
何より文字数がNOTの3文字分少ないし、こっちの方が模範解答っぽい気がするのですが
何故だか公式解答にもテキスト模範解答にも全く触れられておらず
問題文を見落としたのかな?と不安です・・・。
2022.07.26 20:20
GinSanaさん(No.2) 
DB・ブロンズエキスパート
>CASE WHEN BS1.設備コード IS NULL THEN 'N' ELSE 'Y' END AS エアコン
は、模範解答を言い換えているだけだから、あえて書いてないだけな気がします。

>IS NULLの方がインデックス使ってくれそうだし
実装による(たとえば、Oracleはis nullでインデックスを使わない)ので、そこは関係ない気がします
CREATE INDEX – PostgreSQL 10.5文書

NULLS FIRST
NULLを非NULLより前にソートすることを指定します。 これはDESCが指定された場合のデフォルトです。

NULLS LAST
NULLを非NULLより後にソートすることを指定します。 これはDESCが指定されない場合のデフォルトです。
NULLと非NULLの割合に偏りがある場合の少数派の検索は、インデックスが有効に機能する・・・っていうのが、メジャーな考え方なワケですけど、今回はそもそも物件設備でプライマリキー張っているわけだから偏りもなにも100対0じゃねえか、というわけでインデックスが有効もなにもないですね。

techblog.istyle.co.jp/archives/1514
IS NULLはインデックスを使うのか - istyle Tech Blog
2022.07.27 11:28
 にゃんちゃんさん(No.3) 
GinSanaさん
ご回答ありがとうございます!

インデックス関係ないですね…笑
is nullだけ見て、否定形じゃないから製品によってはいけそうと思いましたが
case文の中ですし、いろいろインデックスうんぬんは関係なかったです。
2022.07.27 13:07

【返信投稿用フォーム】

お名前(10文字以内)

顔アイコン


本文(2,000文字以内)

投稿削除用のパスワード(20文字以内)

プレビュー
※宣伝や迷惑行為を防止するため、当サイトとIPAサイト以外のURLを含む文章の投稿は禁止されています。

投稿記事削除用フォーム

投稿No. パスワード 
© 2016-2022 データベーススペシャリストドットコム All Rights Reserved.

Pagetop