Oracle子查询课后练习题

1. 查询和Zlotkey相同部门的员工姓名和雇用日期

a) select last_name,hire_date

b) from employees

c) where department_id = (

d) select department_id

e) from employees

f) where last_name = ‘Zlotkey’

g) )

h) and last_name <> ‘Zlotkey’

结果:

clip_image002

总结:什么是子查询,可以理解为一种嵌套查询.

比如说:在这个例子中,要查Zlotkey相同部门的人名和入职日期

第一步:找到和Zlotkey相同部门的人的员工id

第二步:把这些员工id作为查询条件查询对应的人名和入职日期

第三步:排除Zlotkey本人的信息

在这里:出了部门id以外,如果有其他的具备唯一性的属性,也可以作为查询条件.不过在这个例子中,查询相同部门,一个部门只有一个id,所以用部门id来查询是最优选择.

2. 查询工资比公司平均工资高的员工的员工号,姓名和工资。

a) select last_name,employee_id,salary

b) from employees

c) where salary > (select avg(salary)

d) from employees)

结果:

clip_image004

总结:

通过测试,这里用分组查询是无法实现的,所以用了子查询.

如果要用单行函数,需要连续查询两次.子查询简化了这种步骤,直接把一个查询结果作为另一个查询的查询条件

实现步骤分析:

1. 查询需要查询的数据

2. 查找需要查询的条件

3. 将查询条件的语句赋值给第一步的条件

3. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

a) select employee_id,last_name,salary

b) from employees e1

c) where salary > (

d) select avg(salary)

e) from employees e2

f) where e1.department_id = e2.department_id

g) group by department_id

h) )

结果:

clip_image006

总结:

这里用到了子查询和分组查询.在查询数据的时候,笔者分析出了一种方法,那就是将题目的条件和需要查询的数据分离,这里第一次使用,我也做一下思考笔记.

题目分析:

条件:各部门工资比本部门平均工资高

要查询的数据:员工号,姓名,工资

要查询的数据是最没有难度的,直接照抄,条件则需要思考一番.比如说这里,各部门这个关键词说明需要按照部门分组,平均工资说明要分组查询各部门的平均工资,高说明用>符号

解题:

1. 写查询数据

2. 按照部门id分组查询各部门平均工资

3. 工资>(2的语句)赋值给1

4. 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名

a) select employee_id,last_name

b) from employees

c) where department_id in (

d) select department_id

e) from employees

f) where last_name like ‘%u%’

g) )

h) and last_name not like ‘%u%’

结果:

clip_image008

总结:

条件:姓名中包含字母u %u% 的员工

查询数据:员工号和姓名

分析:

1. 数据语句 select employee_id,last_name from employees where

2. 条件语句 last_name=%u%

解题:

select employee_id,last_name from employees where last_name=%u%

clip_image010

以上为自己的思考,是错误的.

标准答案:

clip_image012

5. 查询在部门的location_id为1700的部门工作的员工的员工号

select employee_id

from employees

where department_id in (

select department_id

from departments

where location_id = 1700

)

结果:

clip_image014

总结:

条件:location_id=1700的部门

数据:员工的员工号

解题:

1. select employee_id from employees where location_id=1700

标准答案:

clip_image016

6.查询管理者是King的员工姓名和工资

select last_name,salary

from employees

where manager_id in (

select employee_id

from employees

where last_name = ‘King’

)

结果:

clip_image018

总结:

条件:管理者是King

查询数据:员工姓名,工资

解题:

Select last_name,salary from employees where

标准答案:

clip_image020

张 大鹏

北京理想国惠玩科技有限公司CEO

发表评论

电子邮件地址不会被公开。 必填项已用*标注