mysql子查询:标量子查询,行子查询,列子查询
子查询
- 子查询或内查询
- 分类
- 按结果集的行列数不同
- 按子查询出现的位置
- where或having后
- 标量子查询
- 列子查询(多行子查询)
- 行子查询
- 放在select后:仅仅支持标量子查询
- 放在from后
- exists后:相关子查询
- 例题:
子查询或内查询
含义:出现在其他语句中的select 语句
外部的查询语句:成为主查询或外查询
分类
按结果集的行列数不同
分类 | 含义 |
---|---|
标量子查询 | 结果及只有一行一列 |
列子查询 | 结果及只有一列多行 |
行子查询 | 结果集有一行多列或多行多列 |
表子查询 | 结果集一般为多行多列 |
按子查询出现的位置
出现位置 | 支持类型 |
---|---|
select后 | 仅支持标量子查询 |
from后 | 表子查询 |
where或having后 | 标量子查询(单行)、列子查询(多行)、行子查询 |
exists | 表子查询 |
where或having后
特点:
- 子查询放在小括号内
- 子查询一般放在条件的右侧
- 标量子查询:一般搭配着单行操作符使用
< > >= <= = <> - 列子查询:一般搭配多行操作符使用
in,any/some,all
标量子查询
例1:查询工资比Abel高的员工
SELECT last_name,salary
FROM employees
WHERE salary>(
SELECT salary
FROM employees
WHERE last_name=‘Abel’
);
例2:返回job_id与141号员工相比,salary比143号员工多的员工姓名,job_id和工资
SELECT last_name,job_id,salary
FROM employees
WHERE job_id=(
SELECT job_id
FROM employees
WHERE employee_id=141
)
AND salary>(
SELECT salary
FROM employees
WHERE employee_id=143
);
列子查询(多行子查询)
多行操作符 | 含义 |
---|---|
in/not in | 等于列表中的任意一个 |
any/some | 和子查询返回的某一个值比较 |
all | 和子查询返回的所有值比较 |
例如:#返回其他部门中比job_id为’it-prog‘部门任意工资低的员工的员工号、姓名、job_id以及salary
SELECT employee_id ,last_name,job_id,salary
FROM employees
WHERE salary<ANY(
SELECT salary
FROM employees
WHERE job_id=‘IT_PROG’
)
AND job_id <> ‘IT_PROG’;
行子查询
该方法有局限性,需要两种的运算法相同才能结合
SELECT *
FROM employees
WHERE (employee_id,salary)=(
SELECT MIN(employee_id),MAX(salary)
FROM employees
);
放在select后:仅仅支持标量子查询
放在from后
将子查询充当一张表,必须起别名
exists后:相关子查询
语法:
exists(完整的查询语句)
结果:1或0
例如:查询没有女朋友的男神信息
方法1:采用exists
SELECT boys.*
FROM boys
WHERE NOT EXISTS(
SELECT *
FROM boys,beauty
WHERE boys.id
=beauty.boyfriend_id
);
方法2:采用in
SELECT boys.*
FROM boys
WHERE boys.id
NOT IN(
SELECT beauty.boyfriend_id
FROM beauty
) ;
例题:
#1.查询和zlotkey相同部门的员工姓名和工资
SELECT last_name,salary
FROM employees
WHEREdepartment_id
=(
SELECTdepartment_id
FROM employees
WHERE last_name=‘Zlotkey’
);
#2.查询工资比公司平均工资高的员工的员工号,姓名和工资
SELECT employee_id,last_name,salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
#3. 查询各部门中工资比本部门平均工资高的员工的员工号,姓名和工资
SELECT employee_id,last_name,salary,平均工资
FROM employees e
INNER JOIN(
SELECT AVG(salary) 平均工资,department_id
FROM employees
GROUP BY department_id
) avg_sal
ON e.department_id
=avg_sal.department_id
WHERE salary> 平均工资
;
#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
SELECT employee_id,last_name
FROM employees
WHERE department_id IN(
SELECT department_id
FROM employees
WHERE last_name LIKE ‘%u%’
);
#5.查询在部门location_id为1700的部门工作的员工的员工号
SELECT employee_id,department_id
FROM employees
WHERE department_id IN (
SELECTdepartment_id
FROMdepartments
WHERE location_id=1700
);
#6.查询管理者是King的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE manager_id IN (
SELECT employee_id
FROM employees
WHERE last_name=‘K_ing’
);
7.查询工资最高的员工姓名,按要求first_name和last_name显示为一列,列名为姓名
SELECT CONCAT(last_name,first_name) 姓名,employee_id
FROM employees
WHERE salary= (
SELECT MAX(salary)
FROM employees
);
“一个能够升起月亮的身体,必然驮住了无数次的日落”
小徐加油!
昨天失眠了无误
-----2021.2.2
mysql子查询:标量子查询,行子查询,列子查询相关推荐
- Oracle 多行、多列子查询
本文使用到的是oracle数据库scott方案所带的表,scott是oracle数据库自带的方案,使用前请确保其解锁 一.多行子查询 多行子查询子查询是嵌入在其他Sql语句中的select语句,Ora ...
- 查询客户时,提示“查询已超出200行,请限制查询“
查询客户时,提示"查询已超出200行,请限制查询" 在EBS中,我们查询客户时如果输入的参数较少,系统会提示"查询已超出200行,请限制查询".如下图: 更新配 ...
- 单行子查询返回多个行_sql多表查询练习,习题总结
组函数(聚合函数):组函数操作行集,给出每组的结果.组函数不象单行函数,组函数对行的集合进行操作,对每组给出一个结果.这些集合可能是整个表或者是表分成的组. 组函数和单行函数的区别: 单行函数对查询到 ...
- 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)
三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...
- mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程
MysqL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MysqL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如 ...
- 嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏
文章目录 1.需求分析与问题解决 2.单行子查询 3.多行子查询 4.相关子查询 5.抛一个思考题 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入.SQL 中 ...
- 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)
子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...
- mysql select 子查询_SELECT中常用的子查询操作
MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...
- 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询
文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...
最新文章
- GPIO代码使用流程(伪代码部分示例)
- python程序官方网站-IO编程
- Redis集群的搭建(具体步骤)
- 大数据项目中的QA需要迎接新的挑战
- 全球100款大数据工具汇总(前50款)
- 基于epoll+threadpool的webServer分析与实现
- xml层级工具_.NET的类型层次查看工具,ClassHierarchyViewer,0.3.0.1
- spring cloud 实战项目搭建
- Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf 、 Mongodb 实践(六)
- 【转】Retrofit
- Sql Server 指定列的乘积
- git+coding.net记录篇
- 少儿编程孩子的学习路线
- excel绘制直方图
- java数据库同步_Java数据同步
- python软件长什么样子图片_使用Python把多个图片拼接成为长图
- 自然语言处理(NLP):08 TextCNN在短文本分类应用介绍
- 装逼软件推荐(持续)
- 8个经典智能电子锁方案精选合辑
- win10系统如何把U盘刷成FAT格式?
热门文章
- Java开发岗位面试题归类---怎么好好的准备面试,也算是发展学习方向
- 尚硅谷设计模式学习(1)---[设计模式七大原则]
- python要英语基础吗_python学习需要英语基础吗?你真的想多了
- Au 效果器详解:单频段压缩器
- 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计
- 计算机总评等级怎么弄,excel总评等级怎么做?
- Apache Flink之架构概述和环境(章节一)
- matlab计算macd_[转载]4.K线图以及常用技术指标的Matlab实现-基于Matlab的量化投资...
- react 前端实现打印发票/图片
- bootstrap(手风琴、图片轮换和固定定位)