简述MySql中联表查询及(on和where条件的区别)

1、多表连接查询

可分为:

  • 内连接(inner join)
  • 左外连接(left join)
  • 又外连接(right join)
  • 交叉连接(cross join)- 笛卡尔积
  • 全连接(full join)

先假设有两张表tab1和tab2:

  • tab1
idage
110
220
330
  • tab2
agename
10张三
20李四
30王五

1.1 内连接

#内连接(取两表交集)
SELECT * FROM tab1 a inner join tab2 b on a.age = b.age
#等同于
SELECT * FROM tab1 a ,tab2 b where  a.age = b.age

在这里插入图片描述
在这里插入图片描述

1.2 左外连接

#左外连接
SELECT * FROM tab1 a left join tab2 b on a.age = b.age and b.name = '张三' order by id

在这里插入图片描述
在这里插入图片描述

1.3 右外连接

#右外连接
SELECT * FROM tab1 a right join tab2 b on a.age = b.age and b.name = '张三' order by b.age

在这里插入图片描述
在这里插入图片描述

1.4 交叉连接

#交叉连接(笛卡尔积)
SELECT * FROM tab1 a cross join tab2 b

在这里插入图片描述

各增一行数据

  • tab1
idage
110
220
330
440
  • tab2
agename
10张三
20李四
30王五
60马六

1.5 全连接

  • mysql中
#全连接
SELECT * FROM tab1 a left join tab2 b on a.age = b.age
union
SELECT * FROM tab1 a right join tab2 b on a.age = b.age
  • oracle中
#全连接
selcet * from tab1 a full join tab2 b on a.age = b.age

在这里插入图片描述
在这里插入图片描述

1.6 外连接总结

可以理解为就是以哪个表为基准表,在外连接查询结果中,基础表中的数据即使没有外键关联,也会被查询出来

--((+)加在右表,表示以左表为基准表left join)
--((+)加在左表,表示以右表为基准表right join)
select empno,ename,dname from emp2 e,dept d where e.deptno=d.deptno(+);

1.7 在使用外连接查询时,on和where条件的区别

  • sql1
select * from tab1 a left join tab2 b on (a.age = b.age) where b.name = '张三'

在这里插入图片描述

  • sql2
select * from tab1 a left join tab2 b on (a.age = b.age and b.name = '张三')

在这里插入图片描述

sql1的执行过程

在这里插入图片描述
在这里插入图片描述

sql2的执行过程

在这里插入图片描述

1.8 on和where区别总结

  • on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
  • where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

总之:在外连接查询中

  • ON可以理解为是在两张表中进行条件筛选(即,在生成临时中间表时候
    进行条件筛选),满足条件的则展示左右表拼接的数据记录,不满足条件
    的,则优先展示左表中的数据,右表中不满足条件的字段为NULL。
  • WHERE则可以理解为是在一张表上进行条件过滤(即,将生成的临时表看作一张表)

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一宿君

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

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

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

打赏作者

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

抵扣说明:

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

余额充值