sql查询练习

1.查看公司的平均奖金率
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> <span style="color:#770088">SUM</span><span style="color:#999977">(</span>commisstion_pct<span style="color:#999977">)</span>/count<span style="color:#999977">(</span>ifnull<span style="color:#999977">(</span>commisstion,<span style="color:#116644">0</span><span style="color:#999977">))</span>
<span style="color:#770088">from</span> employees;</span></span>

2.查看部门ID为10,20,30,40这四个部门中最高工资比10000高的部门信息
方式一
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> department_id,<span style="color:#770088">MAX</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span>
<span style="color:#770088">from</span> employees
<span style="color:#770088">where</span> department_id <span style="color:#770088">in</span><span style="color:#999977">(</span><span style="color:#116644">10</span>,<span style="color:#116644">20</span>,<span style="color:#116644">30</span>,<span style="color:#116644">40</span><span style="color:#999977">)</span>
<span style="color:#770088">group</span> <span style="color:#770088">by</span> department_id
<span style="color:#770088">having</span> <span style="color:#770088">MAX</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span><span style="color:#981a1a">></span><span style="color:#116644">10000</span>;</span></span>
方式二
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> department_id,<span style="color:#770088">MAX</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span>
<span style="color:#770088">from</span> employees
<span style="color:#770088">group</span> <span style="color:#770088">by</span> department_id
<span style="color:#770088">having</span> <span style="color:#770088">MAX</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span><span style="color:#981a1a">></span><span style="color:#116644">10000</span> <span style="color:#770088">and</span> department_id <span style="color:#770088">in</span><span style="color:#999977">(</span><span style="color:#116644">10</span>,<span style="color:#116644">20</span>,<span style="color:#116644">30</span>,<span style="color:#116644">40</span><span style="color:#999977">)</span>;</span></span>

方式一执行效率高于方式二

结论:

当过滤条件中有聚合函数时,则此过滤函数必须声明在having中。

当过滤条件中没有聚合函数时,则此过滤条件声明在where或者having中都可以。但是建议声明在where中。

3.查找谁的工资比Abel高?
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> Last_name,salary
<span style="color:#770088">from</span> employees
<span style="color:#770088">where</span> salary<span style="color:#981a1a">></span><span style="color:#999977">(</span><span style="color:#770088">select</span> salary
             <span style="color:#770088">from</span> employees
             <span style="color:#770088">where</span> last_name<span style="color:#981a1a">=</span><span style="color:#aa1111">'Abel'</span><span style="color:#999977">)</span>;</span></span>

4、查找job_id与141员工相同,salary比143号员工多的员工姓名,job_id和工资
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> last_name,job_id,salary
<span style="color:#770088">from</span> employees
<span style="color:#770088">where</span> job_id<span style="color:#981a1a">=</span><span style="color:#999977">(</span><span style="color:#770088">select</span> job_id <span style="color:#770088">from</span> employees
             <span style="color:#770088">where</span> job_id<span style="color:#981a1a">=</span><span style="color:#116644">141</span><span style="color:#999977">)</span>
<span style="color:#770088">and</span> salary<span style="color:#981a1a">></span><span style="color:#999977">(</span><span style="color:#770088">select</span> salary <span style="color:#770088">from</span> employees
            <span style="color:#770088">where</span> job_id<span style="color:#981a1a">=</span><span style="color:#116644">143</span><span style="color:#999977">)</span></span></span>

5.返回公司工资最少的员工的last_name,job_id,salary
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> last_name,job_id,salary 
<span style="color:#770088">from</span> employees
<span style="color:#770088">where</span> salary<span style="color:#981a1a">=</span><span style="color:#999977">(</span><span style="color:#770088">select</span> <span style="color:#770088">min</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span> 
              <span style="color:#770088">from</span> employees
              <span style="color:#999977">)</span>;</span></span>
6.查询与141号员工的manager_id和department_id相同的其他员工的employee_id,manager_id,department_id
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> employee_id,manager_id,department_id
<span style="color:#770088">from</span> employees
<span style="color:#770088">where</span> manager_id<span style="color:#981a1a">=</span><span style="color:#999977">(</span><span style="color:#770088">select</span> manager_id 
                  <span style="color:#770088">from</span> employees
​
                 <span style="color:#770088">where</span> employee_id<span style="color:#981a1a">=</span><span style="color:#116644">141</span> <span style="color:#999977">)</span>
<span style="color:#770088">and</span> department_id<span style="color:#981a1a">=</span><span style="color:#999977">(</span><span style="color:#770088">select</span> department_id 
                  <span style="color:#770088">from</span> employees
                  <span style="color:#770088">where</span> employee_id<span style="color:#981a1a">=</span><span style="color:#116644">141</span> <span style="color:#999977">)</span>
<span style="color:#770088">and</span> employee_id  <span style="color:#981a1a"><></span><span style="color:#116644">141</span>;</span></span>

7.查询最低工资大于50号部门最低工资的部门id和其最低工资
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">select</span> department_id,<span style="color:#770088">min</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span>
<span style="color:#770088">from</span> employees
<span style="color:#770088">group</span> <span style="color:#770088">by</span> department_id
<span style="color:#770088">having</span> <span style="color:#770088">min</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span><span style="color:#981a1a">></span><span style="color:#999977">(</span>
                    <span style="color:#770088">select</span> <span style="color:#770088">MIN</span><span style="color:#999977">(</span>salary<span style="color:#999977">)</span> 
                    <span style="color:#770088">from</span> employees
                    <span style="color:#770088">where</span> department_id<span style="color:#981a1a">=</span><span style="color:#116644">50</span>
<span style="color:#999977">)</span>;</span></span>

8.显示员工的employee_id,last_name和location。其中员工的department_id 与location_id为1800的department_id 相同,则location为‘Canada,其余为‘USA’
<span style="background-color:#f8f8f8"><span style="color:#333333">
</span></span>

9.查找其他job_id中比job_id为‘IT-PROG’部门任一工资低的姓名,员工号,和工资
<span style="background-color:#f8f8f8"><span style="color:#333333">select last_name,job_id,salary
from employees
where job_id<>'IT_PROG'
and salary < ANY (
              select salary 
              from departments
              where job_id='IT_PROG'
               );</span></span>
9.1查找其他job_id中比job_id为‘IT-PROG’部门任一工资低的姓名,员工号,和工资
<span style="background-color:#f8f8f8"><span style="color:#333333">select last_name,job_id,salary
from employees
where job_id<>'IT_PROG'
and salary < all (
              select salary 
              from departments
              where job_id='IT_PROG'
               );</span></span>

10.查询平均工资最低的部门id
方式1

oracel版

<span style="background-color:#f8f8f8"><span style="color:#333333">select department_id
from employees
group by department_id
having avg(salary)=(
                     select min(avg(salary)) 
                     from EMPLOYEES
                     group by department_id;
                   )</span></span>

mysql版:聚合函数不支持嵌套

<span style="background-color:#f8f8f8"><span style="color:#333333">select department_id
from employees
group by department_id
having avg(salary)=(
                    select min(avg_sal) 
                    from (select avg(salary) avg_sal
						  from employees 
						  group by department_id
                          ));</span></span>
方式2
<span style="background-color:#f8f8f8"><span style="color:#333333">--查所有部门的平均工资,小于等于平均工资  即  最低平均工资
select department_id
from employees
group by department_id
having avg(salary)<=(
                     select avg(salary) avg_sal
                     from employees
                     group by department_id
                     );</span></span>
11.查询公司管理者与员工的信息

查询公司管理者

<span style="background-color:#f8f8f8"><span style="color:#333333">select last_name
from employees
where employee_id in(
                   select manager_id
                   from employees
                   -- where manager_id is not null
                  );</span></span>

查询公司员工

<span style="background-color:#f8f8f8"><span style="color:#333333">select last_name
from employees
where employee_id  not in(
                   select manager_id
                   from employees
                   where manager_id is not null
                  );</span></span>

12.查询员工中工资大于本部门平均工资的员工的last_name,salary和department_id

相关子查询

<span style="background-color:#f8f8f8"><span style="color:#333333">select last_name,salary,department_id
from employees e1
where salary >(
               select avg(salary)
               from employees e2
               where e1.department_id=e2.department_id
              );</span></span>
方式2

在form中声明子查询

<span style="background-color:#f8f8f8"><span style="color:#333333">select e.last_name,e.salary,e.department_id
from employees e,(
		          select department_id,avg(salary) avg_sal
                  from employees
                  group by department_id) t_dept_avg_sal
where e.department_id=t_dept_avg_sal.department_id
and e.salary>t_dept_avg_sal.avg_sal;           </span></span>

13.查询员工的id,salary,按照department_name排序
<span style="background-color:#f8f8f8"><span style="color:#333333">select e.employee_id,e.salary
from employees  e 
order by(
        select department_name
        from  departments  d
				where e.department_id=d.department_id
       ) asc;</span></span>

14.若employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同id的员工的employee_id,last_name和其job_id
<span style="background-color:#f8f8f8"><span style="color:#333333">select employee_id,last_name,job_id
from employees e
where 2<=(
         select count(*)
		 from job_history j
		 where e.employee_id=j.employee_id
		 );</span></span>

15.查询公司管理者的employee_id,last_name,job_id,department_id信息
<span style="background-color:#f8f8f8"><span style="color:#333333">select distinct mgr.employee_id,mgr.last_name,mgr.job_id,mgr.department_id
from employees emp join employees mgr
on emp.manager_id=mgr.employee_id;</span></span>

方式2:子查询 先查出管理者manager_id,

<span style="background-color:#f8f8f8"><span style="color:#333333">select employee_id,last_name,job_id,department_id
from employees
where employee_id in (
									  select distinct manager_id
                    from employees 
								   	);</span></span>

方式3:使用exists

<span style="background-color:#f8f8f8"><span style="color:#333333">select employee_id,last_name,job_id,department_id
from employees e1
where exists(
             select *
						 from employees e2
						 where e1.employee_id=e2.manager_id
						 );</span></span>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值