MySQL基础篇第9章

课后练习

#1.查询和Zlotkey相同部门的员工姓名和工资
SELECT last_name ,salary 
from employees 
where department_id = (
											 select department_id 
											 FROM employees 
											 where last_name = 'Zlotkey'
											 );



#2.查询工资比公司平均工资高的员工的员工号、姓名和工资
SELECT employee_id,last_name,salary 
from employees 
where salary > (
								select AVG(salary) 
								FROM employees
								);



#3.查询工资大于所有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'
									  )



#4.查询姓名中包含字母u的员工所在相同部门的员工的员工号和姓名
SELECT employee_id,last_name 
FROM employees 
WHERE department_id IN ( 
												SELECT DISTINCT department_id 
												FROM employees 
												where last_name LIKE '%u%'
												)
												
												
												
#5.查询部门的location_id为1700的部门工作的员工的工作号
SELECT DISTINCT e.department_id
FROM employees e
LEFT JOIN departments d
on e.department_id=d.department_id								
WHERE location_id = 1700												
												
												
												
SELECT employee_id
FROM employees
WHERE department_id in (																							
												SELECT DISTINCT department_id
												FROM departments
												WHERE location_id = 1700
												)									
																								
								
												
#6.查询管理者是King的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE manager_id IN (
										 SELECT employee_id 
										 FROM employees 
										 WHERE last_name = 'King'
										)



#7.查询工资最低的员工信息:last_name,salary
SELECT last_name,salary
FROM employees
WHERE salary = (
								SELECT MIN(salary)
                FROM employees
							 )



#8.查询平均工资最低的部门信息
SELECT * 
FROM departments
WHERE department_id = (
											  SELECT DISTINCT department_id
												FROM employees
												GROUP BY department_id
												HAVING AVG(salary) = (
																						 SELECT MIN(avg_salary)
																						 FROM (
																									 SELECT AVG(salary) avg_salary
																									 FROM employees
																									 GROUP BY department_id
																									) avg
																						 )
											)



#优化,减少一层子查询
SELECT * 
FROM departments
WHERE department_id = (
											  SELECT DISTINCT department_id
												FROM employees
												GROUP BY department_id
												HAVING AVG(salary) <= ALL (
																									 SELECT AVG(salary) avg_salary
																									 FROM employees
																									 GROUP BY department_id
																									)
											)



#LIMIT方式
SELECT * 
FROM departments
WHERE department_id = (
											  SELECT DISTINCT department_id
												FROM employees
												GROUP BY department_id
												HAVING AVG(salary) =  (
																							  SELECT AVG(salary) avg_salary
																							  FROM employees
																								GROUP BY department_id
																								ORDER BY avg_salary ASC
																								LIMIT 0,1
																							)
											)



#其他方式
SELECT d.* 
FROM departments d,(
										SELECT department_id,AVG(salary) avg_salary
										FROM employees
										GROUP BY department_id
										ORDER BY avg_salary ASC
										LIMIT 0,1
									 ) t_avg
WHERE d.department_id = t_avg.department_id 



#9.查询平均工资最低的部门信息和该部门的平均工资(相关子查询)
SELECT d.*,(SELECT AVG(salary) FROM employees WHERE department_id = d.department_id) avg_sal
FROM departments d
WHERE department_id = (
											  SELECT DISTINCT department_id
												FROM employees
												GROUP BY department_id
												HAVING AVG(salary) =  (
																							  SELECT AVG(salary) avg_salary
																							  FROM employees
																								GROUP BY department_id
																								ORDER BY avg_salary ASC
																								LIMIT 0,1
																							)
									    )
					
									 

SELECT d.*,avg_salary
FROM departments d,(
                    SELECT department_id,AVG(salary) avg_salary
										FROM employees
										GROUP BY department_id
										ORDER BY avg_salary ASC
										LIMIT 0,1
									 ) t_avg
WHERE d.department_id = t_avg.department_id



#10.查询平均工资最高的job信息
SELECT j.*
FROM jobs j,(
						 SELECT job_id,AVG(salary) avg_salary
						 FROM employees
						 GROUP BY job_id
						 ORDER BY avg_salary DESC
						 LIMIT 0,1
					  ) t_avg
WHERE j.job_id = t_avg.job_id



#11.查询平均工资高于公司平均工资的部门有哪些
SELECT department_id
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id
HAVING AVG(salary) > (
											SELECT AVG(salary) 
											FROM employees
									   )



#12.查询出公司中所有manager的详细信息
#自连接
SELECT DISTINCT m.* 
FROM employees e,employees m
WHERE e.manager_id = m.employee_id



#子查询
SELECT *
FROM employees
WHERE employee_id IN (
											SELECT DISTINCT manager_id
											FROM employees
										 )
							


#EXISTS	
SELECT *
FROM employees e
WHERE EXISTS (
							SELECT *
							FROM employees m
							WHERE e.employee_id	= m.manager_id
						 )



#13.各个部门中 最高工资中最低的那个部门的 最低工资是多少
SELECT MIN(salary)
FROM employees
GROUP BY department_id
HAVING department_id = (
												SELECT department_id
												FROM employees
												WHERE department_id IS NOT NULL
												GROUP BY department_id
												ORDER BY MAX(salary) ASC
												LIMIT 0,1
											 )



#14.查询平均工资最高的部门的manager的详细信息
SELECT * 
FROM employees 
WHERE employee_id = (
											SELECT manager_id
											FROM departments
											WHERE department_id = (
																							SELECT department_id
																							FROM employees
																							WHERE department_id IS NOT NULL
																							GROUP BY department_id
																							ORDER BY MAX(salary) DESC
																							LIMIT 0,1
																						)
)



#15.查询部门的部门号,其中不包括job_id是'ST_CLERK'的部门号
SELECT department_id
FROM departments
WHERE department_id <> (
												SELECT DISTINCT department_id
												FROM employees
												WHERE job_id = 'ST_CLERK'
												)



SELECT department_id
FROM departments d
WHERE NOT EXISTS (
									SELECT DISTINCT department_id 
									FROM employees e
									WHERE d.department_id = e.department_id
									AND job_id = 'ST_CLERK'
								 )



#16.选择所有没有管理者的员工的last_name
SELECT last_name
FROM employees e1
WHERE NOT EXISTS (
							SELECT *
							FROM employees e2
							WHERE e1.manager_id = e2.employee_id
					 	 )



#17.查询员工号、姓名、雇佣时间、工资,其中员工的管理者为'De Haan'
SELECT employee_id,last_name,hire_date,salary
FROM employees
WHERE manager_id = (
										SELECT employee_id
										FROM employees
										WHERE last_name = 'De Haan'
										)



#18.查询各部门中工资比本部门平均工资高的员工的员工号、姓名和工资(相关子查询)
#相关子查询
SELECT employee_id,last_name,salary
FROM employees e1
WHERE salary > (
								SELECT AVG(salary)
								FROM employees e2
								WHERE department_id = e1.department_id
							 )
							 
							 
							 
#在FROM中声明子查询
SELECT employee_id,last_name,salary
FROM employees e1,(
										SELECT department_id,AVG(salary) avg_salary
										FROM employees
										GROUP BY department_id
									 ) e2
WHERE e1.department_id = e2.department_id
AND e1.salary > e2.avg_salary



#19.查询每个部门下的部门人数大于5的部门
SELECT department_name
FROM departments d
WHERE 5 < (
					 SELECT COUNT(*)
					 FROM employees e
					 WHERE d.department_id = e.department_id
					)				



SELECT department_name
FROM departments
WHERE department_id IN (
												SELECT department_id
												FROM employees
												GROUP BY department_id
												HAVING COUNT(*) > 5
											 )
											 
											 
#20.查询每个国家下的部门个数大于2的国家编号						 
SELECT 	country_id
FROM locations l
WHERE 2 < (
						SELECT COUNT(*)
						FROM departments d
						WHERE l.location_id=d.location_id
					)										 
											 
SELECT location_id,COUNT(*) a
FROM departments
GROUP BY location_id											 
											 
											 
											 
											 


在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值