MySQL学习笔记——连接

连接

A——table A
B——table B

1 笛卡尔积:

为A,B两个表产生笛卡尔积(
 X={a, b}
 Y={1, 2, 3}
 X Y 的笛卡尔积为{{a, 1}, {a, 2}, {a, 3}, {b, 1}, {b, 2}, {b, 3}}

  个人理解:即将A表所有的属性和B表中的所有属性进行合并,且每条记录都产生一个这样的关系。

select * from A cross join B;  
or
select * from A, B
2 自然连接:

  自然连接只考虑在两个关系模式中都出现的属性上取值相同的元组对。

  且这两个表中属相相同的列中值也必须相同,例如:
表1:

idABC
1ab1c1

表2:

idBCD
1b2c2d

  虽然发现表1和表2中都有相同的属性列id,B,C,但是B,C的属性列中值没有一个相同,所以自然连接是就是empty。
表3:

idABC
1ab1c1
2ab1c
3ab2c2
4ab3c

表4:

idBCD
1bcd
2b1cd
3b2c2d
4bc3d

表3和表4的自然连接的结果是:

select * from table_1 natural join table_2;
idBCAD
1bcad
2b1cad
3b2c2ad

发现,在表3和表4中,相同的属性列有id,B,C三个,但是在表3和表4中,相同属性列id,B,C相同值的列只有
表3.id==2 <==> 表4.id==2
表3.id==3 <==> 表4.id==3
  这样的结果证实了刚才的结论。

为了不必要的相等属性带来的危险,自然连接也支持允许用户支持哪些列来进行自然连接。

select * from A join B using('name')

左右连接

左连接where只影向右表,右连接where只影响左表。

其实左右连接的英文我觉得刚好相反,例如:左连接按中国人的习惯,应该是join left,就是将右表中满足条件的数据加入到左表的完整数据中。不过没办法,人家发明的。所以,我们还有很长的路要走。

select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID

  上面这句查询语句最终造成的结果就是查询tbl1中的所有数据和查询满足where条件的tbl2的数据,并将这两个集合的数据做笛卡尔积然后表示出来。
  同样,右连接的关键字只是将left换成了right,然后where条件里为左表满足的条件,最后将右表的所有数据与左表中满足where条件的数据做笛卡尔积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值