1. ORACLE数据库物理结构包括以下三种文件,以下不属于的是( )
2.
A.系统文件 B.日志文件 C.数据文件 D.控制文件
3. 下列哪个命令是用于ORACLE中数据导出的 ( )
A.exp B.imp C.input D.output 4. ( )是用于控制数据访问的语言。
A.DML B.DDL C.DCL D.DLL 5. NULL表示什么( )
A.0 B.空格 C.值 D.没有值 6. 下面四个语句中哪一个是正确的?( )
A. SELECT * , ENAME FROM EMP; B. DELETE * FROM EMP;
C. SELECT DISTINCT EMPNO ,HIREDATE FROM EMP; D. SELECT ENAME|SAL AS “name” FROM EMP ;
7. 假定有一张表用户表users,其中一身份证字段ID_card。为了维护数据的完整性,在
设计数据库时,最好对ID_card字段添加约束,请问应该添加什么约束( ) A. primary key
B.check C.default
D.not null
8. 下面哪一个like命令会返回名字象HOTKA的行?( )
A. where ename like ‘_HOT%' B. where ename like ‘H_T%' C. where ename like ‘%TKA_' D. where ename like ‘%TOK%'
9. ( )操作符只返回由第一个查询选定但是没有被第二个查询选定的行。
A. UNION
1
-
B. UNION ALL C. INTERSECT D. MINUS
9.EMPLOYEES表的结构如下:
EMPLOYEE_ID NUMBER PRIMARY KEY FIRST_NAME VARCHAR2(25) LAST_NAME VARCHAR2(25) HIRE_DATE DATE 考虑下面的语句。
1.CREATE table new_emp (employee_id NUMBER,name VARCHAR2(30)); 2.INSERT INTO new_emp SELECT employee_id,last_name from employees; 3.Savepoint s2; 4.DELETE from new_emp; 5.ROLLBACK to s2; 6.DELETE from new_emp where employee_id=180; 7.UPDATE new_emp set name=’James’; 8.ROLLBACK to s2; 9.UPDATE new_emp set name =’James’WHERE employee_id=180; 10.ROLLBACK; 完成本次事务处理以后,以下说法正确的有( ) A. 表中没有行。
B. 有一个姓名为James的员工。
2
-
C. 不能多次回滚到相同的保存点。
D. 由于已经删除了员工ID180,因此最后一次更新未更新任何行。
10.以下运算结果不为空值的是( )
A.12+NULL B.60*NULL C.NULL‖’NULL’ D.12/(60+NULL)
11.若当前日期为’25-5月-06’,以下( )表达式能计算出5个月后那一天所在月份的最
后一天的日期。
A.NEXT_DAY(ADD_MONTHS(’28-5月-06’,5)) B.NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) C.LAST_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) D.LAST_DAY(ADD_MONTHS(’28-5月-06’,5)) 12.( )子句用于列出唯一值。
A.unique B.distinct C.order by D.group by 13.哪一个是子查询执行的顺序( )
A.最里面的查询到最外面的查询 B.最外面的查询到最里面的查询 C.简单查询到复杂查询 D.复杂查询到简单查询
14.下面哪一个语句可以使用子查询( )
A.SELECT 语句 B.UPDATE语句
3
-
C.DELETE语句 D.以上都是
15.如果表DEPT包含3条记录,现在用如下命令对其进行修改,
ALTER TABLE DEPT ADD (COMP NUMBER(4) NOT NULL); 请问下面哪一个说法是正确的( ) A.该语句在表的最前面插入一个非空列 B.该语句在表的最后插入一个非空列
C.该语句执行完成后,应当立即执行COMMIT语句,以确保更改生效 D.该语句将产生错误
16.下列哪个是组合主键的特征( )
A.每列有唯一的值,但不是NULL值
B.组合有唯一的值,并且其中每列没有NULL值 C.组合的第一列和最后一列有唯一值
D.组合的第一列和最后一列有唯一值,但没有NULL值
17.当删除父表中的数据时,在CREATE TABLE语句的外键定义中指定的(除子表中的数据。
A.ON TRUNCATE CASCADE B.ON DELETE CASCADE C.ON UPDATE CASCADE D.A和C都是 18.视图可以用于( )
A.限制对表中指定列的访问 B.限制对表中行的子集的访问
4
)选项删 -
C.A和B都是 D.A和B都不是
19.语句SELECT * FROM dept WHERE NOT EXISTS (SELECT * FROM emp WHERE deptno=dept.deptno)执行后的结果为( ) A.只显示存在于EMP表中的部门全部信息。 B.只显示不存在于EMP表中的部门全部信息 C.未返回任何数据
D.显示DEPT表中的全部信息
20.已创建序列S1,若当前值为2,先执行3次S1.CURRVAL,再执行3次S1.NEXTVAL,最后S1的值是( )
A.3 B.4 C.5 D.6
21. 数据库中有两个用户scott和myuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( ) A.select*from scott.wz where wunit is null and rownum<5; B.select*from myuser.wz where wunit = null and rownum<5; C.select*from myuser.wz where wunit is null and rownum<6; D.select*form scott.wz where wunit is null and rownum<6; 22.若用户要连接数据库,则该用户必须拥有的权限是( )
A.create table B.create index C.create session D.connect
23.授予删除任何表的系统权限(DROP ANY TABLE)给user1,并使其能继续授该权限给
5
-
其他用户,以下正确的SQL语句是( ) A.Grant drop any table to user1;
B.Grant drop any table to user1 with admin option; C.Grant drop table to user1;
D.Grant drop any table to user1 with check potion;
24.当给一个有主键的表中插入重复行时,将引发下列哪个异常?( )
A.NO_DATA_FOUND B.TOO_MANY_ROWS C.DUP_VAL_ON_INDEX D.ZERO_DIVIDE 25.下面的查询中哪一个会产生笛卡尔集?( )
A.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno;
B.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d; C.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d WHERE e.empno = 101 and e.deptno = d.deptno;
D.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d WHERE e.deptno= d.deptno and d.deptno = 60;
26.当每个非主键列完全依赖于(整个)主键列时,关系设计属于下列哪一种形式(A.第一范式 B.第二范式 C.第三范式 D.第四范式 27.一般在( )中有机会使用:NEW和:OLD A.游标 B.存储过程 C.函数 D.触发器 28.在Oracle中,PL/SQL块中定义了一个带参数的游标:
CURSOR emp_cursor(dnum NUMBER) IS
6
) -
SELECT sal, comm FROM emp WHERE deptno = dnum; 那么正确打开此游标的语句是( ) A. OPEN emp_cursor; B. OPEN emp_cursor FOR 20; C. OPEN emp_cursor USING 20;
D. FOR emp_rec IN emp_cursor(20) LOOP … END LOOP; 29.下面哪些是函数中的有效参数模式?( )
A.IN B. INOUT C.OUT D. OUT IN
30.( )是一个单一的逻辑工作单元。
A.记录 B.数据库 C.事务
1. 数据定义语言是用于( )的方法。〔选择一项〕
A. 确保数据的准确性 C、查看数据
B、定义和修改数据结构
D.字段
D、删除和更新数据
2. 要以自身的模式创建私有同义词,用户必须拥有( )系统权限。〔选择一项〕
A. CREATE PRIVATE SYNONYM B. CREATE PUBLIC SYNONYM C. CREATE SYNONYM D. CREATE ANY SYNONYM
3. 通常情况下,( )值可以唯一地标识数据库中的一行。〔选择二项〕
A. ROWNUM
7
-
B. PRIMARY KEY C. UNIQUE D. ROWID
4. Oracle中,表名应该严格遵循下列哪些命名规则( )(选择二项)
A. 表名的最大长度为20个字符 B. 表名首字符可以为字母或下划线
C. 同一用户模式下的不同表不能具有相同的名称 D. 不能使用Oracle保留字来为表命名
5. 在设计数据库时,要充分考虑数据的完整性或准确性。下面关于primary key和unique
的描述错误的是( )〔选择二项)
A. primary key用来在表中设置主键,主键列的值是可以重复的,用来唯一标识表中的
每一条记录
B. primary key列和unique列都不可以有null值
C. 设为unique的列的值是不能重复的,用来唯一区别unique列的值 D. primary key列不可以有null值, 而unique列是可以有null的
6. 假定有一张表用户表users,其中一身份证字段ID_card。为了维护数据的完整性,在
设计数据库时,最好对ID_card字段添加约束,请问应该添加什么约束( )(选择一项)
A. primary key
B、check C、default
D、unique
7. 下面哪个命令不属于数据操纵语言(DML)( )(选择二项)
A. ALTER… B. INSERT…
8
-
C、 UPDATE… D、 DROP…
8. ( )操作符只返回由第一个查询选定但是没有被第二个查询选定的行。〔选择一项〕
E. UNION F. UNION ALL G. INTERSECT H. MINUS
9. EMPLOYEES表的结构如下:
EMPLOYEE_ID NUMBER PRIMARY KEY FIRST_NAME VARCHAR2(25) LAST_NAME VARCHAR2(25) HIRE_DATE DATE 考虑下面的语句。
1.CREATE table new_emp (employee_id NUMBER,name VARCHAR2(30)); 2.INSERT INTO new_emp SELECT employee_id,last_name from employees; 3.Savepoint s2; 4.DELETE from new_emp; 5.ROLLBACK to s2; 6.DELETE from new_emp where employee_id=180; 7.UPDATE new_emp set name=’James’; 8.ROLLBACK to s2; 9.UPDATE new_emp set name =’James’WHERE employee_id=180;
9
-
10.ROLLBACK; 完成本次事务处理以后,以下说法正确的有( )(不定项选择) E. 表中没有行。
F. 有一个姓名为James的员工。 G. 不能多次回滚到相同的保存点。
H. 由于已经删除了员工ID180,因此最后一次更新未更新任何行。
10.
删除emp表中所有数据,且可以rollback,以下语句哪个命令可以实现( )(选
择一项)
A. truncate table emp B. drop table emp C. delete * from emp D. delete from emp
11. 你发出命令: DROP TABLE emp;
此时你还没有明确发出COMMIT命令。你能用什么命令撤消上面的drop语句所做的操作?( )〔选择一项〕 A. 关闭数据库
B. 什么命令都不可以,因为DDL语句不能被回滚 C. 发出一个ROLLBACK命令 D. 终断正在活动的会话 12.
表ORDERS的结构定义如下:
ORDER_ID NUMBER(4) NOT NULL; CUSTOMER_ID NUMBER(12) NOT NULL; 10
-
ORDER_TOTAL NUMBER(10.2); 下列哪两个语句,能检索出预定总量在100.00与2000.00之间的记录? ( )〔不定项选择〕
A. SELECT customer_id,order_id,order_total FROM orders HAVING order_total
BETWEEN 100 AND 2000;
B. SELECT customer_id,order_id,order_total FROM orders WHERE order_total
BETWEEN 100 AND 2000; C. SELECT
customer_id,order_id,order_total
FROM
orders
WHERE
order_total>=100 AND <=2000;
D. SELECT customer_id,order_id,order_total FROM orders HAVING ON
order_total (100 and 2000) INCLUSIVE; E. SELECT
customer_id,order_id,order_total
FROM
orders
WHERE
order_total>=100 AND order_total<=2000;
13. 以下哪些是有效的Oracle约束类型?( )(选择四项)
A. UNIQUE B.NONUNIQUE C. CHECK D.CASCADE E. PRIMARY KEY F.CONSTANTG G.NOT NULL
14. 更改oracle用户HR,使其变为不可用(锁定)状态( )〔选择一项〕
A. UPDATE USER HR ACCOUNT DISABLE ; B. UPDATE USER HR ACCOUNT LOCK ; C. ALTER USER HR ACCOUNT LOCK ;
11
-
D. ALTER USER HR ACCOUNT DISABLE ;
15. INSERT INTO TEST VALUES(‘&ID’, ’&NAME’); 语句在执行时将( )〔选
择一项〕
A. 编译错:提示变量未定义 B. 运行错:提示不能识别符号 C. 将值&ID和&NAME插入到表中
D. 提示用户输入输入ID和NAME的值,再将输入值插入表中 16. 下面关于删除视图的说法哪一个是正确的( )。(选择一项)
A. 删除视图后应立即用COMMIT语句使更改生效 B. 删除视图后,和视图关联的表中的数据不再存在 C. 视图被删除后视图中的数据也将被删除
D. 用dorp VIEW删除视图
17.
( )函数通常用来计算累计排名、移动平均数和报表聚合等。〔选择一项)
A. 汇总 B. 分析 C. 分组 D. 单行
18. 集合操作符Intersect的作用是( )〔选择一项〕
A. 将两个记录集联接起来
B. 选择第一个查询有,而第二个没有的记录 C. 选择二个查询的交集
D. 选择第二个查询有,而第一个没有的记录
12
-
19. EMP1表包含下面这些字段。
ENAME VARCHAR2(35) SALARY NUMBER(8,2) HIRE_DATE DATE 管理部门想要一份已在公司工作了5年以上的员工名单。以下哪个SQL语句可以显示需要的结果。( )(选择一项)
A. SELECT ENAME FROM EMP1 WHERE SYSDATE-HIRE_DATE>5; B. SELECT ENAME FROM EMP1 WHERE HIRE_DATE-SYSDATE>5; C. SELECT ENAME FROM EMP1 WHERE (SYSDATE-HIRE_DATE)/365>5; D. SELECT ENAME FROM EMP1 WHERE (SYSDATE-HIRE_DATE)*365>5; 20. 在Oracle中,使用下列的语句:
CREATE PUBLIC SYNONYM parts FOR Scott.inventory;
完成的任务是( )。(选择一项)
A. 需要给出schema被除去的对象名 B. 指定了新的对象权限 C. 指定了新的系统权限
D. 给Scott.inventory对象创建一个公用同义词parts
21. 在Oracle中,有一个名为seq_id的序列对象,假定此时查看seq_id序列当前值显示
为100,那么执行下面的sql
insert into test(id, name) values(seq_id.NEXTVAL,'tom' );
很不幸,这个insert没有执行成功,随后马上执行rollback,问:此时查看seq_id序列当前值显示为(
)〔选择一项〕
13
-
A. 99
B、100
C、101 D、不能确定
22. PL/SQL块中不能直接使用的SQL命令是( )〔选一项〕
A. SELECT B. INSERT C. UPDATE D. DROP
23. 在PL/SQL块中,以零作除数时会引发下列( )异常。(选择一项)
A. VALUE_ERROR B. ZERO_DIVIDE C. VALUE_DIVIDE D. ZERO_ERROR
24. 在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列
值增加的是( )(选择一项) A. select seq.ROWNUM from dual; B. select seq.NEXTVAL from dual; C. select seq.CURRVAL from dual; D. select seq.CURIVAL from dual;
25. 当Select Into语句的返回没有数据时,将引发下列哪个异常?( )[选择一项]
A. No_Data_Found B. To_Many_Row C. Too_Many_Rows
14
-
D. Invalid_Number
26. 创建序列时,若未指定Cycle选项,则当前值大于MaxValue时将( )〔选择一项〕
A. 从MinValue重新开始循环 B. 重复使用MaxValue 值 C. 执行出错 D. 使用随机值
27. PL/SQL块中哪几部分是可选的( )〔选择二项〕
A. Declare B. Begin C. Exception D. 以上均是
28. 在Oracle中,PL/SQL块中定义了一个带参数的游标:
CURSOR emp_cursor(dnum NUMBER) IS
SELECT sal, comm FROM emp WHERE deptno = dnum; 那么正确打开此游标的语句是( )(选择两项) E. OPEN emp_cursor(20); F. OPEN emp_cursor FOR 20; G. OPEN emp_cursor USING 20;
H. FOR emp_rec IN emp_cursor(20) LOOP … END LOOP; 29. 在Insert触发器中可使用的引用有( )〔选一项〕
A. new
15
-
B. Old C. :Update D. :New和:Old
30. 下面哪些是过程中的有效参数模式?( )〔不定项选择〕
A.IN B. INOUT C.OUT D. OUT IN
1.检索部门编号、部门名称、部门所在地及其每个部门的员工总数。
select d.deptno,d.dname,d.loc,count(*) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.dname,d.loc;
2.检索员工和所属经理的姓名。
select e.ename 雇员,m.ename 经理 from emp e,emp m where e.mgr=m.empno;
3. 检索工资等级处于第四级别的员工的姓名。
select e.ename from emp e inner join salgrade s on (e.sal between s.losal and s.hisal) where s.grade=4;
4.检索工资等级高于smith的员工信息。
select * from emp e join salgrade s on (e.sal between s.losal and s.hisal) where s.grade>(select distinct s.grade from emp e join salgrade s on ((select sal from emp where ename='SMITH') between s.losal and s.hisal)); 16
-
5.检索30部门中1980年1月份之前入职的员工信息。显示:员工号、员工名、部门号,部门名、入职日期。
select empno,ename,d.deptno,d.dname,hiredate from emp,dept d where emp.deptno=d.deptno and d.deptno=30 and hiredate select e.ename 雇员,m.ename 经理,e.HIREDATE 雇员的雇佣日期,m.hiredate 经理雇佣日期 from emp e,emp m where e.mgr=m.empno and e.hiredate select empno,ename,sal,deptno from emp order by deptno desc,sal; 8.检索不同部门经理的最低工资。 select m.ename,e.empno,e.sal from emp e,emp m where e.mgr=m.empno and e.deptno in (select deptno from emp group by deptno) and e.sal in (select min(sal) from emp group by deptno); 9.检索部门号及其本部门的最低工资。 select deptno,min(sal) from emp group by deptno; 17 - 10.检索从事clerk工作的员工姓名和所在部门名称。 select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno where e.job='CLERK'; 11.检索和名叫SCOTT的员工相同工资的员工信息,但不显示SCOTT。显示字段:员工号、员工名、工资。 select empno,ename,sal from emp where sal =(select sal from emp where ename='SCOTT') and ename!='SCOTT' 12. 检索与SCOTT从事相同工作的员工信息。 select * from emp where job=(select job from emp where ename='SCOTT'); 13.检索出员工表emp中的第3条到第8条记录。显示字段:emp表中的全部字段。 select * from (select rownum num,e.* from emp e) where num>=3 and num<=8; 14. 检索与30部门员工工资等级相同的员工姓名与工资。 select * from emp e join salgrade s on (e.sal between s.LOSAL and s.HISAL) where s.grade=(select distinct s.grade from emp e join salgrade s on ((select avg(sal) from emp where deptno=30) between s.LOSAL and s.HISAL)); 18 - 15. 求分段显示薪水的个数。显示结果如下: DEPTNO 800-2000 2001-5000 ------ ---------- ---------- 30 5 1 20 2 3 10 1 2 select t1.deptno, \"800-2000\\"2001-5000\" from ( select deptno , count(*) as \"800-2000\" from emp where sal between 800 and 2000 group by deptno ) t1 join ( select deptno , count(*) as \"2001-5000\" from emp where sal between 2001 and 5000 group by deptno) t2 on t1.deptno = t2.deptno; 16. 用PL/sql实现输出7369号员工的姓名。 ---用PL/sql实现输出7369员工的姓名; set serveroutput on; declare --声明部分 -- 将sql*plus的输出功能开启 19 - var_empno number(4) := 7369 ; var_name varchar2(10); var_sal number(9,2); begin --执行部分的开始 --声明一个变量var_empno ,并给赋值,用:= 赋值--声明一个变量var_name select ename ,sal into var_name ,var_sal from emp where empno = var_empno; dbms_output.put_line(var_empno || ' 的名字是 :' || var_name); dbms_output.put_line(var_empno || ' 的工资是 :' || var_ sal ); end; ----执行结果为: 7369 的名字是 : SMITH PL/SQL 过程已成功完成。 17.编写一sql语句,将7369号员工的入职日期改为1997/7/1,工资提高800 ,其他信息不变。 update emp set hiredate=to_date('1997/7/1','yyyy-mm-dd'),sal=sal+800 where empno=7369; 18.假定现在有一张表,表名为T_emp ,其表结构和现有的emp表结构完全相同,但是T_emp中没有记录,请编写一sql语句,实现将emp中部门编号为20的员工信息添加到T_emp中。 20 --执行部分的结束,end后面要加 ; --输出语句 --输出语句 - 19. 对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15%; 如果该员工职位是CLERK,并且在NEW YORK工作那么就给他薪金扣除5%;其他情况不作处理。要求:使用游标或函数编程实现。 set serveroutput on; declare cursor c1 is select * from emp; c1rec c1%rowtype; v_loc varchar2(20); begin for c1rec in c1 loop select loc into v_loc from dept where deptno = c1rec.deptno; if c1rec.job = 'MANAGER' and v_loc = 'DALLAS' then update emp set sal = sal * 1.15 where empno = c1rec.empno; elsif c1rec.job='CLERK' and v_loc = 'NEW YORK' then update emp set sal = sal * 0.95 where empno = c1rec.empno; else null; end if; end loop; end; 20. 对直接上级是'BLAKE'的所有员工,按照参加工作的时间加薪:1981年6月以前入职的员工加薪10%、1981年6月以后入职的员工加薪5%。 要求:使用游标或函数编程实现。 21 - declare cursor c1 is select * from emp where mgr = (select empno from emp where ename='BLAKE'); --直接上级是'BLAKE'的所有员工 c1rec c1%rowtype; begin for c1rec in c1 loop if c1rec.hiredate < '01-6月-81' then update emp set sal = sal * 1.1 where empno = c1rec.empno; else update emp set sal = sal * 1.05 where empno = c1rec.empno; end if; end loop; end; 22 - 1. 创建一个角色MYROLE,此角色具有建表,建视图的系统权限和查找SCOTT用户 EMP,DEPT表的权限,将此角色授权给TEST用户。 CREATE ROLE MYROLE; GRANT CREATE TABLE,CREATE VIEW TO MYROLE; GRANT SELECT ON SCOTT.EMP TO MYROLE; GRANT SELECT ON SCOTT.DEPT TO MYROLE; CREATE USER TEST IDENTIFIED BY TEST; GRANT MYROLE TO TEST; 2. 创建EMP,DEPT两张表的副表(包括它们之间的约束) CREATE TABLE mydept AS SELECT * FROM dept; ALTER TABLE mydept ADD CONSTRAINT pk_mydept_deptno PRIMARY KEY(deptno); CREATE TABLE myemp AS SELECT * FROM emp ALTER TABLE myemp ADD CONSTRAINT pk_myemp_empno PAIMARY KEY(empno); ALTER TABLE myemp ADD CONSTRAINT fk_myemp_mydept FOREIGN KEY(deptno) REFERENCES mydept(deptno); 3. 找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪 金>=2000的所有雇员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(‘manager’) and job<>upper(‘clerk’) and sal>=2000) 4. 找出不收取佣金或收取的佣金低于100的雇员 select * from emp where nvl(comm,0)<100; 5. 显示不带有'R'的雇员姓名 Select ename from emp where ename not like ‘%R%’; 6. 显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序 Select ename,job,sal from emp order by job desc ,sal asc 7. 求哪些人工资在平均工资之上,列出姓名和工资。 select ename,sal from emp where sal > (select avg(sal) from emp); 23 - 8. 显示除20部门外,部门平均工资在2500以上的部门,列出部门编号和平均工资。 select avg(sal) , deptno from emp where deptno <>20 group by deptno having avg(sal) > 2500; 9. 列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。 select * from emp where sal in (select sal from emp where deptno=30); 10. 列出所有部门的详细信息和部门人数。 select a.*,(select count(*) from emp where deptno=a.deptno) tot from dept a ; 11. 列出各种工作的最低月收入。 select job,min(sal+nvl(comm,0)) from emp group by job; 12. 返回工资水平(等级)高于平均工资水平的员工详细信息。 select * from emp e join salgrade s on (e.sal between s.losal and s.hisal) where s.grade>(select distinct s.grade from emp e join salgrade s on ((select avg(sal) from emp) between s.losal and s.hisal)); 13. 列出至少有两个员工的所有部门信息 select * from dept where deptno in (select deptno from emp group by deptno having count(*)>1); 14. 查询emp表的第6行到第10行内容 Select * from (select rownum r,e.* from emp e) where r between 6 and 10; 15. 查询入职最早的前5到10名员工的姓名和入职日期(按年月日格式显示日期) Select ename,to_char(hiredate,’yyyy-mm-dd’) from (select ename,hiredate,rownum r from (select ename,hiredate from emp order by hiredate ) where rownum<=10) where r>=5; 16. 编写一sql语句,将7369号员工的入职日期改为1997/7/1,工资提高800 ,其他信 息不变。 update empno=7369; emp set hiredate=to_date('1997/7/1','yyyy-mm-dd'),sal=sal+800 where 17. 查询雇员和其直接领导姓名及他们所在部门名称,没有领导的雇员也要列出. 24 - select e.ename,ed.dname,m.ename,md.dname from emp e,emp m,dept ed,dept md where e.deptno=ed.deptno and e.mgr=m.empno(+) and m.deptno=md.deptno(+); 18. 列出部门编号,部门名称,部门的员工数量,部门的平均工资. select d.deptno,d.dname,t.cou,t.avg from dept d,(select deptno,count(empno) cou,avg(sal) avg from emp group by deptno) t where d.deptno=t.deptno; 19. 定义游标update_cur,根据职务调整雇员的工资,如果职务为“SALESMAN”或者 “ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元,其它职务工资上调50元。 DECLARE v_job emp.job%TYPE; CURSOR update_cur IS SELECT job FROM emp FOR UPDATE; BEGIN OPEN emp_cur; LOOP FETCH update_cur INTO v_job; EXIT WHEN emp_cur%NOTFOUND; CASE WHEN v_job='SALESMAN' OR v_job='ANALYST' THEN update emp set sal=sal+100 where current of emp_cur; WHEN v_job=' MANAGER ' THEN update emp set sal=sal+200 where current of emp_cur; ELSE update emp set sal=sal+50 where current of emp_cur; END CASE; END LOOP; END; 20. 创建一个触发器,使其可以修改DEPT表的DEPTNO。 create or replace trigger update_dept after update on dept for each row begin update emp set deptno=:new.deptno where deptno=:old.deptno; end; 25 - 1. 对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15%; 如果该员工职位是CLERK,并且在NEW YORK工作那么就给他薪金扣除5%;其他情况不作处理。要求:使用游标或函数编程实现。 1. set serveroutput on; declare cursor c1 is select * from emp; c1rec c1%rowtype; v_loc varchar2(20); begin for c1rec in c1 loop select loc into v_loc from dept where deptno = c1rec.deptno; if c1rec.job = 'MANAGER' and v_loc = 'DALLAS' then update emp set sal = sal * 1.15 where empno = c1rec.empno; elsif c1rec.job='CLERK' and v_loc = 'NEW YORK' then update emp set sal = sal * 0.95 where empno = c1rec.empno; else null; end if; end loop; end; 2. 用PL/sql实现输出7369号员工的姓名。 set serveroutput on; declare --声明部分 -- 将sql*plus的输出功能开启 var_empno number(4) := 7369 ; --声明一个变量var_empno ,并给赋值,用:= 赋值var_name varchar2(10); var_sal number(9,2); begin --执行部分的开始 --声明一个变量var_name select ename ,sal into var_name ,var_sal from emp where empno = var_empno; 26 - dbms_output.put_line(var_empno || ' 的名字是 :' || var_name); dbms_output.put_line(var_empno || ' 的工资是 :' || var_ sal ); end; ----执行结果为: 7369 的名字是 : SMITH 1. 定义游标update_cur,根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元,其它职务工资上调50元。 1. DECLARE v_job emp.job%TYPE; CURSOR update_cur IS SELECT job FROM emp FOR UPDATE; BEGIN OPEN emp_cur; LOOP FETCH update_cur INTO v_job; EXIT WHEN emp_cur%NOTFOUND; CASE WHEN v_job='SALESMAN' OR v_job='ANALYST' THEN update emp set sal=sal+100 where current of emp_cur; WHEN v_job=' MANAGER ' THEN update emp set sal=sal+200 where current of emp_cur; ELSE update emp set sal=sal+50 where current of emp_cur; END CASE; END LOOP; END; 2. 创建一个触发器,使其可以修改DEPT表的DEPTNO。 --执行部分的结束,end后面要加 ; --输出语句 --输出语句 create or replace trigger update_dept after update on dept 27 - for each row begin update emp set deptno=:new.deptno where deptno=:old.deptno; end; 28 因篇幅问题不能全部显示,请点此查看更多更全内容