MySQL小练之子查询

1.查询和 Zlotkey 相同部门的员工姓名和工资

思考:
  首先对题目进行拆分,以 “ 的 ” 为界限,①查询Zlotkey 相同部门;②查询员工姓名和工资
  ①+②可得出想要查询的内容

我的答案:

  ①部分的查询语句,很成功!

SELECT department_id
	FROM employees
	WHERE last_name = "Zlotkey "

  ②部分的查询语句

SELECT  department_id,last_name,salary
FROM employees
//没有指明查询的条件是啥,就相当于没有对查询语句进行条件限制,So,没有卵用
WHERE (
	SELECT department_id
	FROM employees
	WHERE last_name = "Zlotkey "
)

正确答案:

SELECT  department_id,last_name,salary
FROM employees
WHERE department_id=(
	SELECT department_id
	FROM employees
	WHERE last_name = "Zlotkey "
)

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

思考:
  首先对问题进行拆分可知(以 “ 的 ” 为界限),①查询公司平均工资;②查询员工号,姓名和工资。③结合①部分和②部分,即可得出想要查询的内容

  ①部分的查询语句,很成功!

SELECT AVG(salary)
FROM employees

  ②部分的查询语句,很成功!

SELECT employee_id,last_name,salary
FROM employees

  ③部分,很成功!

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

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

思考
  本题我采用内连接,连接employees表和departments表,如果不连接的话就是下面的这个错误例子:↓
错误例子:结果表明只能查询到本部门平均工资最高的那位员工信息

select department_id,employee_id,last_name,salary
from employees
where salary >(
	SELECT AVG(salary) AS 本部门平均工资
	FROM employees

)
GROUP BY department_id

正确语句如下:

SELECT employee_id,last_name,salary,e.department_id
FROM employees e
INNER JOIN (
#通过employees表中的department_id来进行连接
	SELECT AVG(salary) ag,department_id
	FROM employees
	GROUP BY department_id


) ag_dep
ON e.department_id = ag_dep.department_id
WHERE salary>ag_dep.ag ;

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

思考
  首先对问题进行拆分,①姓名中包含字母u的员工;②在相同部门的员工;③员工号和姓名
  这道题我的答案和老师的不一样,It’s very interesting!
我的查询语句:

SELECT employee_id,last_name
FROM employees e
INNER JOIN(
	SELECT department_id
	FROM employees	
	GROUP BY department_id
) AS dp
ON e.department_id = dp.department_id
WHERE last_name LIKE "%u%"

老师的查询语句:

SELECT last_name,employee_id
FROM employees
WHERE department_id IN(
	SELECT  DISTINCT department_id
	FROM employees
	WHERE last_name LIKE '%u%'
);

  但是发现老师的查询语句的结果不符合题目所给的条件——包含字母 u 的员工

  老师的查询结果如下:
在这里插入图片描述
我的查询结果如下:
在这里插入图片描述

Maybe,She’s Wrong.

5.查询在部门的location_id 为 1700 的部门工作的员工的员工号

思考:
  首先对题目进行拆分可知,①在部门的location_id为1700;②在部门工作的员工的员工号。
我的查询语句如下:

SELECT employee_id
FROM employees e
INNER JOIN(
		SELECT department_id
		FROM  departments
		WHERE location_id = 1700
		GROUP BY department_id
) dp
ON e.`department_id` = dp.department_id

老师的查询语句如下:

SELECT employee_id
FROM employees
WHERE department_id =ANY(
	SELECT DISTINCT department_id
	FROM departments 
	WHERE location_id  = 1700

);

结果一样!

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

思考;
①查询管理者K_ing
②查询K_ing手下的员工姓名和工资

我的代码如下:使用内连接进行查询操作

SELECT last_name,salary
FROM employees e
INNER JOIN (
	SELECT employee_id
	FROM employees 
	WHERE last_name="K_ing"
) m
ON e.manager_id = m.employee_id

老师的代码如下:

SELECT last_name,salary
FROM employees
WHERE manager_id IN(
	SELECT employee_id
	FROM employees
	WHERE last_name  = 'K_ing'

);

  结果一样!

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

思考:
①查询最高工资
②查询最高工资员工姓名

我的代码如下:

SELECT CONCAT(first_name,last_name) AS 姓·名
FROM employees
WHERE salary =(
		SELECT MAX(salary)
		FROM employees
)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是希望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值