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

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

  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. 网络流之最大流EK --- poj 1459

    题目链接 本篇博客延续上篇博客(最大流Dinic算法)的内容,此次使用EK算法解决最大流问题. EK算法思想:在图中搜索一条从源点到汇点的扩展路,需要记录这条路径,将这条路径的最大可行流量 liu 增 ...

  2. c# 第12节 分支语句if、switch、三位运算符

    本节内容: 1:流程控制语句分类 2:分支语句之if的使用 3:分支语句之switch的使用 4:分支语句之三位运算符 5:分支语句比较 1:流程控5:制语句分类 2:分支语句之if 3:分支语句之s ...

  3. 重新学习SpringMVC——高级

    30. SpringMVC_RESTRUL_CRUD_显示所有员工信息31. SpringMVC_RESTRUL_CRUD_添加操作&表单标签32. SpringMVC_RESTRUL_CRU ...

  4. MyBatis Plus 将查询结果封装到指定实体

    MyBatis Plus 将查询结果封装到指定实体 思路 自定义方法,使用Wrapper,自定义映射结果集 Mapper接口 package com.mozq.boot.mpsand01.dao; i ...

  5. idea中怎么忽略(ignore)掉 .idea等文件

    idea需要下载一个专门的plugins 来ignore .idea *.iml等文件 可以在https://plugins.jetbrains.com/idea/plugin/7495–ignore ...

  6. 关于对pei

    我现在才开始整理这个不算晚吧...... 望轻喷 学习博客 我们需要四个程序 1.暴力 2.“正解” 3.数据生成器 4.检查程序 暴力: 就是暴力 eg: #include <cstdio&g ...

  7. Linux性能优化实战学习笔记:第三十讲

    一.性能指标 二.文件系统I/O性能指标 1.存储空间的使用情况 文件系统向外展示的空间使用,而非磁盘空间的真是用量,因为文件系统的元数据也会占用磁盘空间 2.索引节点的使用情况 如果存储过多的小文件 ...

  8. [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  9. Tomcat启用HTTPS协议配置过程

    Article1较为简洁,Article2较为详细,测试可行. Article1 概念简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问 ...

  10. snowflake ID生成器

    背景 Snowflake 是 Twitter 内部的一个 ID 生算法, 可以通过一些简单的规则保证在大规模分布式情况下生成唯一的 ID 号码. 其组成为: 第一个 bit 为未使用的符号位. 第二部 ...