Where句や
Joinの接続条件などで、
Nullが入る可能性のあるカラムを扱うことがあります。
基本的なことだけど戸惑ってしまったので忘備録。
Nullはヒットしないでほしい時。
通常コレ。普通にイコールで結びます。
Null≠Nullなので、Nullは無視される形で出力されます。
select *
from TBL
join TBL2
on TBL1.Name = TBL2.Name
;
片方がNullだけど出力してほしい時。
単にouter joinするだけです。
select *
from TBL
left outer join TBL2
on TBL1.Name = TBL2.Name
;
NullはNullと結合してほしい時
Null ≠ Null なのでNVLを使います。
ここではブランク' 'に置き換えてますが、
何か適切な初期値とかあればそれに置き換えて下さい。
--Oracle
select *
from TBL
join TBL2
on NVL(TBL1.NAME,' ') = NVL(TBL2.NAME,' ')
;
MySQLだとifnull()が同じように使えるようです。
--MySQL
select *
from TBL
join TBL2
on ifnull(TBL1.NAME,' ') = ifnull(TBL2.NAME,' ')
;
Nullが入っている時は絞り込まないで出してほしいとき
検索フォームとかで「日付」を指定しなければ
すべての日付で検索してほしい、みたいな時ですね。
ORを使います。
NULLのときは無条件で出力、OR
NULLじゃなければ絞り込んで出力する、という意味です。
select *
from TBL
join TBL2
on (TBL1.NAME IS NULL OR TBL1.NAME = TBL2.NAME)
;
※パフォーマンス的にいいのかわかりません。
とりあえず初心者向けで、パフォ度外視で
シンプルに書く方法のまとめでした。
詳しい方からのツッコミは大歓迎です。
くぎゅう10