本篇主要通过练习来讲解子查询的知识,进入正题之前,先熟悉数据表,表格的数据可以先不用管,主要是熟悉表格的字段名

这里子查询分为三个部分:

  1、where条件子查询

      这个子查询和普通的查询没什么区别,主要是先读懂题目的意思,然后将结果集组装起来

        需求:1.查看职员名称和名字为chang的员工一样的所有员工的id和名字

select id, last_name, title
from s_emp
where title=( # 和chang员工一样的职位
select title
from s_emp
where last_name = "chang"
);

        需求:2.查看员工工资小于平均工资的所有员工的id和名字

select id, last_name, salary
from s_emp
where salary<( # 员工的平均工资
select avg(salary)
from s_emp
);

        需求:3.查看部门与员工名字为Chang的员工所在部门相同,或者与区域为2的部门相同的部门所有员工的id和 名字

select id, last_name, title, dept_id
from s_emp
where dept_id = ( # chang员工所在的部门
select dept_id
from s_emp
where last_name = "chang"
) or dept_id in ( # 区域为2的部门
select dept_id
from s_dept
where region_id=2
);

        需求:4.查看部门平均工资大于32号部门平均工资的部门id

select dept_id,salary
from s_emp
group by dept_id
having avg(salary)>( # 32部门的平均工资
select avg(salary)
from s_emp
where dept_id = 32
);

        需求:5.查看工资大于Smith所在部门平均工资的员工id和姓名

select id, last_name
from s_emp
where salary>( # smith所在的部门的平均工资
select avg(salary)
from s_emp
where dept_id = ( # smith所在的部门
select dept_id
from s_emp
where last_name = "Smith"
)
);

        需求:6.查看薪资高于Chang员工经理薪资的员工信息

select id, last_name, salary
from s_emp
where salary>( #chang员工的经理的工资
select salary
from s_emp
where id=( # chang员工的经理
select manager_id
from s_emp
where last_name = "chang"
)
);

        需求:7.查看薪资高于(Chang员工经理的经理所在区域的)最低工资的员工的信息

select id, last_name, salary
from s_emp
where salary>(
select salary
from s_emp
where dept_id in ( # chang员工的经理的经理所在的部门的所在区域的所有部门
select id
from s_dept
where region_id = ( # chang员工的经理的经理所在的部门的所在区域
select region_id
from s_dept
where id=( # chang员工的经理的经理所在的部门
select dept_id
from s_emp
where id=( # chang员工的经理的经理
select manager_id
from s_emp
where id=( # chang员工的经理
select manager_id
from s_emp
where last_name="chang"
)
)
)
)
) order by salary limit 0,1
);

        需求:8.查看所有客户负责员工的总工资

select sum(salary)
from s_emp
where id in ( # 员工负责的id
select sales_rep_id
from s_customer
);

        需求:9.查看工资大于客户负责员工最高工资的员工信息

select id, last_name
from s_emp
where salary>( # 员工负责的id中工资最高的薪资
select max(salary)
from s_emp
where id in ( # 员工负责的id
select sales_rep_id
from s_customer
)
);

        需求:10.查看客户负责员工中工资大于Chang员工的工资的员工信息

select id, last_name, salary
from s_emp
where id in ( # 员工负责的id
select sales_rep_id
from s_customer
) and salary > ( # 工资大于chang员工的工资
select salary
from s_emp
where last_name="chang"
);

        需求:11.查看部门平均工资大于Chang所在部门平均工资的部门id

select dept_id, avg(salary)
from s_emp
group by dept_id
having avg(salary) > ( # chang员工所在部门的平均工资
select avg(salary)
from s_emp
where dept_id=( # chang员工所在部门
select dept_id
from s_emp
where last_name="chang"
)
);

        需求:12.查看Chang员工所在部门其他员工薪资总和

select sum(salary)
from s_emp
where dept_id=( # chang员工所在的部门
select dept_id
from s_emp
where last_name="chang"
) and last_name != "chang"; # 除了chang员工

        需求:13.查询工资大于41号部门平均工资的员工,并且该员工所在部门的平均工资也要大于41号部门的平均工资

select id,last_name,salary, dept_id
from s_emp
where salary > ( # 高于41号部门的平均工资
select avg(salary)
from s_emp
where dept_id = 41
) and dept_id in ( # 高于41号部门的平均工资的部门
select dept_id
from s_emp
group by dept_id
having avg(salary)>( # 41号部门的平均工资
select avg(salary)
from s_emp
where dept_id = 41
)
);

    2、数据集条件子查询

        需求:1.求平均薪水最高的部门的id

select dept_id
from s_emp
group by dept_id
having avg(salary) = ( # 部门平均工资表中的最大工资
select max(max_avg)
from ( # 部门平均工资表
select avg(salary) as max_avg
from s_emp
group by dept_id
) as newtable
);
# 排序搜寻的部门
select dept_id
from s_emp
group by dept_id
order by avg(salary) desc
limit 0, 1;

        需求:2.求平均薪水最高的部门的部门名称

select id, name
from s_dept
where id=( # 部门平均薪资表中最高的平均工资的部门
select dept_id
from s_emp
group by dept_id
having avg(salary) = ( # 部门平均薪资表中最高的平均工资
select max(avgs)
from ( # 部门平均薪资表
select avg(salary) avgs
from s_emp
group by dept_id
) as newtable
)
);
select id, name
from s_dept
where id=(
select dept_id
from s_emp
group by dept_id
order by avg(salary) desc
limit 0, 1
);

MySQL难点语法——子查询的更多相关文章

  1. MySQL难点语法——连接

    本篇涉及的数据表格可以自行查阅上篇<MySQL难点语法——子查询> MySQL的数据表格之间有三种连接方式:等值连接.外连接.自连接.以下是通过举例介绍这三种连接方式 1.等值连接 等值连 ...

  2. MySQL里面的子查询

    一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:dis ...

  3. MySQL中IN子查询会导致无法使用索引

    今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表 ...

  4. MySQL中in子查询会导致无法使用索引问题(转)

    MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...

  5. 详细讲述MySQL中的子查询操作 (来自脚本之家)

    继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 1 ...

  6. MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)

    注:该MySql系列博客仅为个人学习笔记. 同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作 ...

  7. 在MySQL中使用子查询和标量子查询的基本用法

    一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...

  8. mysql 子句、子查询、连接查询

    一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...

  9. 数据库之 MySQL --- 数据处理 之 子查询 (二)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一 .数据库语言定义及命令行查看数据库操作 -- SQL 语言可以分为三类-- DML: 数据操纵语言. ...

随机推荐

  1. JS高阶---显式原型和隐式原型

    前言: 1.函数对象即函数的prototype原型属性指向原型对象,在创建函数时便存在,默认为空Object 2.实例对象的__proto__隐式原型在实例化创建实例时产生,值等于构造函数的显式pro ...

  2. 代码审计-strcmp比较字符串

    <?php $flag = "flag{xxxxx}"; if (isset($_GET['a'])) { if (strcmp($_GET['a'], $flag) == ...

  3. 基于 webdriver 的测试代码日常调试方python 篇

    看到论坛有人写了JAVA的测试代码日常设计,就给大家分享一下偶自己平时是如何测试测试代码的.主要基于python语言.基于 webdriver 的日常调试在 python交互模式下非常方便,打开pyt ...

  4. zzL4自动驾驶中感知系统遇到的挑战及解决方案

    本次分享的大纲: Perception Introduction Sensor Setup & Sensor Fusion Perception Onboard System Percepti ...

  5. USACO Cow Cars

    洛谷 P2909 [USACO08OPEN]牛的车Cow Cars https://www.luogu.org/problemnew/show/P2909 JDOJ 2584: USACO 2008 ...

  6. 论文阅读笔记六十五:Enhanced Deep Residual Networks for Single Image Super-Resolution(CVPR2017)

    论文原址:https://arxiv.org/abs/1707.02921 代码: https://github.com/LimBee/NTIRE2017 摘要 以DNN进行超分辨的研究比较流行,其中 ...

  7. 阿里邮箱地址,smpt

    企业邮箱的POP3.SMTP.IMAP地址是什么? 企业邮箱POP.SMTP.IMAP地址列表如下: (阿里云邮箱web端通用访问地址:https://qiye.aliyun.com/),客户端推荐以 ...

  8. requests--重定向,序列化

    重定向 默认情况下,除了 HEAD, Requests 会自动处理所有重定向.可以使用响应对象的 history 方法来追踪重定向. Response.history 是一个 Response 对象的 ...

  9. Spring mvc 前后台通过json交互【转】

    原文转自:https://www.cnblogs.com/zhaojiankai/p/8184596.html 本节内容: @RequestBody @ResponseBody 请求json,响应js ...

  10. 实战django(一)--(你也能看懂的)注册与登录(带前端模板)

    先是具体目录:(主要是注意templates和static的位置),其中person文件夹是上一期实战的,不用理会,login是本节实战app 项目urls.py from django.contri ...