小糊涂学MySQL | | 子查询

0.参考资料

MySQL学习视频链接:https://edu.csdn.net/course/detail/10455
本节练习题SQL文件:https://download.csdn.net/download/YuvalNoah/12450000
操作的SQL文件:https://download.csdn.net/download/alexzt/11380406?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159020574119725219963911%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=159020574119725219963911&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2downloadfirst_rank_v2~rank_v25-1-11380406.nonecase&utm_term=myemployees.sql


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
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章