Linux_MySQL 复合查询练习(多表查询、自连接、子查询、合并查询)

本文介绍了MySQL中的查询技巧,包括单表查询、多表联查、自连接查询以及子查询的用法。通过具体实例展示了如何获取员工年薪、查找部门平均工资、显示相同岗位雇员等信息。此外,还探讨了union和union all在合并查询中的应用,帮助读者掌握更复杂的数据库查询技能。

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

1.单表查询练习

MySQL基本查询回顾

这里主要学习MySQL复合查询。

练习:

1. 获取员工表中所有人的年薪,并排序。

年薪=月薪*12+年底奖金。
在这里插入图片描述
在这里插入图片描述

2.查询平均工资小于2000的部门和这个部门的平均工资

在这里插入图片描述
3.显示每种岗位上的雇员总数和平均工资
在这里插入图片描述
在这里插入图片描述

2.多表查询

在这里插入图片描述

两张表的组合形式:

  1. 从一张表中取出一条记录,和第二张表的所有记录进行组合
  2. 如果不加过滤条件,得到的结果称为笛卡尔积。

一般来讲,后续的多表查询都应该是笛卡尔积形成的新表的子集,后续只需要添加筛选条件.

1.显示部门号为10的部门地点,员工名,工资

其中部门地点和员工信息不在一张表上。

注意:两张表只有在部门号一致的条件下才有效。
在这里插入图片描述

2.查询员工的工资,姓名以及工资级别

工资级别和员工的信息不是一张表。
在这里插入图片描述

在这里插入图片描述

3.自连接

自连接是指在同一张表上进行查询

一张表也可以和自己笛卡尔积
在这里插入图片描述

1.显示员工A(FORD)的上级的编号与姓名

在这里插入图片描述
方法一:子查询
在这里插入图片描述
方法二:自连接

先找所有领导:
在这里插入图片描述
之后找特定名字所对应的领导:
在这里插入图片描述

4.子查询

单行子查询: 返回一行记录的子查询

1.显示SMITH同部门的所有员工:
在这里插入图片描述

多行子查询(in all any)

多行子查询:返回多行记录的子查询

  • in关键字:
    1.查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的
    在这里插入图片描述
    首先要将10号部门的工作岗位无重复的筛选出来。
    在这里插入图片描述

查询所有员工只要工作岗位在上图列表中即那满足条件。
在这里插入图片描述

  • all关键字:
    2.显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
    先查询30号部门的所有工资,并去重
    在这里插入图片描述
    在这里插入图片描述

  • any关键字:
    3.显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
    在这里插入图片描述
    只要有一个符合就行。这就算any的意思。只要比30号部门最低工资高就行。

多列子查询

多列子查询:查询返回多个列数据的子查询语句

1.查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人
先将SMITH的部门和岗位挑选出来作为筛选条件
在这里插入图片描述
这个条件是多列的,使用()进行比较
在这里插入图片描述

form子句中的子查询

子查询出现在form语句中,是将子查询的结果当临时表来使用。

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

首先先挑出每个部门的平均工资表,与员工表进行笛卡尔积,当两张表的DEPTNO相同时才有意义,之后添加条件:员工的工资大于部门平均工资。
在这里插入图片描述
在这里插入图片描述
注意:在中间子查询需要比较SAL,不要使用format进行格式控制,否则会出错。

子查询可以出现在两个地方:

  • where子句中做筛选条件
  • from字句中构成笛卡尔积

5.合并查询(union union all)

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

1.将工资大于2500或职位是MANAGER的人找出来
在这里插入图片描述
不同列数目的表不能合并。相同列数相同,但是列名不同,查询结果出错无意义。
在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值