MySQL 9.连接查询

连接查询

​ 又叫多表连接,当查询结果来自多张表时,需要将多张表连接成一个大的数据集汇总显示

select 字段 from 表1 连接类型 join 表2 on 连接条件 where 筛选条件;

分类:

  • 内连接
    • 等值连接
    • 非等值连接
    • 自连接
  • 外连接
    • 左外连接
    • 右外连接
    • 全外连接
  • 交叉连接

笛卡尔集

select * from student inner join class;

没有有效的连接条件

内连接

  • inner join
  • n 表连接需要至少 n-1 个连接条件
  • 多表的顺序没有要求,底层会拿一个表去匹配另一个表

基础语法

等值连接

select s.name,c.name from student s,class c,teacher t where s.classid=c.id,c.id=t.cid;

非等值连接

select s.name,s.score,l.name 
from student s,score_level l 
where s.score between l.min_score and l.max_score
order by s.score desc;

自连接

select s.id,s.name,leader.id,leader.name
from student s,student leader
where s.leader_id=leader.id;
等值连接
  • 多表等值连接的结果为多个表的交集部分
select s.id,s.name,c.name from student s inner join class c where s.classid=c.id;
非等值连接
select l.name,count(*)
from student s
inner join score_level l on s.score between l.min_score and l.max_score
group by l.name
having count(*)>3
order by l.name asc;
自连接
  • 在同一张表内查询多次
select s.id,s.name,leader.id,leader.name
from student s 
inner join student leader on s.leaderid=leader.id;

外连接

  • 外连接的查询结果为主表中的所有记录,当主表中的记录在次表中没有找到匹配,则为 null
  • 外连接查询结果 = 内连接查询结果 + 主表中剩余记录
  • 左外连接左边的是主表,右外连接右边的是主表,两种连接方式交换两个表的顺序,可以实现同样的效果
左外连接
  • left join
select sel_list 
from A
left join B on A.bid=B.id
where B.id is null
右外连接
  • right join
select sel_list
from A
right join B on A.id=B.aid
where A.id is null
全外连接
  • full join
  • 全外连接 = 内连接结果 + 左外连接中主表剩余记录 + 右外连接中主表剩余记录
select sel_list
from A
full join B on A.key=B.key
where A.key is null
and B.key is null

交叉连接

  • cross join
  • join 语法的笛卡尔集
上一篇:mysql执行慢的排查手册


下一篇:利用Fork-Join计算1-100的和 ,会把数组放入数组