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