Previous: テーブル名のエイリアス(別名)
Up: ジョイン
Previous Page: テーブル名のエイリアス(別名)
テーブル名のエイリアスの機能を用いると一つのテーブルをあたかも二つのテーブルが
あるかのように扱う興味深い検索が可能となる。次の例は、利用者台帳から、同じ電話
番号を持つ利用者のペアを選び出そうとするものである。
まずfrom句に注目して欲しい。二つのテーブルが指定されているが、実際には「利用者
台帳」という一つのテーブルに、firstとsecondという二つの別名が与えられている。
select first.氏名_姓,first.氏名_名,second.氏名_姓,second.氏名_名 from 利用者台帳 first , 利用者台帳 second where first.電話番号 = second.電話番号 and first.利用者コード < second.利用者コード氏名_姓 氏名_名 氏名_姓 氏名_名 -------------- -------------- -------------- -------------- 矢野 昭司 岡崎 俊雄 岩佐 茂 野村 均 岩佐 茂 永野 昭雄 伊藤 篤志 河野 徹 鳥越 宏 奥井 文男 今村 弘美 今村 均 布施 兆賢 馬場 次郎 舟橋 栄一 岩下 香樹
...............................
原嶋 眞敬 松本 雅宏 矢崎 真 田代 道崇 寺一 隆 甲原 博雄
(290 rows affected)
この検索では、二つの条件が置かれているのだが、最初の条件は、普通のジョインで よく見かけるものである。
where first.電話番号 = second.電話番号
それでは、次の条件は、どんな働きをしているのだろうか?
and first.利用者コード < second.利用者コード
この条件部分の働きは、この部分がなければどのような出力が得られるかを考えて 見れば分かる。そうした時、この例では全く同じテーブルのジョインであるから、 例えば、最後の行に現れた「寺一隆」氏と「甲原博雄」氏が同じ電話番号を持つという 出力に対応して、この前後を取り替えた、「甲原博雄」氏と「寺一隆」氏がが同じ電話 番号を持つという出力が現れることになる。また、これらの他にも「甲原博雄」氏と「 甲原博雄」氏が同じ電話番号を持つとか、「寺一隆」氏と「寺一隆」氏が同じ電話番号 を持つといった出力も現れることになる。もちろん、こうした出力は冗長である。 第二番目の条件は、まさに、こうした冗長な出力の抑制をしているのである。 自己自身とのジョインの時には、こうしたやり方を知っておくと便利である。
maruyama@wakhok.ac.jp