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'
查询和这个人,这是一个人名,跟他相同的员工姓名和雇佣时间,这个不是太难,很容易就解决了,select last_name,
hire_date,from employees,where department_id等于,等于跟这个人的部门一样,所以等于一个小括号,我们在内层
查询,你提供一下这个人,它是在哪个部门呢,所以select department_id,from employees,where last_name等于,
就是这个人,这个人的department_id,然后返回给他,这样写就完了,那有人说你这返回的还是含有这个人的,你要想把这个人
排掉,那你就再加上一个and就行了,and last_name不等于他
select last_name,hire_date from employees where department_id = (select department_id
from employees where
last_name='Zlotkey') and last_name<>'Zlotkey'
这就是这么多,里边肯定是没有刚才那个人的,但是你要是把这一条给他注掉
刚刚是33条,注掉就是34条
2. 查询工资比公司平均工资高的员工的员工号,姓名和工资。
a) select last_name,employee_id,salary
b) from employees
c) where salary > (select avg(salary)
d) from employees)
查询工资比公司平均工资高的员工的员工号,姓名和工资,还是从内到外或者从外到内都可以,工资比公司的
平均工资高,你得算出公司的平均工资是多少,然后看看谁的工资比这个工资要大,那就是这样子的,我要是从内
到外的话,那我得先,把公司的平均工资给算出来,这样吧,这个算出来以后,我想查什么,我想查询一下谁的工资
比刚才这个工资高,找他们的last_name,employee_id和他的salary,看看他们谁的工资是大于这个值,工资比公司
平均工资高的员工,这个比较简单
select last_name,employee_id,salary from employees where salary > (select avg(salary) from employees)
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) )
查询各部门中,工资比本部门工资高的,员工的员工号,姓名和工资,这个题目稍微有点难,这个题目有点难了,
我们来看一下,查询各部门工资,比本部门工资高的员工的员工号,姓名和工资,你首先要找到本部的平均工资,
然后你看看各个部门当中,哪些部门的工资比对应的部门的平均工资高,那些人都给输出出来,就是这个意思,
比如还是我们刚才举例一样,有四个部门,这个部门的平均工资6500,平均工资6500,这个部门的平均工资8000,
分别把你对应A,B,C,D比这个平均工资高的,6500,8000,把这几个人的输出出来,把这里面大于8000的输出出来,
把这些信息都给他整合出来,咱们来算,先求出各部门的平均工资,然后找比他平均工资高的,我们要从外到内的,
让你查询employee_id,last_name,跟salary,from employees,然后where,是不是你的salary要大于某一个值,
大于某一个值,这个要怎么去写,这个不单单是一个值的问题了,啥意思,你看,它让你求平均工资,正常我们这么来写,
这个平均工资肯定有一个group by了,我们先不考虑他,我们先这样来看,这个算出来肯定是平均工资,平均工资你要是
一个部门的话,我用大于那就只是一个部门,多个部门也不对,只能保本部门的那个,是这个意思吧,我只能够保本部的
平均工资,本部的平均工资,你得和外面的表挂一个钩,外面这个表对应的,哪些量,跟他是同一个部门的值,我再说一下,
你外面查询这样三个信息,一条一条的,一个一个人的,你这里的每一个人都对应一个department_id,你里面只能是同一个
部门的平均值,去比较一下,是这个意思吧,相当于我们这个题目难道哪儿呢,就是外层的这个表,跟内层的表之间,
他们有关系,这个关系不仅仅是大于号的关系,需要我们再补一下,这个我们应该怎么写,我这样处理,这个叫e1,
我这里叫e2,我要我的e1的department_id等于e2的department_id,然后得有一个分组,按照他来分,他分完以后,
有这样的一个条件限制,我这里只捞满足你这个条件的,这三个信息
select employee_id,last_name,salary from employees e1 where salary > (select avg(salary)
from employees e2
where e1.department_id=e2.department_id group by department_id)
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%'
你看看谁的名字含u,你看含u的员工在哪个部门,找这个部门的那些人,是这个意思吧,那相当于我们是要找这样
一些人,最后要查询的是employee_id,last_name,from employees,然后呢where,department_id得等于什么什么,
这里面写什么,含字母u的员工都在哪,但有可能不唯一,所以我们写in,我们要找含字母u的员工的都在哪个部门,
模糊查询,字母含u,用like,含u的,前面一个百分号,含u,后面一个百分号,这里是名字中含有u的,含u的这个人
他的部门,部门是什么,可能有多个,多个的话我就判断in,我是不是就找到了,这里面同样的要注意一下,如果你
最后输出结果,这里面没有特别的说明出来,正常我们是要把含u的这个人给他过滤掉,再加上一个and,last_name应该
是not like,名字中不含u的,那就是not like,这里面是含u的,然后我再把含u的给过滤掉
select employee_id,last_name from employees where department_id in
(select department_id from employees
where last_name lik '%u%') and last_name not like '%u%'
那你看这里面一定是没有含u的,有72条记录
5. 查询在部门的location_id为1700的部门工作的员工的员工号
select employee_id
from employees
where department_id in (
select department_id
from departments
where location_id = 1700
)
location_id是存在于departments表里的,相当于在这个地方工作的有很多个部门,那么相当于在这个地方工作的
员工,员工号你得找到,先查询一下从内到外,当然从内到外也行,department_id from departments这个表,
然后location_id等于1700,这我查询出来在1700,这个地方的部门有哪些
select department_id from departments where location_id = 1700
挺多的,有21个,21个部门都在1700这个位置,在这个位置的话,我想看在这些部门工作的员工,
select employee_id from employees,where,department_id,既然有很多就用in,这是不是就行了,
select employee_id from employees where department_id in (select department_id from departments
where location = 1700)
6.查询管理者是King的员工姓名和工资
select last_name,salary
from employees
where manager_id in (
select employee_id
from employees
where last_name = 'King'
)
查询管理者是King的员工的姓名和工资,看看谁的老板是King,谁的老板是King,
那我是不是得查询King的employee_id,然后看看谁的manager_id是employee_id,从内到外的话就是,
select employee_id from employees,where,last_name等于King,我看看King的employee_id是多少,
select employee_id from employees where last_name = 'King'
有两个人,然后看看谁的manager_id是,select last_name,salary from employees,where,
谁的老板是刚才算出来的两个值,我们把它扔进去,这里是不是又得用in了
select last_name,salary from employees where manager_id in (select employee_id from
employees where last_name = 'King')