LoginSignup
4
2

More than 5 years have passed since last update.

(初心者向け)OracleでNullがからむ時のまとめ

Posted at

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2