情報処理基礎論 a 第 12 回 (関係データベースと SQL ) 「同じ属性が複数の表に含まれている場合」 講義ノート目次

表を指定してから属性を指定する必要がある。

表.属性

として、区別する。

複数の条件をつける場合

AND あるいは OR を使う。

WHERE 条件 1 AND 条件 2 [OR 条件 3] ...

同じ属性を含むものを取り出したい場合

表が複数あり、そのなかの属性が重なっているとする。表の名前を A, B とする。 どちらの表にも含まれているものだけ取り出す場合は、

A 表.属性 = B 表.属性

を条件に加える。また、その属性を表示したい場合は、 どちらか片方だけの属性を取り出すと指定しなければならないため、

SELECT A 表.属性 WHERE 条件 AND A 表.属性 = B 表.属性

などとする必要がある。

GROUP BY ... HAVING の HAVING は、1 つの属性を指定するが、 同じフィールドがあるときの重複を防ぐために、GROUP BY で属性を設定する。

たとえば、名前と、町と、話が分かっているときに、 全ての表に掲載されている情報を、その部分だけ引き出したいときには、

itdb=> SELECT character.name, town.town, story.abstract FROM character, town, story WHERE character.name=town.name AND story.program=character.program;
      name      |     town     |        abstract        
----------------+--------------+------------------------
 ジャック       | 未来世界     | 未来世界の侍の話
 ブラサム       | タウンズビル | 3 人の女の子たちのお話
 バブルス       | タウンズビル | 3 人の女の子たちのお話
 バタカップ     | タウンズビル | 3 人の女の子たちのお話
 モジョジョジョ | タウンズビル | 3 人の女の子たちのお話
(5 rows)


A=B, C=A ならば A=B=C であることに注意せよ。