子查询练习2

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')

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值