Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

2

Partager

Télécharger pour lire hors ligne

NULLとの戦い RDBMS実装編

Télécharger pour lire hors ligne

2015-10-08(木)に行われた理論から学ぶデータベース実装入門Nightで行ったLightning Talkのスライドです。

Livres associés

Gratuit avec un essai de 30 jours de Scribd

Tout voir

NULLとの戦い RDBMS実装編

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

    Sep. 22, 2017
  • jimicompot

    Nov. 11, 2015

2015-10-08(木)に行われた理論から学ぶデータベース実装入門Nightで行ったLightning Talkのスライドです。

Vues

Nombre de vues

2 748

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

474

Actions

Téléchargements

2

Partages

0

Commentaires

0

Mentions J'aime

2

×