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,我发现很多简单的 ...
随机推荐
- Django重点之url别名
django重点之url别名[参数名必须是name,格式是name="XXX] 不论后台路径如何进行修改路径,前台访问的路径不变,永远是alias, 这样方便开发 前台根据 {{ url & ...
- SCAU 2015 GDCPC team_training1
A: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1525 题意:前两段都是废话 , 然后给出一个 p( p(a) ) = p(a) 的公式给你 ...
- ASP.NET MVC @html帮助类
原文:https://www.cnblogs.com/caofangsheng/p/10462494.html HTML Helpers是用来创建HTML标签进而创建HTML控件的.HTML Help ...
- Linux环境下安装Django和Python
1 下载前准备操作:安装相关的依赖库(工具包) yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel ...
- Spark Streaming Transformations
map(func):对DStream中的所有的元素进行func转换生成新的DStream flatMap(func):和map方法类似,先对DStream中的元素进行func运算,然后压平,就是说,如 ...
- Bootstrap真的总是好的吗
原文地址:Bootstrap considered harmful 原文作者:Hidde de Vries 译文出自:neal 译者: Neal 个人主页:http://neal1991.python ...
- Bootstrap框架如何设置导入链接
bootstrap文件划分: 导入规则: 方式一:可以先下载 ----https://v3.bootcss.com/ (1) 注意事项: (2) (3) 注意1:bootstrap中的js文件依赖于j ...
- 2018-11-26-win10-UWP-Controls-by-function
title author date CreateTime categories win10 UWP Controls by function lindexi 2018-11-26 20:0:6 +08 ...
- Linux性能优化从入门到实战:11 内存篇:内存泄漏的发现与定位
用户空间内存包括多个不同的内存段,比如只读段.数据段.堆.栈以及文件映射段等.但会发生内存泄漏的内存段,只有堆和文件映射段中的共享内存. 内存泄漏的危害非常大,这些忘记释放的内存,不仅应用程序 ...
- python笔记(1)--基础知识
一.注释 单行注释 #打印“hello world” print("hello.world!") 另外一种单行注释 print("hello,world!") ...