mysql 四表链接查询_MySql_Day4—去重distinct—连接查询(内、外连接、多张表连接)...

本文详细介绍了SQL中的连接查询,包括内连接与外连接的概念及应用,通过实例展示了等值连接、非等值连接以及自连接的用法,并解释了如何进行多表连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.distinct关键字去除重复记录——distinct只能出现在所有字段的最前面

select distinct job from emp;

4a0fcd42b8741cbd256ae66c8d7b3d93.png

select distinct deptno,job from emp;

222daa9d61ebadb1face116fdb3236cf.png

统计岗位的数量?

select count(distinct job) from emp;

4215d60d84e1732dc58045d7375590d6.png

2.连接查询

2.1.连接查询的分类

SQL92:一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员

SQL92语法:

……

A,B

where

……

SQL99:比较新的语法

SQL99语法:

……

A

join

B

on

连接条件

where

……

0c1d044369c92bc4c0402c70b0c4adef.png

区分内外连接:

——>join前,有无left、right。

内外连接的区别:

外连接:在2张表匹配不上时,会填充NULL

内连接:在2张表匹配不上时,就不显示了

关于表的别名:

select e.ename,d.dname from emp e,dept d;

表的别名有什么好处?

1、执行效率高。

2、可读性好。

2.2.内连接之等值连接

找出每个员工,显示员工名和部门名——emp与dept表联动

SQL99语法:select e.ename ,  d.dname from emp e join dept d on e.deptno=d.deptno;

8332d32b2e1c009fa0de3e72c7290c59.png

SQL92语法:select e.ename ,  d.dname from emp e join dept d where e.deptno=d.deptno;

776000b306fc859afdcb669d79c35992.png

2.3.内连接之非等值连接

特点是:连接条件中的关系是非等量关系。

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

select e.ename,e.sal,s.grade from emp e join salgrade s on (e.sal>=s.losal and e.sal<=hisal);

或 select e.ename,e.sal,s.grade from emp e join salgrade s on (e.sal between  s.losal and hisal);

0c3257d497a1439398316297766fec7b.png

2.4.自连接——必须借用“别名”

特点是:一张表看做两张表。自己连接自己。

找出每个员工的上级领导,要求显示员工名和对应的领导名。

select a.ename as '员工',b.ename as '领导' from emp a (inner可以省略) join emp b on a.mgr=b.empno;

1778b92db0d5868807de83aed32a595a.png

2.5.外连接——分主、副表

外连接最重要的特点是:主表的数据无条件的全部查询出来。

找出每个员工的上级领导,要求显示员工名和对应的领导名。

select a.ename as '员工',b.ename as '领导' from emp a left (outer可以省略) join emp b on a.mgr=b.empno;

f1cadb3028476209bb6b5b5368bba450.png

找出哪个部门没有员工?

select d.* from emp e right join dept d on e.deptno=d.deptno where e.empno is null;

20201006200838579.png#pic_center

2.6.——3张表的连接

A先和B连接,再和C连接

....

A

join

B

join

C

on

...

找出每一个员工的部门名称、工资等级、以及上级领导。

select

e.ename,d.dname,s.grade,e2.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 e2

on

e.mgr=e2.empno;                 //匹配领导名

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDU3OTQx,size_16,color_FFFFFF,t_70#pic_center

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值