homework_2_ch3_20150413_SQL参考答案1
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) 解释:该查询语句使用了子查询和联结操作,条件是工资收入最高的职工。
- 粉丝: 30
- 资源: 307
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0