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:
id | A | B | C |
---|---|---|---|
1 | a | b1 | c1 |
表2:
id | B | C | D |
---|---|---|---|
1 | b2 | c2 | d |
虽然发现表1和表2中都有相同的属性列id,B,C,但是B,C的属性列中值没有一个相同,所以自然连接是就是empty。
表3:
id | A | B | C |
---|---|---|---|
1 | a | b1 | c1 |
2 | a | b1 | c |
3 | a | b2 | c2 |
4 | a | b3 | c |
表4:
id | B | C | D |
---|---|---|---|
1 | b | c | d |
2 | b1 | c | d |
3 | b2 | c2 | d |
4 | b | c3 | d |
表3和表4的自然连接的结果是:
select * from table_1 natural join table_2;
id | B | C | A | D |
---|---|---|---|---|
1 | b | c | a | d |
2 | b1 | c | a | d |
3 | b2 | c2 | a | d |
发现,在表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条件的数据做笛卡尔积。
上一篇: mysql 外键操作
下一篇: MySQL外键&外键约束