子查询(MySQL)

Posted 桃陉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子查询(MySQL)相关的知识,希望对你有一定的参考价值。

目录


前言

介绍mysql的子查询操作我们选择使用可视化软件Navicat,对应的数据库使用了某公司员工数据库,该数据库包含员工信息表、部门信息表、公司地址信息表、工作职业信息表、员工等级表。

各个表的字段即字段类型如下:

子查询分类

子查询:我们出现在其他语句中的select语句,称为子查询或内查询;而在外部的查询语句称为主查询或外查询。

按结果集的列数不同

∙ \\bullet 标量子查询(结果集只有一行一列),一般搭配单行操作符使用,>、<、=、<=、>=

∙ \\bullet 列子查询(结果集只有一列多行),一般搭配多行操作符使用in、any、some、all

∙ \\bullet 行子查询(结果集有一行多列)

∙ \\bullet 表子查询(一般为多行多列)

按子查询出现的位置

∙ \\bullet 放在select后面:一般为标量子查询

∙ \\bullet 放在from后面:一般为表子查询

∙ \\bullet 放在where或having后面:标量子查询、列子查询、行子查询(用的较少)

∙ \\bullet 放在exists后面(相关子查询):表子查询

下面以子查询出现的位置进行详细的介绍。

放在where或having后面

标量子查询(单行子查询)

放在where之后

示例一:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和 工资(先求出141号员工的job_id,143号员工的salary,然后进行匹配)

示例二:返回公司工资最少的员工的last_name,job_id和salary(先求工资最少的员工工资)

放在having之后

示例三:查询最低工资大于50号部门最低工资的部门id与其最低工资(先求50部门的最低工资)

列子查询(多行子查询)

首先介绍一下列子查询的基本操作符:

操作符含义
IN / NOT IN等于列表中的任意一个
ANY / SOME和子查询返回的某一个值比较
ALL和子查询返回的所有值比较

示例一:返回location_id是1400或1700的部门中的所有员工姓名(先求出location_id是1400或1700的部门id,然后使用部门id去匹配符合的员工姓名)

示例二:返回其他工种中比job_id=”IT_PROG“工种任一工资低的员工的员工号、姓名、job_id和salary

行子查询(结果集一行多列或多行多列)

通常将要查询的多个行结果值放在一个括号中当作一个字段。

示例一:查询员工编号最小并且工资最高的员工信息

放在select后面

一般可以用连接查询来求解该类问题。

示例一:查询每个部门的员工个数

示例二:查询员工号为102的部门名

放在from后面

该种情况下将子查询结果充当一张表,要求必须起别名。

示例一:查询每个部门的平均工资的工资等级

放在exists后面(相关子查询)

exists 语法:exists(完整的查询语句),返回结果为布尔值0或1。

示例一:查询没有员工的部门名

以上是关于子查询(MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL随记 - 子查询

DQL-子查询

mysql 标量子查询和非法子查询

多表查询

MySQL------ 子查询

MySQL------ 子查询