考虑这两个表:
乐队(band_id,band_name)
Band_Member (band_id,member_name,dob,country,sex)
任务:使用theta Join列出乐队成员的姓名和他们所在乐队的名称。
嗯,我的疑问是在连接后只显示band_name和member_name的步骤。
这就是我完成theta-join的方式:σBand_Member.band_id= Band.band_id(Band_member x Band)
这就是我认为仅显示band_name和member_name:
的方式Πband_name,member_name(σBand_Member.band_id= Band.band_id(Band_member x Band))
修改 我也想知道以这些方式编写相同任务的笛卡尔积是否正确:
Πband_name,member_name(Band_Member x Band)
或
Πmember_name(Band_Member)xΠband_name(Band_Member)
答案 0 :(得分:1)
Π band_name, member_name (σ Band_Member.band_id = Band.band_id (Band_member × Band))
显示每个乐队的所有乐队成员。
Π band_name, member_name (Band_Member x Band)
这列出了每个乐队的任何乐队的每个成员,无论他们是否是该乐队的成员。这与你之前的表达方式不同。
Π member_name (Band_Member) x Π band_name (Band_Member)
这是一个关系,包含每个拥有成员的乐队的任何乐队的每个成员(这是所有乐队的子集)。这与你之前的任何一个表达都不一样。
执行第一个表达式的惯用方法是自然连接:
Π band_name, member_name (Band_Member ⋈ Band)
与你的第一个表达式相同。