当前位置: 首页 > news >正文

MySQL学习日志--多表查询篇

内连接

 

图示

内连接就表示相交的部分,可以用显式内连接,隐式内连接

直接看案例

案例

A 查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)
表结构:emp,dept
连接条件:emp.dept_id= dept.id

隐式内连接

​select e.name,d.name from emp e,dept d where e.dept_id=d.id;​

显式内连接

​select e.name,d.name from emp e join dept d on e.dept_id=d.id;​

注意:

一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。

外连接

图示

外连接分为两种,分别是:左外连接 和 右外连接。

左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。

右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。

但右外连接可以转为左外连接

案例

A 查询emp表的所有数据,和对应的部门信息
由于需求中提到,要查询emp的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。
表结构:emp,dept
连接条件:emp.dept_id=dept.id

左外连接

​select e.*,d.name from emp e left join dept d on e.dept_id=d.id;​

B. 查询dept表的所有数据, 和对应的员工信息(右外连接)

右外连接

​select d.*​,e.​* from emp e right join dept d on e.dept_id=d.id;​

一般掌握左外连接即可,毕竟左右外连接可以相互转换。

自连接

自连接查询

自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。

而对于自连接查询,可以是内连接查询,也可以是外连接查询。

思想:将一张表看成两张表

案例

A. 查询员工 及其 所属领导的名字
表结构: emp

基础查询:

​select a.name,b.name from emp a,emp b where a.managerid=b.id;​

B. 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导, 也需要查询出来

也就是说要查询所有的员工,此时可以用到左连接

​select a.name '员工',b.name '领导' from emp a left join emp b on a.managerid=b.id;​

在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段。

联合查询

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

案例

A. 将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来.

​select * from emp where salary<500 union all select * from emp where age>50;​

子查询

SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

格式:

​SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );​

子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。

标量子查询

案例

A. 查询 "销售部" 的所有员工信息

完成这个需求时,我们可以将需求分解为两步:

①先查询销售部的id

②根据销售部id查询员工

​select * from emp where dept_id=(select id from dept where name='销售部');​

B. 查询在 "方东白" 入职之后的员工信息

①查询方东白的入职日期

②查询在该日期入职之后的员工

​select * from emp where entrydate>(select entrydate from emp where name='方东白');​

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

相关文章:

  • NDK CMake工程中引入其他C++三方库
  • 视频格式转换:畅享多平台无缝视频体验
  • 31天Python入门——第16天:模块与库详解
  • StarRocks语句解析json字符串的方法
  • 还刷刷刷刷刷
  • 洛谷1044栈C语言
  • 2025Java面试TOP1000问:源码级解答+避坑指南+性能优化
  • [C++][STL]unordered_set类和unordered_map类
  • 【MySQL】从零开始:掌握MySQL数据库的核心概念(五)
  • columns实现瀑布流布局
  • ⑦(ACG-网络配置)
  • 06 单目标定-去畸变
  • React Native与原生Android数据传递
  • 【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落
  • 学习《JS数据结构与算法》
  • 同步整流和异步整流区别及其各优点
  • vm虚拟机 Ubuntu ping失败情况解决方法
  • Python的迭代器(Iterator)介绍以及实现多次使用
  • SVTAV1热点函数-svt_ext_all_sad_calculation_8x8_16x16_avx2
  • pip 安装某个包之后,Jupyter Lab仍旧显示包冲突;例如:Numba needs NumPy 2.1 or less. Got NumPy 2.2.
  • 东莞公司建设网站制作/网站优化包括哪些
  • 可以做视频的网站/百度联系电话多少
  • 网站开发与设计培训/电商网站制作
  • 怎样在网站模板上做修改/沈阳百度seo关键词排名优化软件
  • 怎么理解网站开发/免费网站做seo
  • 网站怎么做微信支付宝支付/百度竞价推广培训