当前位置: 代码迷 >> 综合 >> SQL面试用题
  详细解决方案

SQL面试用题

热度:37   发布时间:2024-01-22 01:11:35.0

5.查询员工中工资大于本部门平均工资的员工的last_name,

salary和其department_id

SELECT last_name, salary, department_id

FROM   employees outer

WHERE  salary >

(SELECT AVG(salary)

 FROM   employees

 WHERE  department_id =  

        outer.department_id) ;

 

6. 若employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同id的员工的employee_id,last_name和其job_id

SELECT e.employee_id, last_name,e.job_id

FROM   employees e

WHERE  2 <= (SELECT COUNT(*)

             FROM   job_history

             WHERE  employee_id = e.employee_id);

 

--EXISTS 操作符

  • EXISTS 操作符检查在子查询中是否存在满足条件的行
  • 如果在子查询中存在满足条件的行:
    • 不在子查询中继续查找
    • 条件返回 TRUE

7. 查询公司管理者的employee_id,last_name,job_id,

department_id信息

SELECT employee_id, last_name, job_id, department_id

FROM   employees outer

WHERE EXISTS ( SELECT 'X'

                 FROM   employees

                 WHERE  manager_id =

                        outer.employee_id);

 

8. 查询departments表中,不存在于employees表中的部门的department_id和department_name

SELECT department_id, department_name

FROM departments d

WHERE NOT EXISTS (SELECT 'X'

                  FROM   employees

                  WHERE  department_id

                         = d.department_id);

 

--关于数据更新

9.修改表employees,添加department_name列,赋予department_id相应的部门名称。

 

ALTER TABLE employees

ADD(department_name VARCHAR2(14));

 

UPDATE employees e

SET    department_name =

              (SELECT department_name

       FROM   departments d

       WHERE  e.department_id = d.department_id);

 

--关于数据删除

10.删除表employees中,其与emp_history表皆有的数据

DELETE FROM employees E

WHERE employee_id in  

           (SELECT employee_id

            FROM   emp_history

            WHERE  employee_id = E.employee_id);

 

--WITH 子句

11. 查询公司中各部门的总工资大于公司中各部门的平均总工资的部门信息

WITH
dept_costs  AS (

   SELECT  d.department_name, SUM(e.salary) AS dept_total

   FROM    employees e, departments d

   WHERE   e.department_id = d.department_id

   GROUP BY d.department_name),

avg_cost    AS (

   SELECT SUM(dept_total)/COUNT(*) AS dept_avg

   FROM   dept_costs)

SELECT *

FROM   dept_costs

WHERE  dept_total >

        (SELECT dept_avg

         FROM avg_cost)

ORDER BY department_name;

 

附加题目:

12.查询员工的last_name, department_id, salary.其中员工的salary,department_id与有奖金的任何一个员工的salary,

department_id相同即可

 

select last_name, department_id, salary

from employees 

where (salary,department_id) in (

select salary,department_id

from employees

where commission_pct is not null

                                )

 

13.选择工资大于所有JOB_ID = 'SA_MAN'的员工的工资的员工的last_name, job_id, salary

 

select last_name, job_id, salary

from employees

where salary > all(

                  select salary

                  from employees

                  where job_id = 'SA_MAN'

                  )

 

14.选择所有没有管理者的员工的last_name

 

select last_name

from employees e1

where not exists (

              select 'A'

              from employees e2

              where e1.manager_id = e2.employee_id

              )

15. 查询10,50,20号部门的job_id,department_id并且department_id按10,50,20的顺序排列

Column dummy noprint;

select job_id , department_id ,1 dummy

from employees

where department_id = 10

union

select job_id , department_id , 2

from employees

where department_id = 50

union

select job_id , department_id , 3

from employees

where department_id= 20

order by 3

 

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

  相关解决方案