欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
- java全栈
- C&C++
- PythonAI
- PCB设计
文章概述:对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 运算符比较一个值与一个子查询返回的任意一个值。
- < ANY 意思是小于最大值。
- > ANY 意思是大于最小值。
- = ANY 等同于 IN or 的关系
2.ALL运算符
ALL运算符比较一个值与子查询返回的全部值。
- < ALL意思是小于最小值。
- > 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'
);