SQL振り返り【SELECT】

どうも。てちこまです。
気が狂いそうなぐらい久しぶりの投稿です。
引っ越し、就職、コロナと慌ただしい日々もようやく落ち着いてきました。

はじめに

今日はSQLの研修で初めて知ったor忘れてたことをまとめます。
全部やると長いので今回はSELECT関係で。

WHERE句で列別名は使えない

誤り

みたいなのはエラーになるんですね。すっかり忘れてました。

正しい

CASE文

構文1

列名3の値をWHEN句の値と比較して一致すればTHEN句の値を表示。

構文2

※値は例です

列名3の値を範囲ごとに結果を出す場合などに利用。

WHEN句に直接条件式を書けばいいのでこの場合はCASEの横に列名は不要。

LIKE演算子におけるESCAPEの仕様

この場合任意の文字列+_(アンダーバー)が一文字+任意の文字が一文字の文字列を条件に抽出となります。

例)
abcd_1
abcd_3
testtest_4 など

エスケープ文字の直後一文字のワイルドカードのみ通常文字となるので都度エスケープ文字をいれる必要があります。

→ test%3,hogehoge%w など

INNER JOIN (内部結合)と OUTER JOIN(外部結合)の違い

INNER JOINは結合する表にそれぞれ結合相手がいない行は出力しない、
OUTER JOINは存在しない場合も表示。データが存在しない部分はNULLで出力。

INとANYとALLの違い

INはいずれかの値と一致するかどうか。

ANYはいずれかの値を比較して条件にあたれば真。

ALLは戻す値リストを比較して全ての条件を満たせば真。

IN

この場合列名3の値が4,5,6のいずれかである結果が抽出される。

ANY

この場合列名3の値をいずれかの値と比較して真であれば真なので6より小さい値である結果が抽出される。

ALL

この場合列名3の値と全ての値を比較して真である必要があるので4より小さい値である結果が抽出される。

NOT INで副問い合わせ結果にNULLが含まれると...

NULLで比較するとUNKNOWN(評価できない)となるので一行も返却されない。IS NOT NULLやNULL制約で回避。

まとめ

フレームワークばっか使ってORMに頼りきりになっていると忘れてしまいがちですがなんとか覚えていきたいですね。


てちこま

高卒後3年ニート なんとなくPC好きだったのでコン専入学 2020から新米WEBエンジニアになりました

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする