ETL-笔试题(二)答案

ELT 笔试题
(难易比例 60%,40%)

一 .选择题 (每题 1分)
1、在sql的查询语句中,用于分组查询的语句是(  C  )。
a)order by    b)where     c)group by         d)having

2、在“学生情况.dbf”表中,查询计算机专业、助学金大于40元的学生的姓名,正确的语句是(  C )。
a)select 姓名 from 学生情况 where 计算机 .and.助学金<40
b)select 姓名 from 学生情况 where 专业=“计算机”.or.助学金>40
c)select 姓名 from 学生情况 where 专业=“计算机”.and.助学金>40
d)select 姓名 from 学生情况 where 专业=“计算机”.and.助学金<40

3、下列sql语句中,修改表结构的是(   A )。 
a)alter         b)create    c)desc                d)rename

4、已知职工表emp有工号e_no和工资e_sal两个字段。从职工关系中检索所有工资值,要求在输出结果中没有重复的工资值,则sql的命令语句能实现上述功能的是(  B )。
a)select  all  e_sal  from  emp     
b)select  distinct   e_sal  from  emp
c)select  e_sal  from  emp            
d)select  e_sal  where  emp

5、请选出属于dml的选项( C )
a) truncate   b)creat   c)delete   d)commit

6、视图的数据存放在哪里( A )
a.数据库的表中                     b.数据字典的select语句中 
c.from列表的第一个表格的select语句中  d.列表的第二个表格的select语句中

7、当fetch执行失败时,哪种游标的属性值为true( C )
a.%isopen         b.%found       c.%notfound        d.%rowcount

8、下列那些说法是正确的( BD )
a)        一个事务中的某条sql命令提交时,其它sql命令可以不提交。
b)        在一个关系表中,主键可唯一标识一行记录。
c)        一个关系表中的外键必定是另一表中的主键。
d)        回滚可以在事务失败时,回到操作事务前的数据状态。

9、假如一个变量的值为null,有一条if语句,
    if变量=null
分支1
else
分支2
请问最终执行的结果是( B )
  a) 分支1   b)分支2  c)系统错误提示   d)都没有执行

10、关于主键(primary key)和唯一索引(unique index)的说法哪些是错误的?( C )
a、        唯一索引的列允许为null值 
b、          主键的列不允许为null值
c、          一个表只能有一个唯一索引

三 简答题(或者上机) (前3题每题10分,4题每问6分)
1)不借助第三方工具查看执行计划
1、使用Explain Plan,查询PLAN_TABLE;
   EXPLAIN   PLAN
      SET STATEMENT_ID=‘QUERY1’
      FOR
      SELECT *
      FROM a
      WHERE aa=1;
   SELECT    operation, options, object_name, object_type, ID, parent_id
       FROM plan_table
      WHERE STATEMENT_ID = ‘QUERY1’
   ORDER BY ID; 
2、SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics
   SET AUTOTRACE ON; 包含执行计划和统计信息

2)格式转换
学生 科目 成绩
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100

将上述表结构信息转换为一下格式
学生 语文 数学 英语
student1 80 70 60
student2 90 80 100
select T1.学生 as 学生, T1.成绩 as 语文,T2.成绩 AS 数学,T3.成绩 AS 英语 FROM 表 T1, 表 T2,表 T3 WHERE T1.学生 = T2.学生 AND T1.学生 = T3.学生 AND T1.科目 = ‘语文’ AND T2.科目 = ‘数学’ AND T3.科目 = ‘英语’

3)树形展示
RID RNAME PID ISLEAF ALEVEL
1 1 IT课程 0 0 0
2 2 开发类 1 0 1
3 3 Shell编程 2 1 2
4 4 C# 2 1 2
5 5 Oracle 2 0 2
6 6 pl/sql 5 1 3
7 7 维护类 1 0 1
8 8 Linux维护 7 1 2
9 9 JAVA 2 0 2
10 10 JSP 9 1 3
isleaf 0非叶子节点(下面还有数据) 1叶子节点(下面没有数据)
alevel 为第几节点 0 为根节点
将上述能容以树形结构显示
IT课程
开发类
Shell编程
C#
Oracle
pl/sql
JAVA
JSP
维护类
Linux维护

答 :
–标准答案
select * from temp t start with t.RID = ‘1’
connect by prior t.PID = t.RID;
–如果连续用可以用这个
select case ALEVEL when 0 then ‘’ when 1 then ’ ’ when 2 then ’ ’ when 3 then ’ ’ end||t.RNAME from temp t
order by to_number(RID) ;

4)sql 编程
EMP 表
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
1 7369 SMITH CLERK 7902 1980-12-17 800.00 20
2 7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
3 7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
4 7566 JONES MANAGER 7839 1981-4-2 2975.00 20
5 7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
6 7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7 7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
8 7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
9 7839 KING PRESIDENT 1981-11-17 5000.00 10
10 7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
11 7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
12 7900 JAMES CLERK 7698 1981-12-3 950.00 30
13 7902 FORD ANALYST 7566 1981-12-3 3000.00 20
14 7934 MILLER CLERK 7782 1982-1-23 1300.00 10

DEPT 表
DEPTNO DNAME LOC
1 10 ACCOUNTING NEW YORK
2 20 RESEARCH DALLAS
3 30 SALES CHICAGO
4 40 OPERATIONS BOSTON

1.每组工资最高的人的资料
SELECT * FROM EMP T WHERE T.SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO)

select e.* from emp e,(select deptno,max(sal) ssal
from emp group by deptno) m
where e.deptno=m.deptno and e.sal=m.ssal;

2.每个部门中低于本部门平均工资的人
SELECT * FROM EMP T WHERE T.SAL < (SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)

3.查看工资最高的人第4-8人
SELECT * FROM (SELECT ROWNUM AS NUM ,* FROM (SELECT * FROM EMP ORDER BY SAL DESC) T) WHERE NUM>=4 AND NUM <=8

4.不用组函数求薪水最高
SELECT ROWNUM ,* FROM (SELECT * FROM EMP ORDER BY SAL DESC) T) WHERE ROWNUM = 1

5.直属领导下大于2名员工的人
SELECT * FROM EMP WHERE MGR IN
(SELECT MGR FROM EMP GROUP BY MGR HAVING COUNT(*) > 2)

你可能感兴趣的:(试题)