left join on多表关联_MySQL-关联查询

MySQL-关联查询
SQL数据分析 1周前
MySQL
关联查询
前面,我们介绍的都是单表查询(就是只从一张表中获取数据),而实际应用的时候,我们都会同时查询多张表,这里,我们就介绍下,多表关联查询的使用。
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据

164dd55547d2960a65717c712f17700e.png

前置知识
主键(Primary Key):可以唯一确定一条记录的字段,比如学生表中的学生ID,生活中我们的身份证号
外键(Foreign Key):指向另一张表的主键,比如学生表中的班级ID,班级ID是班级表中的主键,但在学生表中是外键
主键和外键可以在建表的时候指定,他可以在数据库层面,控制你的数据的完整性、一致性。
测试数据参考:http://yuguiyang.github.io/2017/09/09/mysql-handbook-01/inner join
inner join 可以简写为 join,结果集是两张表中 都存在的记录,是一个交集,详情参考上面的图片。
比如:在学生表中,有一个班级ID,我们想根据班级ID,在班级表中找到班级信息
select
*
from
t_student a
-- 要关联查询的表
join
t_class b
-- 使用什么字段去关联这两张表
on
a.c_id = b.c_id
;

29c346cdab956b451f79cb7ecd625cd3.png

left join
左关联,以左边的表为主表,不管外键在右表中是否存在,左表的数据都会存在。
比如学生表中,有这样一条记录,他的班级ID是904,但是班级表中并没有904的班级信息,
所以,使用join的话是查不到这条记录的
-- 2. left join
-- 学生表为主表,包含所有学生信息
select
*
from
t_student a
left join
t_class b
on
a.c_id = b.c_id
;

76531ab2b06f23e4c46a3b37ce903f2f.png

right join
右关联,和做关联类似,但已右表为主表
-- 3. right join
-- 班级表为主表,不管改班级是否有学生信息
select
*
from
t_student a
right join
t_class b
on
a.c_id = b.c_id
;

a690aba099619b021acd4c136a3da354.png

full outer join
全关联,mysql没有full join 语法,我们可以通过使用union来实现
select
*
from
t_student a
left join
t_class b
on
a.c_id = b.c_id
UNION
select
*
from
t_student a
right join
t_class b
on
a.c_id = b.c_id
;

21a991de02597842dc61e856220f3342.png

cross join
cross join 是对2个表做笛卡尔积
select *from t_class a
cross join t_class b
order by a.c_id,b.c_id
;小结
关联查询的话,我们主要是选择好主表,然后找好表与表之间的关联关系,注意多对多、一对多的这种关系,验证号结果数据就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值