mysql中连接查询总结(内连接、外连接、左右连接)

连接查询

当我们需要用多张表联合起来查询数据时,称为连接查询

连接查询可以分为内连接外连接全连接。其中内连接分为等值连接、非等值连接和自连接。外连接分为左外连接(左连接)和右外连接(右连接)。

笛卡尔积:当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数是两张表条数的乘积,这种现象被称为笛卡尔积现象。

通过添加条件限制,可以筛选出我们需要的数据。

一、内连接

在内连接中,两张表是平等的。

dept(部门)表:

请添加图片描述

emp(员工)表:

请添加图片描述

salgrade(薪资)表:

请添加图片描述

1.等值连接

等值连接,即条件是一个等值关系

eg.查询每个员工所在部门名称,显示员工名和部门名。

​ 员工表和部门表连接,通过emp.deptno=dept.deptno

//SQL92语法(不推荐):
mysql> select ename,dname
    -> from dept,emp
    -> where dept.deptno=emp.deptno;

请添加图片描述

//SQL99语法(推荐):
mysql> select ename,dname
    -> from emp 
    -> (inner) join dept
    -> on emp.deptno=dept.deptno;
    
join表示连接两表,on表示条件,inner表示内连接,可省略

请添加图片描述

为什么不推荐使用92:

在我们查找数据时,连接条件后面可能还要再加筛选条件,如(where dept.deptno=emp.deptno and …(条件)😉。

在92语法中,连接条件和筛选条件糅杂在where中,使得结构不清晰。

而99语法中,通过on表示连接条件,后面可以继续加where语句进行筛选:

select…

on emp.deptno=dept.deptno

where …

2.非等值连接

非等值连接,即条件不是一个等值关系

eg.找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级。

mysql> select ename,sal,grade
    -> from emp 
    -> (inner) join salgrade
    -> on emp.sal between losal and hisal;

请添加图片描述

3.自连接

将一张表看成两张表进行查询。

eg.查询员工的上级领导,要求显示员工名和对应的领导名。

mysql> select a.ename empname,b.ename leadername
    -> from emp a join emp b
    -> on a.mgr=b.empno;

请添加图片描述

只有13条记录,没有显示老板KING的领导名,因为为NULL。

二、外连接

在外连接中,两张表有主次关系,一主一次。

1.右(外)连接

eg.

select e.ename,d.dname
from emp e 
right (outer) join dept d
on e.deptno=d.deptno;
//outer可以省略

解释:表示将join关键字右边的这张表看成主表主要是为了将这张表的数据全部查询出来,顺便关联查询左边的表。

2.左(外)连接

将join左边的表看成主表

任何一个右连接都有左连接的写法;

任何一个左连接都有右连接的写法。

eg.查询每个员工的上级领导,要求显示所有员工的名字和领导名(将老板KING的领导名也显示 出来)。

mysql> select a.ename empname,b.ename leadername
    -> 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的连接条件
right join
	d
on
	a和d的连接条件

一条SQL中内连接和外连接可以混合,都可以出现。

eg.找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级。

mysql> select ename,dname,sal,grade
    -> from emp
    -> join dept
    -> on emp.deptno=dept.deptno
    -> join salgrade
    -> on emp.sal between losal and hisal;

请添加图片描述

三、全连接

两张表有主次关系,但两张表都是主表。

全连接实际用的比较少,这里就不展开描述了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值