数据库连接查询

数据库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 集合的元素个数。

多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。


五、对左连接、右链接、内连接的画图理解

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日小新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值