不同类型的联结

内部联结:

SELECT vend_name,prod_name,prod_price

FROM Vendors INNER JOIN Products

ON Vendors.vend_id=Products.vend_id;

ON子句给出联结条件

自联结:

SELECT c1.cust_id,c1.cust_name,c1.cust_contact

FROM Customers AS c1,Customers AS c2

WHERE c1.cust_name=c2.cust_name

AND c2.cust_contact = 'Jim Jones';

此查询中需要的两个表实际上是相同的表,因此对Customers使用了表别名。Customers的第一次出现为别名C1,第二次出现为别名C2。WHERE 首先联结两个表,然后按第二个表中的cust_contact过滤数据,返回所需的数据。

自然联结:

SELECT C.*, O.order_num,O.order_date,OI.prod_id,OI.quantity FROM Customers AS C,OrderOrderItems AS OI WHERE C.cust_id=O.cust_id AND OI.order_num=O.order_num AND prod_id='RGAN01';

等效于:SELECT C.*, O.order_num,O.order_date,OI.prod_id,OI.quantity FROM Customers AS C NATURAL JOIN Orders AS O NATURAL JOIN OrderItems AS OI WHERE prod_id='RGAN01';

它要求两个关系进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。

自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。即自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。

一个简单的例子,将下列关系R和S进行自然连接:

R:
A B C
a b c
b a d
c d e
d f g

S:
A C D
a c d
d f g
b d g

首先要对两个关系中相同属性组的分量进行相等比较,即比较R.A,R.CS.A , S.C

  • 因 R中AC属性第一行元组分量ac与S中AC属性第一行元组分量ac相等 选取为结果之一
  • 因 R中AC属性第二行元组分量bd与S中AC属性第三行元组分量bd相等 选取为结果之一
  • 因 S中AC属性第三行元组分量df与R中AC属性各个元组分量均不等 不选取
  • 其余属性不重复则保留,且保留的分量为选取的元组同组分量。
  • 因此进行连接得到结果:
    A B C D
    a b c d
    b a d g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值