当前位置: 首页 > 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='方东白');​

列子查询

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

http://www.dtcms.com/a/94203.html

相关文章:

  • 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.
  • 热血传奇2超高清重置UI素材
  • Java并发编程
  • SAP-ABAP:OData 协议深度解析:架构、实践与最佳应用
  • 重学Java基础篇—什么是快速失败(fail-fast)和安全失败(fail-safe)?
  • 【Pandas】pandas Series to_xarray
  • 类和对象—继承(1)
  • 什么是真理?以及人工智能对真理标准的挑战
  • c++ 日志框架G3log介绍及在嵌入式Linux上的移植(交叉编译)
  • 学习笔记—数据结构—二叉树(链式)
  • 网关及路由