17/12/6 子查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17/12/6 子查询相关的知识,希望对你有一定的参考价值。

参考技术A 1.查询入职日期最早的员工姓名,入职日期。

2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称。

3.查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期。

4.查询部门人数大于所有部门平均人数的部门编号,部门名称,部门人数。

-子查询返回的条数,可以是一套或多条
-和多行子查询进行比较时,需要使用多行操作符.
in:
any: 表示和子查询的 任意 一行结果进行比较,有一个满足条件即可。
<li>< any: 表示小于子查询结果集中的任意一个,即小于最大值就可以。
<li>> any: 反之,大于最小值即可。
<li>= any: 相当于IN。
all: 表示和子查询的 所有 行记过进行比较,每一行必须满足条件。
<li>< all: 表示小于子查询结果集中的所有行,即小于最小值。
<li>>all: 反之,大于最大值。
<li>=all: 无意义。

练习2
1.查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工。

2.查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门的员工。

3.查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工。

-之前讲的子查询都是在一个条件表达式内和子查询的一个列进行比较,多列子查询可以在一个条件表达式内同时和子查询的多个列进行比较。
-多列子查询通常用IN操作符完成。

练习3
1.查询职位及经理和10部门任意一个员工职位及经理相同的员工姓名,职位,不包括10部门员工。

2.查询职位及经理和10部门任意一个员工职位或经理相同的员工姓名,职位,不包括10部门员工。

无论什么时候只要空值有可能成为子查询结果的一部分,就不能使用NOT IN运算符。

查询比自己部门平均工资高的员工姓名,工资,部门编号,部门平均工资。

练习4:
1.查询比自己职位平均工资高的员工姓名、职位,部门名称,职位平均工资。

2.查询职位和经理同员工SCOTT或BLACK完全相同的员工姓名、职位、不包括SCOTT和BLAKE本人。
方法1:多列子查询

方法2:建立一个与'SCOTT' ,'BLAKE'的职位和经理的临时表,然后与emp建立连接,过滤掉与SCOTT 与 BLAKE 职位经理不同的行。

练习5
1.查询入职日期最早的前5名员工姓名,入职日期

2.查询工作在CHICAGO并且入职日期最早的前两名员工姓名,入职日期。

练习7
1.按照每页显示5条记录,分别查询工资最高的第一页,第二页,第三页信息,要求显示员工姓名、入职日期、部门名称、工资。
方法1:
第一页

方法2:

第二页,第三页。。。

课后作业
1.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。

2.查询工资最高的员工姓名和工资。

3.查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。

4.查询员工工资为其部门最低工资的员工的编号和姓名及工资。

5.显示经理是KING的员工姓名,工资。

6.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

7.使用子查询的方式查询那些职员在NEW YORK工作。

8.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇佣日期,查询结果中排除SMITH。

9.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。

10.写一个查询显示其上级领导是King的员工姓名、工资。

11.显示所有工作在RESEARCH部门的员工姓名,职位。

12.查询每个部门的部门编号、平均工资,要求部门的平均工资高于部门20的平均工资。

13.查询大于 自己部门 平均工资的员工姓名,工资,所在 部门平均工资,高于部门平均工资的额度。

注:b.avg(sal) 必须得起别名。
14.列出至少有一个雇员的所有部门。

15.列出薪金比"SMITH"多的所有雇员.

16.列出入职日期早于其直接上级的所有雇员.

17.找员工姓名和直接上级的名字。

18.显示部门名称和人数

19.显示每个部门的最高工资的员工
方法1:

方法2:

20.显示出和员工号7369部门相同的员工姓名,工资

21.显示出和姓名中包含"W"的员工相同部门的员工姓名

22.显示出工资大于平均工资的员工姓名,工资

23.显示出工资大于本部门平均工资的员工姓名 工资

24.显示每位经理管理员工的最低工资,及最低工资者的姓名。
方法1:

方法2:

25.显示比工资最高的员工参加工作时间晚的员工姓名,参加
工作时间

26.显示出平均工资最高的的部门平均工资及部门名称

MySQL子查询(六)

参考技术A

定义:查询中嵌套查询就是子查询

子查询的本质:

找出工资大于Mark的员工名字和工资
分析:
1.查询出Mark的工资是多少

2.查询出高于1450工资的人

整合成子查询

子查询的特点:

为什么相关子查询的效率极其低下?

结论:

性能排序/优先使用

关联/分组查询>无关子查询>相关子查询

1. 找出工资比\'BLAKE\'多的员工

2. 列出薪金高于公司平均薪金的所有员工,所在部门

3. 查询出工资最低的员工的姓名,工作,工资

4. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称

或者

5.查找出职位和\'MARTIN\' 或者\'SMITH\'一样的员工的平均工资

6. 列出薪金比“BLAKE”或“WARD”多的所有员工的编号、姓名、部门名称、其领导姓名。

7. 找出各个部门中大于他所在部门平均工资的员工名和工资

8. 查找出收入(工资加上奖金),下级比自己上级还高的员工编号,员工名字,员工收入

9. 得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置

10. 查找出部门10和部门20中,工资最高第3名到工资第5名的员工的员工名字,部门名字,部门位置

11. 以职位分组,找出平均工资最高的两种职位

12. 查询出各部门总薪资,平均薪资,总人数,显示部门编号,部门名称与部门总薪资(没有员工的部门也需要统计)

以上是关于17/12/6 子查询的主要内容,如果未能解决你的问题,请参考以下文章

Java分割数组成子数组

oracle中在in子查询语句中order by排序能否用?

MYSQL NOT IN 子选择查询

MySQL Connector/Python 查询怎么返回字段名

加入查询和子查询

Mongoose Mongodb 子文档的排序和限制查询