MySQL 查询语句--------------进阶7:子查询
#进阶7:子查询
/*
含义: 出现在其他语句中的select语句,称为子查询或者内查询 外部的查询语句,称为主查询或外查询
分类:
按照子查询出现的位置:
select后面:只支持标量子查询
from后面:支持表子查询
重点:where或者having后面:
标量子查询,重点
列子查询,重点
行子查询(用的较少)
exists后面(相关子查询):表子查询
按照结果集的行列不同:
标量子查询(结果集中只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集为一行多列)
表子查询(结果集为多行多列)
*/ #一、where或者having后面
/*
1.标量子查询(单行子查询)
2.列子查询(一列多行)
特点:
(1)子查询放在小括号内
(2)子查询一般放在条件的右侧
(3)标量子查询,一般搭配着单行操作符使用
>,<,=,!=,<> 列子查询,一般搭配着多行操作符使用
in/not in,any/some等价于min(),all等价max()
*/ #1.标量子查询
#案例1: 谁的工资比Abel高
#(1)先查询Abel的工资
select salary from employees where last_name="Abel";
#(2)再查询员工的工资,且结果大于Abel的工资
select * from employees where salary>(select salary from employees where last_name="Abel"); #案例2:返回job_id与141号员工相同的,salary比143号多的员工姓名、job_id和工资
(1)查询141号员工的job_id
select job_id from employees where employee_id="141";
(2)查找143号的工资
select salary from employees where employee_id="143";
(3)查找salary比143号多的员工姓名、job_id和工资
select last_name,job_id,salary from employees where salary>(select salary from employees where employee_id="143");
(4)返回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"); #2.列子查询
#案例1:返回location_id是1400或者1700的部门中的所有员工姓名
(1)location_id是1400或者1700的部门
select distinct department_id from departments where location_id=1400 or location_id=1700;
(2)(1)部门中的所有员工姓名(使用 in )
select last_name from employees;
select last_name from employees where employees.department_id in (select distinct department_id from departments where location_id=1400 or location_id=1700); #3.行子查询(了解即可) #二、select 后面
#案例1:查询每个部门的员工个数
/*
(1)先对部门去重
select distinct department_id from employees where department_id is not null; (2)再查询每个部门的员工个数
select count(employee_id) from employees
select count(employee_id),department_id from employees group by (select distinct department_id from employees where department_id is not null);
*/ 思路不对 正确解:
select d.*,(select count(*) from employees e where d.department_id=e.department_id) 个数 from departments d; #案例2:查询员工号=102的部门名字
select department_id from employees where employee_id=102;
select department_name from departments where department_id=(select department_id from employees where employee_id=102); #三、from后面 #四、exists后面(相关子查询)
/*
exists是否存在,布尔值
语法:exists(完整的查询语句)
结果:1,或 0
*/
案例1:查询有员工的部门名
select department_name from departments d where exists(select * from employees e where d.department_id=e.department_id);
MySQL 查询语句--------------进阶7:子查询的更多相关文章
- mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长
一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select name fr ...
- MYSQL优化派生表(子查询)在From语句中的
Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...
- MySQL数据库查询操作进阶——多表查询
多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...
- MySQL全面瓦解11:子查询和组合查询
概述 子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询. 先做一下数据准备,这边建立三张表:班级.学生. ...
- mysql加强(6)~子查询简单介绍、子查询分类
一.子查询简单介绍 1.什么是子查询? 一个查询之中嵌套了其他的若干查询. 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果. 子 ...
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Serv ...
- SQLite进阶-14.子查询
目录 子查询 SELECT语句中的子查询 INSERT语句中的子查询 UPDATE语句中的子查询 DELETE语句中的子查询 子查询 子查询或内部查询或嵌套查询是在另一个SQLite查询内嵌入在WHE ...
- T-SQL查询语句(二):嵌套查询
一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询.外层查询称为父查询,主查询.内层查询称为子查询 ...
- Entity Framework查询生成大量的子查询,如何避免?求救
最近使用Entity Framework做一个中型的项目,一张表含有千万条数据,并没有使用很复杂的查询,只是程序上使用了DTO进行帅选数据,且使用了分页,效果很不理想.经过跟踪sql,我发现很多简单的 ...
随机推荐
- 一个阿里云apache服务器配置两个或多个域名forLinux
一个阿里云apache服务器配置两个或多个域名for Linux: 默认已经配置好了阿里云提供的一键web安装,可以参考:http://www.42iot.com/?id=8 修改/alidata/s ...
- hihocoder1954 : 压缩树
传送门 首先求出缩一个点 $x$ 的贡献,就是缩 $x$ 的父亲的贡献加上 $x$ 的子树多减少的深度 假设此时缩父亲的贡献已经考虑过了,那么 $x$ 的子树多减少的深度就是子树的节点数 注意此时要满 ...
- Sublime Text插件安装方法和常用插件
插件安装方法: 1.打开Sublime Text,按下Ctrl+Shift+P调出命令面板 ; 2.输入install 调出 Install Package Control选项并回车; 3.再次按下C ...
- glibc2.22
- windows 安装nodejs 和 npm
1.从nodejs官网下载 安装文件,我安装的版本是 node-v10.15.0-x64.msi ,双击进行安装. 2.安装完成后可以查看相关目录,这里会有一个node_modules目录和node ...
- Java基础学习(4)
Java基础学习(四) String类 特点:创建后不可再修改,看起来的修改只是创建了新的对象 常用方法 StringBuilder类 目的:解决String类频繁创建对象的问题 常用方法 特点:非线 ...
- 关于discuz论坛邮箱配置
Discuz后台可以进行邮件设置,实现网站自动发送邮件给用户的邮箱. 在Discuz邮件设置,经常使用25端口普通发送邮件.为了数据安全,我们也可以使用SSL加密发送,设置方法很简单,只需按照下图进行 ...
- 股票交易 (单调队列优化DP)
股票交易 $ solution: $ 这道题以前就写了,题目很好,但自己没有发题解,来补一篇: 首先,题目出得很有迷惑性,但我们不难想到状态要设天数,和自己手上的股票数目(因为这两个就是充要信息).而 ...
- windows2008R2-AD域控组策略设置与其它相关设置
防火墙设置 修改>计算机配置>策略>安全设置>高级安全windows防火墙>高级安全windows防火墙 修改入站规则 1.组名-文件和打印机共享(SMB-In)> ...
- 对微信小程序的研究2
.json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 JSON 配置 我们可以看到在项目的根目录有 ...