MySQL-关联查询
一、inner join
inner join 可以简写为 join,结果集是两张表中 都存在的记录,是一个交集,详情参考上面的图片。
比如:在学生表中,有一个班级ID,我们想根据班级ID,在班级表中找到班级信息
select
*
from
t_student a
-- 要关联查询的表
join
t_class b
-- 使用什么字段去关联这两张表
on
a.c_id = b.c_id
;
*
from
t_student a
-- 要关联查询的表
join
t_class b
-- 使用什么字段去关联这两张表
on
a.c_id = b.c_id
;
二、left join
左关联,以左边的表为主表,不管外键在右表中是否存在,左表的数据都会存在。
比如学生表中,有这样一条记录,他的班级ID是904,但是班级表中并没有904的班级信息,
比如学生表中,有这样一条记录,他的班级ID是904,但是班级表中并没有904的班级信息,
所以,使用join的话是查不到这条记录的
-- 学生表为主表,包含所有学生信息
select
*
from
t_student a
left join
t_class b
on
a.c_id = b.c_id
;
select
*
from
t_student a
left join
t_class b
on
a.c_id = b.c_id
;
三、right join
右关联,和做关联类似,但已右表为主表
-- 班级表为主表,不管改班级是否有学生信息
select
*
from
t_student a
right join
t_class b
on
a.c_id = b.c_id
;
select
*
from
t_student a
right join
t_class b
on
a.c_id = b.c_id
;
四、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
;
*
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
;
五、cross join
cross join 是对2个表做笛卡尔积
select *from t_class a
cross join t_class b
order by a.c_id,b.c_id
cross join t_class b
order by a.c_id,b.c_id
;
关联查询的话,我们主要是选择好主表,然后找好表与表之间的关联关系,注意多对多、一对多的这种关系,验证号结果数据就行了。
赞 (0)