homework_2_ch3_20150413_SQL参考答案1
本文档是关于 SQL 语言的查询操作练习,共有 9 个问题,涵盖了关系数据库的基本操作,包括检索、联结、分组、子查询等。下面将逐一解释每个问题的答案。
1. 检索所有部门负责人的工号和姓名
select eno, ename from E, D where E.eno = D.mgreno
解释:该查询语句使用了联结操作,连接了职工表 E 和部门表 D,条件是职工的工号等于部门的负责人工号。
2. 检索职工 Smith 所参与的项目的编号和名称
select pno, pname from E, W, P where ename = ‘Smith’ and E.eno = W.eno and W.pno = P.pno
解释:该查询语句使用了三表联结,连接了职工表 E、工作表 W 和项目表 P,条件是职工姓名为 Smith,并且职工的工号等于工作的工号,工作的项目编号等于项目的编号。
3. 检索拥有两个或两个以上家属的职工的姓名
答案 1:
Select ename from E, Depend D1, Depend D2
Where E.eno = D1.eno and D1.eno = D2.eno and D1.name <> D2.name
答案 2:
select ename from E
Where 2 <= some (select count(*) from Depend Where E.eno = Depend.eno)
解释:该查询语句使用了子查询和联结操作,答案 1 使用了两次联结,条件是职工的工号等于家属的工号,并且家属的姓名不同。答案 2 使用了子查询,条件是家属的数量大于等于 2。
4. 检索不带家属的职工的姓名
select ename from E
where eno NOT IN (select eno from Depend)
解释:该查询语句使用了 NOT IN谓词,条件是职工的工号不在家属表中。
5. 检索只参加过‘p2’号项目的职工的姓名
答案 1:
Select eno from W
where eno NOT IN (select eno from W where pno <> ‘p2’)
答案 2:
Select eno from W W1
where NOT EXISTS (select * from W W2 where W2.pno <> ‘p2’ and W2.eno = W1.eno)
解释:该查询语句使用了 NOT IN谓词和 NOT EXISTS 谓词,条件是职工只参加过‘p2’号项目。
6. 检索只参加过一个项目的职工的姓名
答案 1:
Select ename from E
Where 1 = some (select count(*) from W where W.eno = E.eno)
答案 2:
Select ename from E
where eno IN (select eno from W group by eno having count(*) = 1)
答案 3:
Select ename From E, (select eno, count(*) as pnumber from W group by eno) X
Where E.eno = X.eno and X.pnumber = 1
解释:该查询语句使用了子查询和联结操作,条件是职工只参加过一个项目。
7. 检索参加了所有项目的职工的工号
答案 1:
Select eno from E
Where NOT EXISTS (Select * from P where NOT EXISTS (Select * from W where W.eno = E.eno and W.pno = P.pno))
答案 2:
Select eno from E
Where NOT EXISTS (Select * from P where P.pno NOT IN (Select W.pno from W where W.eno = E.eno))
解释:该查询语句使用了 NOT EXISTS 谓词,条件是职工参加了所有项目。
8. 检索全体 3 号部门的职工都参加了的项目的编号和名称
答案 1:
Select pno, pname from P
where NOT EXISTS (Select * from E where E.dno = 3 and NOT EXISTS (Select * from W where W.eno = E.eno and W.pno = P.pno))
解释:该查询语句使用了 NOT EXISTS 谓词,条件是全体 3 号部门的职工都参加了的项目。
9. 检索工资收入最高的职工的姓名
答案 1:
Select ename from E E1
where NOT EXISTS (select * From E E2 where E2.salary > E1.salary)
答案 2:
Select ename from E
where salary = (select max(salary) from E)
答案 3:
Select ename from E
where eno = (select eno from E order by salary desc limit 1)
答案 4:
Select ename from E
where salary = (select max(salary) from E)
解释:该查询语句使用了子查询和联结操作,条件是工资收入最高的职工。
评论0