SlideShare a Scribd company logo
1 of 18
Download to read offline
1
NULLとの戦い
RDBMS実装編
理論から学ぶ
データベース実装入門Night LT
@MeijiK
免責事項
• 本プレゼンテーションにおいて示されている
見解は、私自身の見解であって、私の所属す
る会社・団体の見解を必ずしも反映したもの
ではありません。ご了承ください。
2
3
第7章 NULLとの戦い
• 7.1 NULL
– リスト7.3 値にNULLが含まれる場合
– リスト7.4 リスト7.3を正しく書き換えた例
• 7.2 NULL対策
• 7.3 まとめ
SELECT * FROM users WHERE age <>20
SELECT * FROM users WHERE age <>20 OR age IS NULL
4
等価比較
A B=
5
等価比較
A B=
A BIS
6
NULLセーフな比較演算
• 二つの項目を比較する際に、それぞれの項目に
NULLがあるかないによって演算子を使い分けるの
はなかなか面倒なものです。たとえばA と Bを比較
しようとして、BがNULLで、A IS NULLとするのか、
BがNULLでないときにA = Bとするのか、というもの
です。
• 一部のRDBMSにはNULLを含めた比較演算子が
実装されています。たとえばMySQLでは<=>という
独自の演算子にてA, B どちらにNULLが含まれても、
正しく比較することができます。
7
NULLセーフな等価比較(MySQL)
A B<=>
8
SQL標準
• SQL標準ではNULL込みの比較がおこなえる
IS NOT DISTINCT FROMが定められました。
次のように利用します。
• A IS NOT DISTINCT FROM B
• 現時点ではIBM DB2, Firebird, PostgreSQL,
Sybaseで利用できます。
9
NULLセーフな等価比較(SQL標準)
A BIS NOT DISTINCT FROM
10
実装の闇
• 古くからあるRDBMSではNULLの扱いが特
殊な場合があります。
• 具体的には特定のデータ型、比較演算子で
NULLの扱いが違う、というものです。
• 有名なものはOracleとMicrosoft SQL
Server/Sybaseに関するものです。
11
OracleのVARCHAR2型
• Oracleでは可変長文字列型カラム型に
VARCHAR2を利用しその空文字(長さ0の文
字)がNULL扱いされる。
• Oracleで仕事をする人には常識なのですが、
Oracleのみ(もしくはOracle互換をうたうDB
の互換モードのみ)の特別な仕様です。
• SQLの入門テキストのみでこの業界に入った
人や、Oracleへの移行、Oracleからの移行
の場合にはご注意ください。
12
SQL Server/Sybaseの「=NULL」
• MS SQL Server/Sybaseの古いバージョンで
は= NULLの表記で正しく(?) 比較できる。
• 古いバージョンやSET ANSI_NULLSオプ
ションがOFFにできるバージョンでは= NULL
がTRUEやFALSEを返します。
• 最近のデフォルトはANSI_NULLSオプション
がONつまり= NULLはNULLですので、新規
開発では問題がないのですが、過去のバー
ジョンからのバージョンアップや、他のデータ
ベースの移行の際には注意が必要です。
13
リスト7.4の書き換え(MySQL)
• SELECT * FROM users WHERE age <>
20 OR age IS NULL;
• SELECT * FROM users WHERE !(age
<=> 20);
14
リスト7.4の書き換え(SQL標準)
• SELECT * FROM users WHERE age <>
20 OR age IS NULL;
• SELECT * FROM users WHERE age IS
DISTINCT FROM 20;
15
リスト7.4の書き換え(Oracle10以降)
• SELECT * FROM users WHERE age <>
20 OR age IS NULL;
• SELECT * FROM users WHERE
LNNVL(age = 20);
16
宣伝1:読書会
• 7shiさん、 furandon_pigさん主催で隔週水曜
日にゆるゆるとやってます。
– http://riron-db.connpass.com/
– 次回は2015/10/14(水) 20:00より。
• 今回のネタは読書会で話したもの+αです。
– そもそものネタは次の書籍でボツったもの+αで
す。。。。
宣伝2: 書籍情報
• おうちで学べるデータベースのきほん
– まったくの初心者はこちらをどうぞ。
– 増刷出来(パチパチ)
• 入手方法
– じゃんけんで勝つ。
– もしくは、Amazonでポチる w。
• こんな疑問にも答えている(?)
– Read Uncommitted なぜある
17
18
THANK YOU
• ご清聴ありがとうございました。

More Related Content

More from Meiji Kimura (6)

My sql casual12lt
My sql casual12ltMy sql casual12lt
My sql casual12lt
 
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpringオープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
 
MySQLの限界に挑戦する
MySQLの限界に挑戦するMySQLの限界に挑戦する
MySQLの限界に挑戦する
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
 
My sql casual9lt_pub
My sql casual9lt_pubMy sql casual9lt_pub
My sql casual9lt_pub
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法
 

NULLとの戦い RDBMS実装編