MySQL单表employees单行与多行子查询练习 (二)

MySQL数据库表:  employees库表测试试数据

#--
#--单行子查询练习
#--1.显示工资比’Allan’(first_name)高的所有员工的姓名和工资
#--第一步 查询Allan的工资
SELECT e.salary FROM employees e WHERE e.first_name LIKE 'Allan' #--tb1
#--第二步 where子查询 
select salary from employees where salary > (tb1)
#--第三步 查询比Allan的工资9000高的所有员工
SELECT e2.first_name, e2.salary FROM employees e2 
WHERE e2.salary>(SELECT e.salary FROM employees e WHERE e.first_name LIKE 'Allan' )

#--子查询
#--2.查询最低工资大于50号部门最低工资的部门id和其最低工资
#--第一步 查询50号部门的最低工资
(select min(salary) from employees where department_id = 50) #--tb1
#--第二步 按部门分组,查询各部门最低工资> tb1
select department_id,min(salary) from employees  group by department_id
#--第三步 查询各部门最低工资> tb1
select department_id,min(salary) from employees 
group by department_id 
having min(salary) > (select min(salary) from employees where department_id = 50);

#--子查询--
#--2.查询工资大于本部门平均工资的员工基本信息--不能在select中显示WHERE子查询的值
#--第一步 查询适各部门平均工资
SELECT AVG(	e.SALARY) FROM employees e GROUP BY e.DEPARTMENT_ID ;
#--第二步 在上一步的基础上查询部门号60所在部门平均工资
SELECT AVG(	e2.SALARY) FROM employees e2 WHERE e2.DEPARTMENT_ID=60;
#--第三下 查询工资大于本部门平均工资的员工信息
SELECT e1.EMPLOYEE_ID, e1.DEPARTMENT_ID, e1.SALARY FROM employees e1
WHERE e1.SALARY > (select avg(e2.salary)
               from employees e2
								WHERE e2.DEPARTMENT_ID=e1.DEPARTMENT_ID
               )

#--3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
#--group by e1.department_id 有点多余
select e1.employee_id, e1.last_name, e1.salary
 from employees e1
 where 0 < ( select avg(e2.salary) AS avgSalaryav
               from employees e2
               where e1.department_id = e2.department_id
               group by e1.department_id) 


#----4.显示与30号部门first_name为’Guy’员工工资相同的员工姓名和工资
#--第一步 查询30号部门的 first_name为'Guy'的员工的工资 --tb1 2600
SELECT e.salary FROM employees e WHERE e.DEPARTMENT_ID = 30 AND e.first_name LIKE 'Guy'
#--第二步 查询工资=tb1.salary的员工姓名和工资
SELECT e2.first_name,e2.salary FROM employees e2 WHERE e2.salary=tb1.salary
#--第三步 整合
SELECT e2.first_name, e2.salary FROM employees e2 
WHERE e2.salary = (SELECT e.salary FROM employees e WHERE e.DEPARTMENT_ID = 30 AND e.first_name LIKE 'Guy')

#----5.查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SA_REP')
#--第一步 查询所有员工的平均工资 --tb1
SELECT AVG(e.salary) FROM employees e
#--第二步 查询岗位job_id 是'SA_REP' 且 工资高于tb1.salary
SELECT * FROM employees e2 WHERE job_id='SA_REP' AND e2.salary>(tb1.salary)
#--第三步 整合
SELECT e2.* FROM employees e2 WHERE e2.job_id='SA_REP' AND e2.salary>(SELECT AVG(e.salary) FROM employees e )

#--6.查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位 
#--第一步 查询所有员工的平均工资 --tb1
SELECT AVG(e.salary) avgsalary FROM employees e
#--第二步 查询各个职位job_id的员工工资>tb1.salary 
SELECT * FROM employees as e2 WHERE e2.salary>e.avgsalary GROUP BY e2.job_id
#--第三步 
SELECT e2.job_id,COUNT(1) FROM employees as e2 WHERE e2.salary>(
SELECT AVG(e.salary) avgsalary FROM employees e
) GROUP BY e2.job_id


#--多行子查询 
#--1.返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
select last_name,salary,job_id from employees 
where salary < any (select salary from employees where job_id='IT_PROG') 
and job_id <> 'IT_PROG';


2018-02-10

猜你喜欢

转载自blog.csdn.net/vcfriend/article/details/79306391