mysql加强(6)~子查询简单介绍、子查询分类
一、子查询简单介绍
1、什么是子查询?
一个查询之中嵌套了其他的若干查询。
- 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果。
- 子查询一般出现在
from和where子句中。
2、子查询语法:
select <select_list>
from 表名
where 条件(s) 操作符
(select <select_list> from 表名);
- 子查询在主查询前执行,然后主查询再使用子查询的结果。
3、子查询例子:
# 查询大于公司平均工资的员工姓名
select ename, sal from emp where sal > (select avg(sal) from emp);
4、子查询经典案例---Oracle的分页查询

5、子查询的使用注意事项:
- 子查询需要用括号括起来
- 将子查询放在比较运算符的右边【增强可读性】
- 对单行子查询使用单行运算符
- 对多行子查询使用多行运算符
二、子查询的分类
1、子查询的分类【根据子查询的结果集来划分】
(1)单行单列子查询:子查询返回一行一列记录,好比就是一个值
返回一条记录---比较运算符(针对一个值的运算符): = > < >= < !=
# 查询大于公司平均工资的员工姓名
select ename, sal from emp where sal > (select avg(sal) from emp);

(2) 多行单列子查询:子查询返回单列多行记录,好比是多个值
返回多条记录---比较运算符(多个值的运算符): in any all
in 相当于 = any
any:与子查询返回的任意一个值做比较; all:与子查询返回的每一个值做比较
# 查询工资等于部门经理的员工信息
select * from emp where sal in (select sal from emp where job = 'manager');
select * from emp where sal = any (select sal from emp where job = 'manager');
# 查询工资大于任意部门经理的员工信息
select * from emp where sal > any (select sal from emp where job = 'manager');
# 查询工资小于任意部门经理的员工信息
select * from emp where sal < any (select sal from emp where job = 'manager');

(3)多行多列子查询:子查询返回多列一行/多行记录,好比是一张表 【其实就是多表连接查询】
一般把查询结果含多个列的当做临时表【
必须给临时表起个别名】,接着在临时表上继续查询或者连接查询;# 查询出每个部门的编号、名称、部门人数、平均工资
select t.deptno, d.dname, t.count_empno, t.avg_sal
from dept d left join
(select e.deptno, count(e.empno) count_empno, avg(e.sal) avg_sal from emp e group by deptno) t
on d.deptno = t.deptno;
2、union/union all
- join 是横向连接,union/union all 是
纵向连接(一般用于作为临时表) - 注意:
- union 内部的select 语句必须是拥有相同数量的列
- 列也必须拥有兼容的数据类型
- 每条select语句中的列的顺序必须相同
- union 结果集的列名总是等于union中第一个select语句的列名
- union操作符选去不同的值,若允许值重复-使用union all 性能更高
语法:
select <select_list> from 表名1
union | union all
select <select_list> from 表名2
全连接--mysql不止全连接,不过可以使用左右连接+union实现
#全连接查询员工的编号、名称、部门名称
select e.deptno,e.ename,d.dname from emp e left join dept d on e.deptno = d.deptno
union
select e.deptno,e.ename,d.dname from emp e right join dept d on e.deptno = d.deptno;
mysql加强(6)~子查询简单介绍、子查询分类的更多相关文章
- [MySQL] 高可用架构MMM简单介绍
一.来源及原理: 众所周知,MySQL自身提供了AB复制(主从复制),然后可以很轻松实现master-master双向复制,同时再为其中一个Master节点搭建一个Slave库. 这样就实现了MySQ ...
- MySQL - 数据查询 - 简单查询
1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...
- (转)简单介绍java Enumeration
简单介绍java Enumeration 分类: java技术备份 java数据结构objectstringclass存储 Enumeration接口 Enumeration接口本身不是一个数据结构 ...
- elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)
一.查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验.主要包括: 拼写检查: 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的A ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- MySql基本查询、连接查询、子查询、正则表达查询解说
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户 ...
- mysql查询操作之单表查询、多表查询、子查询
一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...
- 在MySQL中使用子查询和标量子查询的基本用法
一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...
- Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...
随机推荐
- 【LeetCode】609. Find Duplicate File in System 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- bugku的一道代码审计基础题:eval
首先看到 include "flag.php",第一反应就应该是文件包含 直接先?hello=file:////etc, 然后啥也没 那就再检查一下代码,eval(var_dump ...
- TriggerBN ++
目录 motivation settings results motivation 用两个BN(一个用于干净样本, 一个用于对抗样本), 结果当使用\(\mathrm{BN}_{nat}\)的时候, ...
- css怎么实现雪人
冬天来了,怎么能少的了雪人呢,不管是现实中还是程序员的代码中统统都的安排上,那就一次安排几个雪人兄弟,咱们先看效果图: 有喜欢的就赶紧cv拿走吧!!! 其详细代码如下: 图1 html部分: < ...
- Java语言程序设计复习提纲
这是我在准备Java考试时整理的提纲,如果是通过搜索引擎搜索到这篇博客的师弟师妹,建议还是先参照PPT和课本,这个大纲也不是很准确,自己总结会更有收获,多去理解含义,不要死记硬背,否则遇到概念辨析题 ...
- Java中的构造方法「注意事项」
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法. 语法: public 类名称(参数类型 参数名称){ 方法体 } 注意事项: 构造方法的名称必须和所在的类 ...
- 编写Java程序,使用Set实现不重复添加用户
返回本章节 返回作业目录 需求说明: 在控制台输入用户信息,用户信息包括姓名.性别和年龄,将用户信息保存至User对象中. 将User对象保存至HashSet集合中. 规定如果两个User对象的姓名. ...
- 显示器接口VGA、DVI、HDMI、DP
1.说明 对于显示器接口类型, 常见的接口有VGA.DVI.HDMI.DP这四种, 当然还有其他类型接口, 本文主要介绍上面四种接口, 介绍接口的基本规格参数和外形等, 以及这四种接口之间的联系和区别 ...
- PostgreSQL数据库安装Version10.5
PostgreSQL数据库安装,基于版本10.5安装, 在Linux系统上使用*.gz二进制压缩包手动安装. 操作系统:Red Hat Enterprise Linux Server release ...
- Eclipse+Maven+JDK+tomcat搭建java的开发环境
由于最近有几个同事都在学习java方面的东西,所以我写个博文做下笔记,其中遇到过很多个坑,这里就不多说了 首先,我用的是Eclipse+Maven的组合,用Ecplise是周边java开发的同事用这个 ...