SQLアタマアカデミー
第4回 行か列か,それが問題だ~スカラサブクエリの使い方 (4)スカラサブクエリとNULL
スカラサブクエリとNULL~外部結合との同値性
これは昔からよく知られているスカラサブクエリの応用方法ですが,
これを練習するのにうってつけの例題が,
図13 サンプルのテーブル
Personnel
emp_ | name |
---|---|
001 | 葛西 |
002 | 石川 |
003 | 三田 |
004 | 後藤 |
Phones
emp_ | phone_ | phone_ |
---|---|---|
001 | hom | 044-945-4199 |
001 | fax | 044-945-4200 |
002 | hom | 03-5589-1234 |
003 | fax | 087-296-9999 |
Personnelは人事用の社員マスタ。Phonesは,
さて,
図14 求める結果
Personnel
emp_ | name | hom_ | fax_ |
---|---|---|---|
001 | 葛西 | 044-945-4199 | 044-945-4200 |
002 | 石川 | 044-945-4199 | 044-945-4200 |
003 | 三田 | 087-296-9999 | |
004 | 後藤 |
スカラサブクエリで外部結合を表現する場合,
キーポイントは,
リスト9 外部結合しつつ,
最初のhom_
スカラサブクエリは,
ちなみに,
おわりに
最後に,
スカラサブクエリというのは… 少し妙な表現かもしれませんが,
しかし,
スカラサブクエリについてのもうひとつの注意点は,
今回の例だと,
このように,
演習問題
参考資料
- Joe Celko著
『SQLパズル 第2版』 (翔泳社, 2007, ISBN:978-4-7981-1413-2) - スカラサブクエリを使った行列変換は
「パズル14 電話とFAX」。演習問題の答えも載っていますが, まずは自分で考えてみてください。スカラサブクエリの応用問題としては, 「パズル16 主任とアシスタント」 「パズル43 卒業」 などもおもしろいものです。 - ミック著
『達人に学ぶ SQL徹底指南書』 (翔泳社, 2008, ISBN:978-4-7981-1516-0) - 「1-5 外部結合の使い方」
では, 行列変換を行うための方法を複数紹介しています。実は, スカラサブクエリ以外にも同じことを実現する方法はあります。また, GROUP BYを使ったときの 「存在の階層」 の理論的背景について詳しく知りたい方は, 「1-8 EXISTS述語の使い方」 および 「2-10 SQLにおける存在の階層」 を参照してください。
バックナンバー
SQLアタマアカデミー
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (5)集合指向と手続き型
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (4)OLAP関数と集約関数を組み合わせる
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (3)OLAP専用関数
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (2)OLAP関数の基本構文
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (1)OLAP関数とは何か
- 第10回 結合大全 (5)非等値結合
- 第10回 結合大全 (4)自己結合
- 第10回 結合大全 (3)外部結合
- 第10回 結合大全 (2)内部結合
- 第10回 結合大全 (1)クロス結合