Oracle数据库编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《Oracle数据库编程》练习
一、选择题(未标明多选的均为单选题)
1.关于Oracle中的实例描述,下列说法正确的是(多选):(cd )
A.实例是保存在硬盘上的文件,它不会随着数据库的启动/关闭而存在或消失。

B.实例是内存中的结构,是一种访问数据库的方式。

C.可以用语句Select instance_name FROM v$instance获得实例名。

D.一个实例可以访问多个数据库。

2.关于数据类型Char和Varchar2的描述,下列说法正确的是(多选):(bd )A.Char和varchar2都是字符型数据,Char是变长字符型,Varchar2是定长字符型。

B.某个字段类型为Char(200),那么对于这个字段的任何记录来说,所占的实际长度都为200个字符。

C.某个字段类型为Varchar2(200),那么对于这个字段的任何记录来说,所占的实际长度都为200个字符。

D.对于相同长度的Char和Varchar2类型数据,char的性能通常要比varchar2高。

3.关于对空值的描述,下列说法正确的是:( a )
A.包含空值的任何算术表达式结果都等于空。

B.包含空值的连接字符串|| 等于与空字符串连接,结果还是空值。

(实践过,不是空值) C.空值做为判断条件是写法是:判断字段=null。

(is null / is not null )
D.表Emp中有5条记录,empID分别为1,2,3,4,5,那么查询语句Select * from Emp where empID not in (2,3,4,null)的执行后结果是2条记录。

(实践过,为0条记录)
4.已知05年7月25日是星期一,那么函数
TO_CHAR(NEXT_DAY(TO_DATE(’25-JUL-05’,’DD-MON-RR’),’MONDAY’),’DD-Month-YY YY’)结果是:( B )
A.25-JULY-2005 B.01-August-2005
C.25-JULY-2005 D.26-JULY-2005
验证:select TO_CHAR(NEXT_DAY(TO_DATE('25-7月-05','DD-MON-RR'),'星期一'),'DD-Month-YYYY') from dual; (验证的时候注意数据库的字符集问题)
5.如果EMPID所选的值是60494,下列函数执行后,结果是哪一项:(b )SELECT DECODE(empid,38475, 'Terminated',60494, 'LOA', 'ACTIVE') FROM EMP;
A.60494 B.LOA
C.Terminated D.ACTIVE
6.查询语句SELECT SUBSTR(‘HelloWorld’,4,5) FROM DUAL;返回结果,正确的是:(a )A.loWor B.World
C.lloWo D.lo Wo
7.查询语句SELECT ROUND(13.57),ROUND(13.57,1),ROUND(13.57,-1),TRUNC (13.57,-2)FROM DUAL 返回结果,正确的是:( c )
A.13.57,13.6,10,13
B.13,13.5,14,0
C.14,13.6,10,0
D.13.6,13.5,11,13
8.语句WHERE SAL BETWEEN 1000 AND 4000 与下列哪个子句等价:( a )A.WHERE SAL>=1000 AND SAL<=4000
B.WHERE SAL>1000 AND SAL<4000
C.WHERE SAL>=1000 OR SAL<=4000
D.WHERE SAL>=1000 AND SAL <4000
9.关于对UNION和UNION ALL的描述,下列描述正确的是(多选):(ac )A.UNION操作符返回两个查询结果集的并集,并去掉重复行。

B.UNION ALL操作符返回两个查询结果集的并集,并去掉重复行。

C.UNION操作符返回两个查询结果集的并集,并缺省按照第一列升序排序。

D.UNION ALL操作符返回两个查询结果集的并集,并缺省按照第一列升序排序。

10.数据库中有两张表,employees(雇员表),departments(部门表),如下图所示, 如果想要获得全部雇员的信息,不管这个雇员是否被分配了部门,以下答案正确的是:(d )
A.SELECT last_name,department_name FROM employees JOIN departments(+)
B.SELECT last_name,department_name FROM employees(+) JOIN departments
C.SELECT last_name, department_name FROM employees e RIGHT JOIN departments d ON (e.department_id = d.department_id)
D.SELECT last_name, department_name FROM employees e LEFT JOIN departments d ON (e.department_id = d.department_id)
11.SQL语句SELECT department_id,job_id,avg(salary) FROM employees WHERE department_id = 100 GROUP BY job_id Having avg(salary)>2000中有错误的是哪一个子句:( a )
A.SELECT子句B.WHERE子句
C.GROUP BY子句D.Having子句
12.关于子查询的描述,下列说法正确的是(多选):(abd )
A.子查询必须要写在括号内。

B.子查询可以写在FROM,WHERE,HAVING子句中。

C.<ALL主要应用于多行子查询中,表示要小于子查询结果集的任意一个值即可。

D.子查询可以用在UPDATE的SET子句中。

13.关于模糊查询中通配符“_”描述正确的是:( b )
A.“_”代表多个字符B.“_”代表一个字符
C.“_”不能与“%”一同使用D.“_”代表代表零个或多个字符
14.下列哪个约束只能定义在列级定义上:( b )
A.UNIQUE B.NOT NULL
C.CHECK D.PRIMARY KEY
E.FOREIGN KEY
15.关于约束PRIMARY KEY和UNIQUE描述正确的是:(b )
A.PRIMARY KEY和UNIQUE都可以定义在一个或多个列上。

B.UNIQUE可以定义在多个列上,PRIMARY KEY不可以。

C.PRIMARY KEY和UNIQUE约束的列都可以为空值。

D.PRIMARY KEY 和UNIQUE约束在一个表中都可以有任意个。

16.关于对索引的描述,下列正确的是:(a )
A.在一个表上可以建立多个索引。

B.索引可以增加查询的速度,所以建立索引越多越好。

C.索引通常建立在欲查询的表的数据量很大,并且查询最终得到的结果集也很大的情况下。

D.索引删除之后,索引所基于的表中的数据也被删除了。

17.SQL语句的执行顺序是:(c )
○1select ○2from ○3where ○4group by ○5having ○6order by
A.123456 B.234561
C.234516 D.124563
18.查看序列S1的当前值,应该使用下列的哪一项:( b )
A.S1.NEXTVAL B.S1.CURRVAL
C.S1.MAXVAL D.S1.MINVAL
19.关于ROWNUM的描述,下列正确的是:(d )
A.ROWNUM是每个表中实际存在的列。

B.ROWNUM是每条查询语句执行完成之后,给每行数据填充的行号,行号从0开始。

(从1开始)
C.ROWNUM做为条件表达式时,可以使用任何算术运算符。

D.ROWNUM经常用来做为分页查询。

20.关于TRUNCATE和DELETE命令,下列描述正确的是:(c )A.两者都属于DML语句。

B.两者都不属于DML语句。

C.执行TRUNCATE命令之后,该会话中先前未提交的事务自动提交。

D.执行TRUNCATE命令之后,该会话中先前未提交的事务自动回滚。

21.关于使用AlTER TABLE进行修改表的定义,下列描述正确的是(多选):(bcd )A.使用该命令可以修改表的名称B.使用该命令可以修改列的名称
C.使用该命令可以修改列的数据类型D.使用该命令可以修改列的精度22.关于Oracle中对锁的描述正确的是:( d )
A.修改某个表中的某行数据,Oracle会自动锁住整个表。

(验证过,只是锁住一行)B.执行查询语句,Oracle会自动对要查询的结果加上锁。

(没有锁上)
C.锁在被相关操作申请并持有后,该操作执行结束后,会马上释放。

(事务结束后才释放)
D.会话A在时间T1修改资源X,未提交;会话B在时间T2修改资源Y,未提交;会话A在时间T3修改资源Y,未提交;会话B在时间T4修改资源X;会产生死锁。

23.关于事务的描述,下列说法正确的是:( b )
A.执行一个DDL或DCL语句后,事务自动开始。

B.执行一个DDL或DCL语句后,事务自动提交。

C.执行一个DDL或DCL语句后,事务自动回滚。

D.执行一个DDL或DCL语句后,对当前事务没有影响。

24.关于Oracle中用户的描述,下列选项正确的是(多选):(cd )A.Oracle中的所有用户都可以执行Create User命令。

(错)
B.使用Create User命令新建一个用户之后,该用户自动拥有了登录权限。

(错)
C.使用“Drop User 用户名cascade”命令执行删除用户之后,该用户下的所有对象也自动被删除。

D.用户的授权可以通过直接授权,也可以通过角色来间接授权。

25.对于权限的授予,下列说法正确的是:( d )
A.WITH GRANT OPTION 选项可以实现系统权限的传递。

(对象权限)
B.WITH ADMIN OPTION 选项可以实现对象权限的传递。

(系统权限)
C.以上两种说法都正确。

D.以上两种说法都不正确。

26.下面哪个SQL语句可以查询出名字当中有’A_B’这样的员工?(单选) (d)A.select * from emp where ename like '%A\_B%' escape '\\';
B.select * from emp where ename like '%A_B%' escape;
C.select * from emp where ename like 'A_B%' escape '%';
D、select * from emp where ename like '%A\_B%' escape '\';
27.在SQL Plus当中,在命令提示行可以输入哪些命令(多选)?(abcd) A.pl/sql程序块
B.SQL*Plus命令
C.安全命令
D.SQL命令
28.在A、B两张表当中使用外连接A OUTER JOIN B,如果期望返回记录中包含B 表当中所有的记录,那么你在问号出需要写:(单选) d
A.任何一种外连接
B.左外连接
C.交叉连接
D.右外连接
E.内连接
29.下列语句当中对于日期型数据使用trunc语句正确的是(单选) c A.SELECT TRUNC(TO_DATE(12-Feb-99,DD-MON-YY, 'YEAR')) "Date " FROM DUAL;
B.TRUNC = TO_DATE('12-Feb-99','DD-MON-YY'), 'YEAR', "Date " FROM DUAL;
C.SELECT TRUNC(TO_DATE('12-Feb-99','DD-MON-YY'), 'YEAR') "Date " FROM DUAL;
D.date = TRUNC(TO_DATE('12-Feb-99','DD-MON-YY'), 'YEAR') "Date " FROM DUAL; 30.预使用grant语句授予权限,你必须(多选):bd
A.被授予GRANT ROLE PRIVILEGE系统权限
B.被授予带有ADMIN OPTION的系统权限
C.被授予GRANT ANY PRIVILEGE的系统权限
D.被授予带有GRANT OPTION 的系统权限
31.下列SQL是什么含义?(单选) b
SELECT employee_id FROM employees WHERE commission_pct = .5 OR salary > 23000;
A.返回那些工资的50%大于23000的员工信息
B.返回那些佣金比率为50%或者工资大于23000的员工信息
C.运行时错误
D.语法错误
32.下列哪个语句能够返回-33的绝对值并且显示别名为Absolute (单选)c
A.SELECT ABS("-33") Absolute FROM DUAL;
B.SELECT ABS('-33') "Absolute" FROM DUAL;
C.SELECT ABS(-33) "Absolute" FROM DUAL;
D.SELECT ABS(-33), Absolute FROM DUAL;
33.学生表结构如下
STD_ID NUMBER (4)
COURSE_ID VARCHAR2 (10)
START_DATE DATE
END_DATE DATE
下列子句中哪些是正确的?ce
A.SUM(start_date) (number类型)
B.AVG(start_date) (number类型)
C.COUNT(start_date)
D.AVG(start_date, end_date) (参数无效)
E.MIN(start_date)
F.MAXIMUM(start_date) (没有这个函数)
34.视图emp_dept_vu结构如下,哪些语句是错误的?(单选) e
Column Name Type Remarks
From the EMPLOYEES table:
EMP_NAME VARCHAR2 (30)
JOB_ID VARCHAR2 (20)
SALARY NUMBER
DEPARTMENT_ID NUMBER
From the DEPARTMENTS table:
DEPT_NAME VARCHAR2 (30)
A.SELECT * FROM emp_dept_vu;
B.SELECT department_id, SUM(salary) FROM emp_dept_vu GROUP BY department_id;
C.SELECT department_id, job_id, AVG(salary) FROM emp_dept_vu GROUP BY department_id, job_id;
D.SELECT job_id, SUM(salary) FROM emp_dept_vu WHERE department_id IN (10,20)
GROUP BY job_id HAVING SUM(salary) > 20000;
E.全对,没有错误。

35.下面哪些语句是DML ( bcd)
A.COMMIT
B.MERGE
C.UPDATE
D.DELETE
E.CREATE
F.DROP
36.有一张employees表,结构如下
EMPLOYEE_ID NUMBER Primary Key
FIRST_NAME VARCHAR2 (25)
LAST_NAME VARCHAR2 (25)
HIRE_DATE DATE
当执行delete employees之后,将发生什么事情?(单选)c
A.因为违反主键约束,所以你将得到一个错误。

B.表当中的数据和表的结构都将被删除。

C.只有表当中的数据被删除,结构还是存在嘀。

D.因为这个语句是存在语法错误的,根本不会被执行。

37.当你把所有圆括号从下面这个语句拿走之后,将发生什么事情?(单选)C SELECT e.employee_id, (.15* e.salary) + (.5 * mission_pct) + (s.sales_amount * (.35 *
e.bonus)) AS CALC_VALUE FROM employees e, sales WHERE e.employee_id = s.emp_id;
A.在CALC_VALUE列显示的数据都将变低。

B.在CALC_VALUE列显示的数据都将变大。

C.在CALC_VALUE列显示的数据没有变化。

D.有语法错误,不会执行。

38.下面哪个(些)语句是SQL*Plus命令D
A.INSERT
B.UPDATE
C.SELECT
D.DESCRIBE
E.DELETE
F.RENAME
39.按照如下格式显示系统当前时间Monday, 01 June, 2001 (单选) C A.SELECT TO_DATE (SYSDATE, 'FMDAY, DD Month, YYYY') FROM dual;
B.SELECT TO_CHAR (SYSDATE, 'FMDD, DY Month, YYYY') FROM dual;
C.SELECT TO_CHAR (SYSDATE, 'FMDay, DD Month, YYYY') FROM dual;
D.SELECT TO_CHAR (SYSDATE, 'FMDY, DDD Month, YYYY') FROM dual;
E.SELECT TO_DATE (SYSDATE, 'FMDY, DDD Month, YYYY') FROM dual; 40.下面哪些是Oracle的约束?
A.CASCADE
B.UNIQUE
C.NONUNIQUE
D.CHECK
E.PRIMARY KEY
F.CONSTANT
G.NOT NULL
41.当你想从当前模式下删除视图EMP_DEPT_VU,你将用哪个语句?(单选)D A.DROP emp_dept_vu;
B.DELETE emp_dept_vu;
C.REMOVE emp_dept_vu;
D.DROP VIEW emp_dept_vu;
E.DELETE VIEW emp_dept_vu;
F.REMOVE VIEW emp_dept_vu;
二、程序设计题(本大题共9小题,共50分)
某公司程序员张某设计了一套学生选课系统,其中涉及到的主要表结构如下:
a.学生信息表:表名STU,主要用来保存学生的基本信息,字段信息表述如下:{
Sno:流水号数值型主键
SID:学生编号, 字符唯一
SName:学生姓名,长度为20的变长字符串,非空;
Sex:性别,长度为2的定长字符串,值只能为"男"或"女" ;
Indate:入班日期,日期型
ClassID:所在班级编号,数值型,外键,
}
b.班级信息表:表名CLA,主要用来保存班级的基本信息,字段信息表述如下:
{
clano:流水号数值型主键
ClaID,班级编号, 字符唯一
ClaName,班级名称,长度为20的变长字符串,唯一约束
}
c.课程信息表:表名SUBJECT,主要用来保存课程的基本信息,字段信息表述如下:
{
subno:流水号数值型主键
SubID, 课程编号字符唯一
SubName, 课程名称,长度为20的变长字符串,唯一约束
}
d.学生选课信息表:表名SELECT_SUBJECT,主要用来保存学生所选课程的基本信息,字段信息表述如下:
{
ID:流水号数值主键
StuID, 学生编号外键
SubID, 课程编号, 外键
Grade,成绩数值型
}
请您根据以上张某的设计,完成以下问题:
1、请写出以上四张表的创建表语句,要求在建表的同时建立相应的约束。

--学生信息表
create table STU(
Sno number primary key not null,
SID char unique,
SName varchar2(20) not null,
Sex char(3) constraint stu_sex_ck check (Sex in('男','女')),
Indate date,
ClassID char,
constraint stu_ClassID_fk foreign key (ClassID) references CLA(ClaID) )
--班级信息表
create table CLA(
clano number primary key not null,
ClaID char unique,
ClaName varchar2(20) unique
)
--课程信息表
create table SUBJECT(
subno number primary key not null,
SubID char unique,
SubName varchar2(20) unique
)
--学生选课信息表
create table SELECT_SUBJECT(
ID number primary key not null,
StuID char,
SubID char,
Grade number,
constraints ss_StuID_fk foreign key (StuID)references STU(SID),
constraints ss_SubID_fk foreign key (SubID) references SUBJECT(SubID)
)
2、创建一个序列。

--创建一个序列
create sequence mysequence
start with 1
increment by 1
minvalue 1;
3、使用序列,分别向班级表插入3条数据,每个班级5名学生,3门课程数据,以及每个
学生的选课数据。

--向班级表插入3条数据
insert into CLA(clano,ClaID,ClaName)
values(mysequence.NEXTV AL,'1001','Java 开发二班');
insert into CLA(clano,ClaID,ClaName)
values(mysequence.NEXTV AL,'1002','Java 开发三班');
insert into CLA(clano,ClaID,ClaName)
values(mysequence.NEXTV AL,'1003','前端开发一班');
--每个班级5名学生
--1001班
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0701','小玲','女','01-7月-14','1001');
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0702','小明','女','21-6月-15','1001');
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0703','小翠','女','01-7月-14','1001');
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0704','小明','男','01-6月-16','1001');
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0705','小高','男','01-9月-16','1001');
--1002班
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0706','小杏','女','01-7月-14','1002'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0707','小美','女','01-7月-14','1002'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0708','小卉','女','01-7月-14','1002'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0709','小冲','男','01-7月-14','1002'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0710','小虫','男','01-7月-14','1002');
--1003班
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0711','明明','女','01-7月-14','1003'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0712','糕糕','女','01-7月-14','1003'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0713','多多','女','01-7月-14','1003'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0714','朵朵','女','01-7月-14','1003'); insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0715','卉卉','女','01-7月-14','1003');
--3门课程数据
insert into SUBJECT(subno,SubID,SubName)
insert into SUBJECT(subno,SubID,SubName)
values(mysequence.NEXTV AL,'02','Spring MVC'); insert into SUBJECT(subno,SubID,SubName)
values(mysequence.NEXTV AL,'03','JA V A程序设计');
--每个学生的选课数据
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0701','01',90);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0702','02',94);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0703','03',96);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0704','03',98);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0705','02',95);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0706','01',99);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0707','01',98);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0708','02',90);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0709','01',96);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade) values(mysequence.NEXTV AL,'0710','03',98);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade)
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade)
values(mysequence.NEXTV AL,'0712','01',88);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade)
values(mysequence.NEXTV AL,'0713','02',88);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade)
values(mysequence.NEXTV AL,'0714','02',100);
insert into SELECT_SUBJECT(ID,StuID,SubID,Grade)
values(mysequence.NEXTV AL,'0715','01',80);
4、查询全部学生的,学号,学生姓名,课程名称,成绩(要全部学生信息)
select s.SID , s.SNAME , c.CLANAME,ss.grade
from stu s left join cla c on s.classid = c.claid
left join select_subject ss on s.sid = ss.stuid
5、请写出查询学生“小玲”的选课情况的SQL语句,要求显示学生编号,学生姓名,所
选课程编号,所选课程名称。

select sid , sname , ss.subid , sb.subname
from stu s left join select_subject ss on s.sid = ss.stuid
left join subject sb on ss.subid = sb.subid
where s.sname = '小玲';
6、请写出查询每门课程都有多少学生选择的SQL语句,要求显示课程名称,所选人数。

select sb.subname,count(s.sid)
from stu s left join select_subject ss on s.sid = ss.stuid
left join subject sb on ss.subid = sb.subid
group by ss.subid,sb.subname;
7、请写出还有哪些学生没有进行选课。

要求用子查询方式。

--测试没有选课学生的数据
insert into STU(Sno,SID,SName,Sex,Indate,ClassID)
values(mysequence.NEXTV AL,'0716','高卉','女','01-7月-14','1003');
select * from stu where sid not in
(select stuid
from select_subject);
8、学生小冲转入到“前端开发一班”,请写出相应的SQL语句,假设的情况是您不知道
“前端开发一班”的班级编号。

update stu
set classid = (select claid
from cla
where claname = '前端开发一班')
where sname = '小冲';
9、请创建一视图,该视图用来显示每个班级每个学生都选择了具体的课程,要求该视图至
少有班级名称,学生名称,所选课程名称字段。

--本实验是在scott用户下进行的,所以需以system用户登录授权才能创建视图
conn system/123456
grant create view to scott;
create view stu_subject_view
as select c.claname , s.sname , sb.subname
from stu s left join select_subject ss on s.sid = ss.stuid
left join subject sb on ss.subid = sb.subid
left join cla c on s.classid = c.claid;
10、请写出查询选课多于2门的学生SQL语句,要求显示学生姓名,选课数量。

select sname ,count(distinct ss.subid)
from stu s left join select_subject ss on s.sid = ss.stuid
group by sname
having count(distinct ss.subid) > 2;
11、假设按如下顺序执行下列操作:
a. 插入一个新的班级信息(2003,Java开发四班);
b. 建立保存点save_1;
c. 查询插入的数据是否存在;
d. 删除班级编号为2002的班级信息;
e. 建立保存点Save_2;
f. 查询班级编号为2002数据是否已经被删除;
g. 执行回滚操作,回滚到保存点Save_2;
h. 使用TRUNCATE命令清除学生表,班级表的记录;
I. 回滚事务,回滚到事务的起点;
请问按如上顺序执行后,班级表class的记录数为几条?只写出条数即可,不用写每步的操作步骤。

--作答区:
-------------------之前数据是存在3条
--a. 插入一个新的班级信息(2003,Java开发四班);
insert into cla (clano, claid , claname)
values(mysequence.NEXTV AL,'2003','Java开发四班');
--b. 建立保存点save_1;
savepoint save_1;
--c. 查询插入的数据是否存在;
select * from cla where claid = '2003'; --已经存在
--d. 删除班级编号为1003的班级信息;
delete from cla where claid = '1003';
--e. 建立保存点Save_2;
savepoint save_2;
--f. 查询班级编号为1003数据是否已经被删除;
select * from cla where claid = '1003'; --有关联,删不掉
--g. 执行回滚操作,回滚到保存点Save_2;
rollback to save_2;
--h. 使用TRUNCA TE命令清除学生表,班级表的记录;
truncate table cla; --有关联,失败操作
truncate table stu; --有关联,失败操作
--I. 回滚事务,回滚到事务的起点;
rollback;
--请问按如上顺序执行后,班级表class的记录数为几条?只写出条数即可,不用写每步的操作步骤。

select count(*)from cla;
select claid from cla;
---操作之后数据增加了一条4条
12、查询每个学生学号、学生姓名、课程名称、成绩(只显示每科最高分的那个学生)
--用了三个表连接
select ssb.stuid,st.sname , sub.subname ,grade
from select_subject ssb
join (select sj.subid sid,max(sj.grade) g
from select_subject sj
group by sj.subid) ss on ssb.subid = ss.sid and grade =ss.g
join stu st on st.sid = ssb.stuid
join subject sub on sub.subid = ssb.subid;
13、查询每个学生学号、学生姓名、课程名称、成绩(成绩大于60时的显示及格,小于60时的显示不及格)
select s.sid , s.sname , claname , nvl(ss.grade,0),decode(sign(nvl(ss.grade,0)-60),
1 ,'及格',
-1,'不及格',
0,'及格') from stu s left join select_subject ss on s.sid = ss.stuid
left join subject sb on ss.subid = sb.subid
left join cla c on s.classid = c.claid;
14、查询出选课超过1门以上学生的信息学号、学生姓名
select sid , sname
from stu s left join select_subject ss on s.sid = ss.stuid
group by sid , sname
having count(distinct ss.subid) > 1;
Select查询语句
DML语句(数据操作语言)Insert / Update / Delete / Merge
DDL语句(数据定义语言)Create / Alter / Drop / Truncate
DCL语句(数据控制语言)Grant / Revoke
事务控制语句Commit / Rollback / Savepoint。

相关文档
最新文档