題目
現有某公司HR(人力資源)系統的關係模式如下:
Emp (emp_id,ename,age,salary,address)
// 職工(職工編號,姓名,年齡,工資,住址)
Dep (dep_id,dname,address)
// 部門(部門編號,部門名稱,部門所在地)
Works(emp_id,dep_id,begin_date, end_date)
// 工作(職工編號,部門編號,開始工作日期,離職日期)
注:Works表記錄了職工在不同時間段在公司各部門工作的履歷,
如果離職日期(end_date)爲空,表明該職工目前仍在此部門工作。
請用SQL語言實現下列7小題:
(1)查詢在部門編號爲20或者30工作的,工資大於2500元的職工信息。
(2)查詢在部門編號爲20的,並於2000年開始工作的職工姓名和年齡。
(3)將部門編號爲10的部門所有人員工資提高20%。
(4)在工作表中刪除在部門10的,工資在2000到3000元之間的職工信息。
(5)找出職工不足3人的部門,結果顯示部門編號及其相應的職工數。
(6)從職工中找出工資大於平均工資的職工信息。
(7)查詢員工人數最多的部門編號。
答案
(1)查詢在部門編號爲20或者30工作的,工資大於2500元的職工信息。
SELECT *
FROM Emp,Dep,Works
WHERE salary>'2500'
AND Works.dep_id IN(20,30)
AND Emp.emp_id=Works.emp_id
AND Dep.dep_id=Works.dep_id
(2)查詢在部門編號爲20的,並於2000年開始工作的職工姓名和年齡。
SELECT ename,age
FROM Emp,Works
WHERE Works.dep_id='20'
AND begin_date='2000'
AND Emp.emp_id=Works.emp_id
(3)將部門編號爲10的部門所有人員工資提高20%。
UPDATE Emp
SET salary=salary*1.2
WHERE emp_id IN(
SELECT emp_id
FROM Works
WHERE dep_id='10')
(4)在工作表中刪除在部門10的,工資在2000到3000元之間的職工信息。
DELETE FROM Emp
WHERE salary >= '2000'
AND salary <= '3000'
AND emp_id IN(
SELECT emp_id
FROM Works
WHERE dep_id='10')
(5)找出職工不足3人的部門,結果顯示部門編號及其相應的職工數。
SELECT Works.dep_id,COUNT(emp_id)AS'職工數'
FROM Emp,Works
WHERE Emp.emp_id=Works.emp_id
GROUP BY Works.dep_id
HAVING COUNT(emp_id)<=3
(6)從職工中找出工資大於平均工資的職工信息。
SELECT *
FROM Emp
WHERE salary >(
SELECT AVG(salary)AS '平均工資'
FROM Emp)
(7)查詢員工人數最多的部門編號。
--查詢員工人數最多的部門編號。
SELECT dep_id
FROM (--把"查詢部門編號和職工編號的人數"當作虛表A
SELECT dep_id,COUNT(emp_id) Ce
FROM Works
GROUP BY dep_id)A
WHERE Ce=(--查詢虛表A中職工編號的人數Ce的最大值
SELECT MAX(Ce)
FROM (--把"查詢部門編號和職工編號的人數"當作虛表A
SELECT dep_id,COUNT(emp_id) Ce
FROM Works
GROUP BY dep_id)A)
本題解答參考:【數據庫】如何查詢選修人數最大的課程號