【SQL学习进阶】从入门到高级应用(八)

在这里插入图片描述

🌈你好呀!我是 山顶风景独好
💕欢迎来到我的博客,很高兴能够在这里和您见面!
💕希望您在这里可以感受到一份轻松愉快的氛围!
💕这里不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

🏠大家订阅本专栏!本专栏旨在为SQL初学者提供一条逐步迈向高级应用的学习之路,带您从零开始,一步一步练习,逐步掌握SQL的精髓,实现技能的提升与飞跃!😊

✨连接查询

✨什么是连接查询

  1. 从一张表中查询数据称为单表查询。
  2. 从两张或更多张表中联合查询数据称为多表查询,又叫做连接查询。
  3. 什么时候需要使用连接查询?
    1. 比如这样的需求:员工表中有员工姓名,部门表中有部门名字,要求查询每个员工所在的部门名字,这个时候就需要连接查询。

✨连接查询的分类

  1. 根据语法出现的年代进行分类:
    1. SQL92(这种语法很少用,可以不用学。)
    2. SQL99(我们主要学习这种语法。)
  2. 根据连接方式的不同进行分类:
    1. 内连接
      1. 等值连接
      2. 非等值连接
      3. 自连接
    2. 外连接
      1. 左外连接(左连接)
      2. 右外连接(右连接)
    3. 全连接

✨笛卡尔积现象

  1. 当两张表进行连接查询时,如果没有任何条件进行过滤,最终的查询结果条数是两张表条数的乘积。为了避免笛卡尔积现象的发生,需要添加条件进行筛选过滤。
  2. 需要注意:添加条件之后,虽然避免了笛卡尔积现象,但是匹配的次数没有减少。
  3. 为了SQL语句的可读性,为了执行效率,建议给表起别名。

✨内连接

✨什么叫内连接

内连接.png
满足条件的记录才会出现在结果集中。

✨内连接之等值连接

连接时,条件为等量关系。
案例:查询每个员工所在的部门名称,要求显示员工名、部门名。

select
	e.ename,d.dname
from
	emp e
inner join
	dept d
on
	e.deptno = d.deptno;

注意:inner可以省略。
image.png

✨内连接之非等值连接

连接时,条件是非等量关系。
案例:查询每个员工的工资等级,要求显示员工名、工资、工资等级。

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

image.png

✨内连接之自连接

连接时,一张表看做两张表,自己和自己进行连接。
案例:找出每个员工的直属领导,要求显示员工名、领导名。

select
	e.ename 员工名, l.ename 领导名
from
	emp e
join
	emp l
on
	e.mgr = l.empno;

image.png
思路:
将emp表当做员工表 e
image.png
将emp表当做领导表 l
image.png
可以发现连接条件是:e.mgr = l.empno(员工的领导编号=领导的员工编号)
注意:KING这个员工没有查询出来。如果想将KING也查询出来,需要使用外连接。

✨外连接

✨什么叫外连接

内连接是满足条件的记录查询出来。也就是两张表的交集。
外连接是除了满足条件的记录查询出来,再将其中一张表的记录全部查询出来,另一张表如果没有与之匹配的记录,自动模拟出NULL与其匹配。
左外连接:
左连接.png
右外连接:
右连接.png

✨外连接之左外连接(左连接)

案例:查询所有部门信息,并且找出每个部门下的员工。

select
  d.*,e.ename
from
  dept d
left outer join
  emp e
on
  d.deptno = e.deptno;

image.png
注意:outer可以省略。
任何一个左连接都可以写作右连接。

✨外连接之右外连接(右连接)

还是上面的案例,可以写作右连接。

select
  d.*,e.ename
from
  emp e
right outer join
  dept d
on
  d.deptno = e.deptno;

image.png
案例:找出所有员工的上级领导,要求显示员工名和领导名。

select 
  e.ename 员工名,l.ename 领导名 
from 
  emp e 
left join 
  emp l 
on
  e.mgr = l.empno;
select 
  e.ename 员工名,l.ename 领导名 
from 
  emp l 
right join 
  emp e 
on
  e.mgr = l.empno;

image.png

✨全连接

什么是全连接?
MySQL不支持full join。oracle数据库支持。
全连接.png
两张表数据全部查询出来,没有匹配的记录,各自为对方模拟出NULL进行匹配。
客户表:t_customer
image.png
订单表:t_order
image.png
案例:查询所有的客户和订单。

select 
 c.*,o.* 
from 
 t_customer c 
full join 
 t_order o 
on 
 c.cid = o.cid;

✨多张表连接

三张表甚至更多张表如何进行表连接
案例:找出每个员工的部门,并且要求显示每个员工的薪资等级。

select 
 e.ename,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;

image.png


✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊

🏠 我在CSDN等你哦!我的主页😍

在这里插入图片描述

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值