前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL:复合查询

MySQL:复合查询

作者头像
小灵蛇
发布2024-12-13 08:39:28
发布2024-12-13 08:39:28
3360
举报
文章被收录于专栏:文章部文章部

此篇博客讲解MySQL中的复合查询。前面一直讲的都是一些基础的查询语句,但是显然是不能满足需求的,所以此篇博客讲解更为复杂的查询语句。

一. 基本查询回顾

对于emp表:


  • 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

  • 按照部门号升序而雇员的工资降序排序

  • 使用年薪进行降序排序

  • 显示工资最高的员工的名字和工作岗位

  • 显示工资高于平均工资的员工信息

  • 显示每个部门的平均工资和最高工资

  • 显示平均工资低于2000的部门号和它的平均工资

  • 显示每种岗位的雇员总数,平均工资

二. 多表查询

表准备:

emp:


dept:


salgrade:


  • 显示雇员名、雇员工资和所在的部门的名字

因为上面的数据来自emp和deptno表,因此要联合查询。

最后结果:

很明显有些数据是多余的,所以加上限制条件:

然后显示雇员名、雇员工资和所在的部门的名字:


  • 显示部门号为10的部门名、员工名和工资

  • 显示各个员工的姓名、工资以及工资级别

三. 自连接

自连接是指在同一张表连接查询。

显示员工ford的上级领导的编号和姓名

  • 子查询

  • 使用多表查询(自连接)

四. 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

4.1 单行子查询

返回一行记录的子查询

  • 显示smith同一部门的员工

4.2 多行查询

返回多行记录的子查询

  • in关键字;查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的

并不是实际存在的表才能做笛卡尔积,通过查询出来的表也能做笛卡尔积:


  • all关键字:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

  • any关键字:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)

4.3 多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句

  • 查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

任何时刻,查询出来的临时结构,本质在逻辑上属于表结构!!!

4.4 在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。

  • 显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

  • 查找每个部门工资最高的人的姓名、工资、部门、最高工资

  • 显示每个部门的信息(部门名,编号,地址)和人员数量
  • 法一:使用多表

对于select要查询的要区分出不同属性的数据,每样属性都需要在group by后面出现,不论属性之间是否是一对一关系


  • 法二:使用子查询

多表查询的指导思想:解决多表问题的本质:想办法将多表转换为单表,所以mysql中,所有select的问题全部都可以转换为单表问题!!!

4.5 合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all

4.5.1 union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

4.5.2 union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

注意的是:要将两个表或起来,两个表的列数必须一样:


总结:

好了,到这里今天的知识就讲完了,大家有错误一点要在评论指出,我怕我一人搁这瞎bb,没人告诉我错误就寄了。

祝大家越来越好,不用关注我(疯狂暗示)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 基本查询回顾
  • 二. 多表查询
  • 三. 自连接
  • 四. 子查询
    • 4.1 单行子查询
    • 4.2 多行查询
    • 4.3 多列子查询
    • 4.4 在from子句中使用子查询
    • 4.5 合并查询
      • 4.5.1 union
      • 4.5.2 union all
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档