數據庫系統原理--第3章練習--習題答案

題目

現有某公司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)

本題解答參考:【數據庫】如何查詢選修人數最大的課程號

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