进阶8 子查询------测试题

class 87-99 子查询

--------------------(一)案例讲解:子查询----------------------------------------------

/*
(1)子查询的本质就是创建一个中间表。一个、一列、一行、多行多列,都是表。
(2)本质:在于分析筛选条件
*/

(1)查询和zlotkey相同部门的员工姓名和工资

step1:查询zlotkey的部门

SELECT department_id
FROM employees
WHERE last_name = ‘zlotkey’;

step2:查询部门号=step1的姓名和工资【where后面,标量子查询】

SELECT last_name, salary
FROM employees
WHERE department_id = (
SELECT department_id
FROM employees
WHERE last_name = ‘zlotkey’
);

(2)查询工资比公司平均工资高的员工的员工号,姓名和工资

step1:查询平均工资

SELECT AVG(salary)
FROM employees;

step2:查询工资>step1的员工号,姓名和工资【where后面,标量子查询】

SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);

(3)查询各部门中工资比本部门平均工资高的员工的员工号,姓名和工资

step1:查询各部门的平均工资

SELECT AVG(salary), department_id
FROM employees
GROUP BY department_id;

step2:连接step1的结果集和employees

SELECT employee_id, last_name, salary
FROM (
SELECT AVG(salary) ag, department_id
FROM employees
GROUP BY department_id
) ag_dep
INNER JOIN employees e
ON e.department_id = ag_dep.department_id
WHERE salary > ag_dep.ag;

(4)查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名

step1:查询姓名中包含字母u的员工的部门

SELECT DISTINCT department_id
FROM employees
WHERE last_name LIKE ‘%u%’;

step2:查询部门号=step1中的任意一个的员工号和姓名【where后面,列子查询】【列子查询:一列多行】

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的部门工作的员工的员工号

step1:查询location_id为1700的部门

SELECT DISTINCT department_id
FROM departments
WHERE location_id = 1700;

step2:查询部门号=step1中的任意一个的员工号【“= any” 等价于 “in”】

SELECT employee_id
FROM employees
WHERE department_id IN (
SELECT DISTINCT department_id
FROM departments
WHERE location_id = 1700
);

(6)查询管理者是K_ing的员工姓名和工资

step1:查询姓名为k_ing的员工编号

SELECT DISTINCT employee_id
FROM employees
WHERE last_name = ‘k_ing’;

step2:查询哪个员工的manager_id = (step1)

SELECT last_name, salary
FROM employees
WHERE manager_id IN (
SELECT DISTINCT employee_id
FROM employees
WHERE last_name = ‘k_ing’
);

(7)查询工资最高的员工的姓名,要求first_name和last_name显示为一列,列名为 姓.名

step1:查询最高工资

SELECT MAX(salary)
FROM employees;

step2:查询工资=step1的姓.名

SELECT CONCAT(first_name, last_name) ‘姓.名’
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值