知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)

 欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力

对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    专栏:

文章概述:对mysql的 子查询命令的详细介绍&对应的习题&注意点

关键词:Mysql    子查询

本文目录

子查询简介

单行子查询

多行子查询

1、ANY 运算符 

2.ALL运算符

3.子查询中的空值

子查询练习

  • 子查询简介

子查询是一个 SELECT 语句,它是嵌在另一个 SELECT 语句中的子句。使用子查询可以用简单的语句构建功能强大的语句

#查询与Fox同一部门的同事,并显示他们的名字与部门ID。

select e.LAST_NAME,e.DEPARTMENT_ID FROM employees e
where e.DEPARTMENT_ID=
(select e1.DEPARTMENT_ID from employees e1 where e1.last_name='Fox');

单行子查询

单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符。

#查询Fox的同事,但是不包含他自己。

select empl.last_name from employees emplwhereempl.department_id
=(selecte.department_id from employees ewheree.last_name='Fox') and
empl.last_name<>'Fox';  

多行子查询


 

子查询返回多行被称为多行子查询。对多行子查询要使用多行运算符而不是单行运算符

1、ANY 运算符 

ANY 运算符比较一个值与一个子查询返回的任意一个值。

  1. < ANY 意思是小于最大值。
  2. > ANY 意思是大于最小值。
  3. = ANY 等同于 IN or 的关系

2.ALL运算符

ALL运算符比较一个值与子查询返回的全部值。

  1. < ALL意思是小于最小值。
  2. > ALL意思是大于最大值。

NOT运算符可以与IN运算符一起使用。

3.子查询中的空值

(子查询)内查询返回的值含有空值,并因此整个查询无返回行,原因是用大于、小于或不等于比较Null值,都返回null。所以,只要空值可能是子查询结果集的一部分,就不能用NOT IN运算符。NOT IN运算符相当于<> ALL (不等于谁并且不等于谁并且不等于谁)。

注意,空值作为一个子查询结果集的一部分,如果使用IN操作符的话,不是一个问题。IN操作符相当于=ANY。

#in括号里是多结果用in 判断所有符合内函数结果的条件

SELECT emp.last_name 
FROM employees emp 
WHERE emp.employee_id 
IN 
(SELECT mgr.manager_id 
FROM employees mgr
); 


 

#查找各部门收入为部门最低的那些雇员。显示他们的名字,薪水以及部门ID

select em.last_name,em.salary,em.department_id from employees em where
em.salary in(select min(e.salary) from employees e group by e.department_id)
group by em.department_id; 


 

  • 子查询练习

1、

#写一个查询显示与Zlotkey在同一部门的雇员的last name和hire date,结果中不包括Zlotkey。

SELECT
e1.LAST_NAME,e1.HIRE_DATE
FROM employees e1
where e1.DEPARTMENT_ID=
(select e.DEPARTMENT_ID 
FROM employees e
where e.LAST_NAME='Zlotkey'
)
AND e1.LAST_NAME<>'Zlotkey'; 

2、

#创建一个查询显示所有其薪水高于平均薪水的雇员的雇员号和名字。按薪水的升序排序。

SELECT
e1.EMPLOYEE_ID,e1.LAST_NAME
FROM employees e1
WHERE e1.SALARY>
(
select AVG(e.SALARY)
from employees e
)
ORDER BY e1.SALARY;

3、

#写一个查询显示所有工作在有任一雇员的名字中包含一个u的部门的雇员的雇员号和名字

SELECT
e1.EMPLOYEE_ID,e1.LAST_NAME
FROM employees e1
WHERE e1.DEPARTMENT_ID IN
(SELECT e.DEPARTMENT_ID
FROM employees e 
WHERE e.LAST_NAME like '%u%'
)

4、

#.显示所有部门地点号(department location ID )是1700的雇员的last name、department number和job ID。

SELECT
e.LAST_NAME,e.DEPARTMENT_ID,e.JOB_ID
FROM employees e
WHERE e.DEPARTMENT_IDIN
(SELECT
d.DEPARTMENT_ID
FROM departments d
WHERE d.LOCATION_ID=1700)   

5、

#显示每个向King报告的雇员的名字和薪水。

SELECT
e1.LAST_NAME,e1.SALARY
FROM employees e1
where e1.MANAGER_IDIN
(select e.EMPLOYEE_ID
from employees e 
where e.LAST_NAME='King'
) 

6、

#.显示在Executive部门的每个雇员的department number、last name和job ID。

SELECT
e.DEPARTMENT_ID,e.LAST_NAME,e.JOB_ID
FROM employees e
WHERE e.DEPARTMENT_ID=
(select d.DEPARTMENT_ID 
FROM departments d 
WHERE d.DEPARTMENT_NAME='Executive'
);  

  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值