リレーショナル代数
本(著者名、署名、出版社名、価格)
出版社(出版社名。所在都道府県名)
の2つのリレーションから成り立つデータベースがあるとして
東京の出版社から本をだしている著者を求めるのにリレーショナル代数を用いると
((本*出版社)[出版社.所在都道府県='東京'])[本.著者名]ですよね?
ここで疑問に思うのですが出版社.所在都道府県って表現は所在都道府県でもよいのではないのでしょうか?データベースの中に唯一の属性ですし・・・
これは形式的なものなんでしょうか?
>上記のような回答ですと自然結合は直積と同じものではないでしょうか?
わたしは同じだと思っているのですが?
自然結合は忘れてください。
(本*出版社 )は直積演算のことです。
したがって結果は合っていると思います。
ANo.2のものです。
変な書き方をしたので。
>自然結合は、共通属性について'='を行うから
自然結合は名前の通り、自然に条件無しでの結合です。
リレーショナル代数を扱いやすくしたものがSQLです。
実際のデータをイメージすれば、わかりやすいと思います。
本
著者名、署名、出版社名、価格
あ aa 集英社 100
い ii 講談社 100
う uu 秋田書店 100
出版社
出版社名。所在都道府県名
集英社 東京
講談社 東京
秋田書店 秋田
リレーショナル代数:
(本*出版社)
SQL:select * from 本,出版社
結果:
あ aa 集英社 100 集英社 東京
あ aa 集英社 100 講談社 東京
あ aa 集英社 100 秋田書店 秋田
い ii 講談社 100 集英社 東京
い ii 講談社 100 講談社 東京
い ii 講談社 100 秋田書店 秋田
う uu 秋田書店 100 集英社 東京
う uu 秋田書店 100 講談社 東京
う uu 秋田書店 100 秋田書店 秋田
リレーショナル代数:
((本*出版社)[出版社.所在都道府県='東京'])
SQL:select * from 本,出版社 where 出版社.所在都道府県='東京'
結果:
あ aa 集英社 100 集英社 東京
あ aa 集英社 100 講談社 東京
い ii 講談社 100 集英社 東京
い ii 講談社 100 講談社 東京
リレーショナル代数:
((本*出版社)[出版社.所在都道府県名θ'東京',出版社.出版社名θ本.出版社名])[本.著者名]
SQL:select 本.著者名 from 本,出版社 where 出版社.所在都道府県='東京' AND 出版社.出版社名 = 本.出版社名
結果:
aa
ii
この回答への補足
リレーショナル代数:
(本*出版社)
SQL:select * from 本,出版社
結果:
あ aa 集英社 100 集英社 東京
あ aa 集英社 100 講談社 東京
あ aa 集英社 100 秋田書店 秋田
い ii 講談社 100 集英社 東京
い ii 講談社 100 講談社 東京
い ii 講談社 100 秋田書店 秋田
う uu 秋田書店 100 集英社 東京
う uu 秋田書店 100 講談社 東京
う uu 秋田書店 100 秋田書店 秋田
上記のような回答ですと自然結合は直積と同じものではないでしょうか?
>自然結合は、共通属性について'='を行うから
自然結合は名前の通り、自然に条件無しでの結合です。
リレーショナル代数を扱いやすくしたものがSQLです。
実際のデータをイメージすれば、わかりやすいと思います。
本
著者名、署名、出版社名、価格
あ aa 集英社 100
い ii 講談社 100
う uu 秋田書店 100
出版社
出版社名。所在都道府県名
集英社 東京
講談社 東京
秋田書店 秋田
リレーショナル代数:
(本*出版社)
SQL:select * from 本,出版社
結果:
あ aa 集英社 100 集英社 東京
あ aa 集英社 100 講談社 東京
あ aa 集英社 100 秋田書店 秋田
い ii 講談社 100 集英社 東京
い ii 講談社 100 講談社 東京
い ii 講談社 100 秋田書店 秋田
う uu 秋田書店 100 集英社 東京
う uu 秋田書店 100 講談社 東京
う uu 秋田書店 100 秋田書店 秋田
リレーショナル代数:
((本*出版社)[出版社.所在都道府県='東京'])
SQL:select * from 本,出版社 where 出版社.所在都道府県='東京'
結果:
あ aa 集英社 100 集英社 東京
あ aa 集英社 100 講談社 東京
い ii 講談社 100 集英社 東京
い ii 講談社 100 講談社 東京
リレーショナル代数:
((本*出版社)[出版社.所在都道府県='東京',出版社.出版社名 = 本.出版社名])
SQL:select 本.著者名 from 本,出版社 where 出版社.所在都道府県='東京'
AND 出版社.出版社名 = 本.出版社名
結果:
あ aa 集英社 100 集英社 東京
い ii 講談社 100 集英社 東京
リレーショナル代数:
((本*出版社)[出版社.所在都道府県名θ'東京',出版社.出版社名θ本.出版社名])[本.著者名]
SQL:select 本.著者名 from 本,出版社 where 出版社.所在都道府県='東京' AND 出版社.出版社名 = 本.出版社名
結果:
aa
ii
この回答への補足
>自然結合は名前の通り、自然に条件無しでの結合です。
>リレーショナル代数を扱いやすくしたものがSQLです。
>実際のデータをイメージすれば、わかりやすいと思います。
では直積とどう違うのですか?
ステップ(本*出版社)においては直積となんら変わらないと思うのですが・・・・
>((本*出版社)[出版社.所在都道府県='東京'])[本.著者名]ですよね?
間違っています。
出版社.出版社名 = 本.出版社名が抜けています。
積は自然結合なのでこの条件を入れないと1つの本にN件の東京の出版社がひついた形になります。
所在都道府県では無く所在都道府県名です。
((本*出版社)[出版社.所在都道府県名θ'東京',出版社.出版社名θ本.出版社名])[本.著者名]
>これは形式的なものなんでしょうか?
その通リです。
この回答への補足
自然結合は、共通属性について'='を行うから
出版社.出版社名 = 本.出版社名は不要ではないのでしょうか?
- 最新から表示
- |
- 回答順に表示












