子查询(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)的主要内容,如果未能解决你的问题,请参考以下文章