《实践二 连接查询与子查询》由会员分享,可在线阅读,更多相关《实践二 连接查询与子查询(4页珍藏版)》请在金锄头文库上搜索。
1、数据库开发技术数据库开发技术课程之实践二课程之实践二连接查询与子查询连接查询与子查询一、一、 实践目的实践目的1 掌握子查询的使用,包括在: having 子句中;from 子句中; CREATE, UPDATA, INSERT, DELETE 语句中; 2 掌握多列子查询和相关子查询的使用; 3 掌握 TOP-N 的使用方法; 4 掌握内连接、外连接的查询方法。二、二、 实践内容和要求实践内容和要求第一部分:使用第一部分:使用 SQL 语句完成以下查询要求。语句完成以下查询要求。1.查询每一部门的职工人数,要求:1)结果显示部门号、部门名称和职工人数。2)部门表中的所有部门都要统计。 代码:
2、 select d.deptno “部门号“,d.dname “部门名称“,count(e.empno)“职工人数“ from dept d,emp e where e.deptno(+)=d.deptno group by d.deptno,d.dname;2.查询其他部门中比 10 号部门所有职工工资都少的职工完整信息,至少用两种方法实现。 select e.* ,d.dname,d.loc from emp e,dept d where d.deptno=e.deptno and e.deptno!=10 and e.sal10 and e.deptno=d.deptno and e.s
3、al=any(select sal from emp where deptno=10) and e.job in (select job from emp where deptno=10);4.查询哪些部门的平均工资大于该全部职工的平均工资。 (两种方法:from 子句中的子查询和相关的子 查询) (个人觉得本人所写的两种方法一样。 。 。 。相当于一种) 方法一: select a.deptno as “符合要求的部门号“ from (select deptno,avg(sal) aa from emp group by deptno)a where a.aa(select avg(sal)
4、 from emp ); 方法二: select a.deptno “符合要求的部门号“ from (select deptno,avg(sal) aa from emp group by deptno)a,(select avg(sal) bb from emp )b where a.aab.bb;5.查询工资第 4 高的员工的工号、姓名和薪水(假设 SAL 子段作了惟一限制。 ) (提示:使用 from 子查 询语句、内嵌视图和 ROWNUM 伪列) select a.empno,a.ename,a.sal from (select rownum r,empno ,sal ,ename f
5、rom emp where rownum3;select a.empno,a.ename,a.sal from (select empno,ename,sal,rownum r from emp)a where r=4;6.设计左外连接查询、右外连接查询和全外连接查询。Eg:查询职工编号、姓名、部门号及其所在部门的名称 select e.empno,e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno;第一部分的附加题部分:第一部分的附加题部分:1.查询 emp 表中各部门职工数占全部人数的百分比 selec
6、t a.deptno,(a.every/b.total)*100 各部门职工数的百分比 from (select count(empno) every,deptno from emp group by deptno) a , (select count(empno) total from emp) b ;2.查询工资低于本部门平均工资的员工信息 select a.* from emp a,(select avg(sal) bb,deptno from emp group by deptno)b where a.sal30;第二部分:第二部分: 自己设计实例完成在 CREATE, UPDATA, INSERT, DELETE 语句中使用子查询的实践;