数据库day01
(1)外连接:左连接、右链接、全连接
(2)内部连接:凡是A,B表能够匹配上的记录查询出来,无主次之分
(3)交叉连接:一般用来返回连接表的笛卡尔积。
一、 LEFT JOIN(左外连接)和 RIGHT JOIN (右连接) 、FULL JOIN(全连接)
1、创建两个表user和 shop两个表和 数据的插入
(1)表数据插入
-- 插入user表数据
insert into user (username,phone,address)
values
("小明",11122223333,"北京"),
("小红",23243524211,"上海"),
("小军",24654754665,"安徽"),
("小兰",24654000065,"深圳");
!user表结构
(2)shop表数据插入
-- 插入shop表数据
insert into shop (user_id,shop_name,shop_score)
values
(1,"球鞋",200),
(1,"篮球",300),
(2,"乒乓球",20);
!shop表结构
2、对user表和shop表进行左连接查询
-- 左连接查询
select u.id,u.username,u.address,u.phone,s.shop_name,s.shop_score
from user u left join shop s
on u.id=s.user_id;
结果:
3、对两个表进行右链接
-- 右连接查询
select u.id,u.username,u.address,u.phone,s.shop_name,s.shop_score
from user u right join shop s
on u.id=s.user_id;
结果:
4、全连接
select * from user full join shop on user.id=shop.id
注:多表联查的内连接,左连接,右连接,全连接语法一致
总结:
通过两个表的左链接和右连接发现,user表–>shop表(左连接)看出,是以user表为主表,而shop–>user(右链接)看出,则是以shop表为主表,可以从两次结果比较得出右链接和左连接的区别
二、内部链接
-- 全连接
select user.username,shop.id
from user
inner join shop on user.id=shop.id;
结果:
三、交叉连接 略,后期补充
四、笛卡尔积
笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。
例如,有 A 和 B 两个集合,它们的值如下:
A = {1,2}
B = {3,4,5}
集合 A×B 和 B×A 的结果集分别表示为:
A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };
以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。
并且,从以上结果我们可以看出:
两个集合相乘,不满足交换率,即 A×B≠B×A。
A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。
多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。