文章目錄
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
)