MySQL-连接查询

MySQL-连接查询

什么是连接查询?

从一张表中查询数据成为单表查询,两张及以上的表联合起来查询数据就称为连接查询。

连接查询分类

  • 根据语法年代分类:
    SQL92:1992年出现的语法

缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。

select
	e.ename,d.dname
from
	emp e,dept d
where
	e.deptno = d.deptno;

SQL99:1999年出现的语法(重点)

优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,继续在后面添加where。

select
	e.ename,d.dname
from
	emp e
inner join
	dept d
on
	e.deptno = d.deptno;//条件是一个等量关系,所以被称为等值连接
	//inner:内连接,可省略不写

SQL99的语法:

select
	.....
from
	a
inner join
	b
on
	a和b的连接条件
where
	筛选条件;
	//inner:内连接,可省略不写
  • 根据表连接方式分类:
    1. 外连接:分为左外连接右外连接
    2. 内连接:分为等值连接非等值连接自连接
    3. 全连接(非重点)

内连接之非等值连接

内连接的特点:把完全能够匹配上连接条件的数据查询出来。连接的两张表无主次关系。

  • 案例:找出每个员工的薪资等级,要求显示员工名,薪资,薪资等级
    在这里插入图片描述
    在这里插入图片描述
    如果没有条件限制,两张表任意进行连接,就会产生14*5=70条记录。
    如何避免?加限制条件。
    加限制条件并不会减少匹配次数,只是为了筛选目的数据。
select 
	e.ename,e.sal,s.grade 
from 
	emp e 
inner join 
	salgrade s 
on 
	e.sal between s.losal and s.hisal;//条件不是一个等量关系,称为非等值连接

在这里插入图片描述

内连接之自连接

案例:查询每个员工的上级领导,要求显示员工名和对应的领导
在这里插入图片描述
在这里插入图片描述
技巧:一张表看成两张表
emp a 员工表
emp b 领导表

在员工表里去员工名和对应的领导号,去领导表里取领导名

select 
	a.ename as '员工名',b.ename as '领导名'
from
	emp a
join
	emp b
on
	a.mgr=b.empno;

在这里插入图片描述

以上就是内连接中的自连接,技巧就是一张表看做两张表,取两个别名予以分辨。

外连接(右外连接和左外连接)

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

  • 案例:右外连接
select
	e.ename,d.dname
from
	emp e
right outer join
	dept d
on
	e.deptno = d.deptno;
	//outer可省略,带着可读性更强

right表示将join关键字右边的表看做主表,主要将主表里的数据全部查询出来,捎带着关联查询左边表里的数据,在外连接中,两张表连接产生了主次关系。

在这里插入图片描述

  • 左外连接
select
	e.ename,d.dname
from
	dept d
left outer join
	emp e
on
	e.deptno = d.deptno;

在这里插入图片描述

带有right的是右外连接,又叫右连接
带有left的是左外连接,又叫左连接
任何一个右外连接都有左外连接的写法
任何一个左外连接都有右外连接的写法

  • 思考:外连接查询结果条数一定是大于等于内连接的查询结果条数?
    正确

  • 案例:查询每个员工的上级领导,要求显示所有员工的名字和领导名字
    在这里插入图片描述

select 
	a.ename as '员工名',b.ename as '领导名'
from
	emp a
left join
	emp b
on
	a.mgr=b.empno;

在这里插入图片描述

三张表或者四张表怎么连接

语法:

select
	.....
from
	a
join
	b
on
	a和b的连接条件
join
	c
on
	a和c的连接条件
join
	d
on
	a和d的连接条件

理解:a和b连接以后有个结果再去和c连接,如此再和d连接。
中间内连接和外连接都有可能,可以混合。

  • 案例:找出每个员工的部门名称,同时找出每个员工的工资等级,要求显示员工名,工资,部门名,工资等级。

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

select 
	e.ename,e.sal,d.dname,s.grade 
from 
	emp e 
join 
	dept d 
on 
	e.deptno = d.deptno 
join 
	salgrade s 
on 
	e.sal between s.losal and s.hisal;

在这里插入图片描述

  • 案例:找出每个员工的部门名称,同时找出每个员工的工资等级,还有上级领导,要求显示员工名,领导名,部门名,工资,工资等级。
select 
	e.ename,e.sal,d.dname,s.grade,l.ename 
from 
	emp e 
join 
	dept d 
on 
	e.deptno = d.deptno 
join 
	salgrade s 
on 
	e.sal between s.losal and s.hisal;
left join
	emp l
on
	e.mgr = l.empno;

在这里插入图片描述
总结:根据要求判断在哪里使用内连接或外连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值