你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Oracle学习——备考练习

2021/12/31 8:02:37

一、选择题

1.下列与sql语句

Select * from emp where substr(ename,4,1) = ‘s’

Select * from emp where ename like ‘___s%’

等效的语句是(  E )

A.SELECT * FROM emp WHERE instr(ename,’s’1,4) = 4

B.SELECT * FROM emp WHERE ename like ‘___s’

C.SELECT * FROM emp WHERE extract(‘s’ from ename) = 4

D.SELECT * FROM emp WHERE instr(ename,’s’,1,1) = 4

E.SELECT * FROM emp WHERE instr(ename,’s’,4,1) = 4

2.下列修改语句正确的是(  B  )

A: update empno,ename from emp where empno = 7839,ename = ‘SNAKE’

B: update emp set sal = sal + 100 where ename = SNAKE

C: update emp values sal = sal + 100 where ename = ‘SNAKE’

D: update emp where deptno = 10 set ename = ‘SNAKE’

3.查询在1982年入职的的员工信息,下列代码中正确的是(  D  )

A:select * from emp where hiredate < 1982

B:select * from emp where hiredate like ‘%1982’

C:select * from emp where hiredate between ‘01-1月-1981’ and ‘31-12月-1982’          

D:select * from emp where to_char(hiredate,YYYY) = 1982

4.你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用?(  C  )

A.表 

B.序列 

C.索引 

D.视图

5.Oracle中发出下列命令:

Select e.ename,a.street_address,a.city,a.post_code

from emp e,addr a

where e.empno = a.empno(+)

and a.state = ‘TEXAS’;

6.下列哪个选项显示等价语句?(  B  )

A.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e outer join addr a on e.empno = a.empno where a.state = ‘TEXAS’

Bselect e.ename, a.street_address, a.city, a.state, a.post_code from emp e left outer join addr a on e.empno = a.empno where a.state = TEXAS

C.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e right outer join addr a on e.empno = a.empno where a.state = ‘TEXAS’

D.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e right outer join addr a where e.empno = a.empno(+) and a.state = ‘TEXAS’;

7.下列删除语句正确的是(  B  )

A:delete from emp group by deptno having ename = ‘KING’

Bdelete from emp where deptno in (select deptno from dept where dname = SALES)

C:delete from emp where sal = sal + 500

D:delete from emp having sal = sal + 800

8.为test表中sex列建表时没有默认值,现想追加一个默认值为‘女’,下列语句正确的是(  A  )

Aalter table test add (sex default ‘’)

B:alter table test(sex) add (default ‘女’)

C:alter table test modify(sex default ‘女’)

D:alter table test modify(sex) add (default ‘女’)

9.下列哪个语句不会结束事物(  A  )

Acreate table

B:rollback to

C:truncate table

D:drop table

10.下列哪个SQL语句能正确执行(  D  )

A:select sysdate - to_date(‘1982-09-08’) from emp

B:select ename || job || sal + 500 from emp

C:select hiredate,’01-1月-2017’-hiredate from emp

Dselect hiredate,to_date(‘19851111’,’YYYY””MM””DD””’) from emp

11.下列哪个语句不正确的是(  A  )

Aalter table test add constraint test_id_fk foreign key(id) references demo(number)

B:alter table test add (name not null)

C:alter table test add (sex char(2) default ‘男’,age number(3))

D:alter table test modify (gender default ‘女’)

、填空

1.  在ORACLE中,用于事务提交和回滚的PL/SQL语句分别是___commit______和___rollback_____

2.  SELECT TO_CHAR(ADD_MONTHS(TO_DATE(‘20081107’,’YYYYMMDD’),8)+2,’YYYYMMDD’) FROM DUAL;的运行结果是______ 20090709____________

3  数据库按物理上结构必须由___数据文件_________日志文件________控制文件_____组成。

4.    查询语句各子句的书写、执行顺序分别是什么样的(1.select 2.where 4.group by 3.order by 5.having 6.from

_6->2->4->5->1->3_____________

5.      五大约束类型的关键字分别是___非空约束 NOT NULL_________唯一性约束 UNIQUE__________主键约束 PRIMARY KEY________外键约束 FOREIGN KEY________检查性约束 CHECK_______,只能定义在列级别的约束类型是__非空约束NOT NULL_______

6 主键与唯一键的区别是____每个表可以有多个为UNIQUE约束,而每个表只能创建一个主键约束_______

7  WhereHaving子句都是限定条件,它们的区别是___where指定分组前的条件,而having 则限定分组后的条件________

8.      左、右外连接的关键字是_____LEFT OUTER JOINRIGHT OUTER JOIN______________

9.      索引的作用是____可以加速对数据库表的查询速度________

   索引的缺点:1、占用内存空间;2.降低DML的操作速度。

10.   oracle中如何获取系统时间______sysdate______________________

三、简答题

1. 什么是事物,事物特性有哪些,请分别描述。

事务:也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。

事务特征可用四个字母的缩写表示:即ACID

原子性(Atomicity)

事务就像原子一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。

一致性(Consistency)

一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。

隔离性(Isolation)

一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。

持久性(Durability)

也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。

2. 简述索引的作用,大量建立索引有什么缺点。

作用:在数据库中,通过索引可以加速对表的查询速度;

缺点:1、占用内存(每建立一个索引,会自动生成一个索引表)

2、提高查询速度,但是会降低增,删,改的速度

     (每次增,删改一次数据,对应的所有数据索引表会相应增删改)

3. Truncate delete的区别。

(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

2)表和索引所占空间。

   当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小;

   DELETE操作不会减少表或索引所占用的空间。

   drop语句将表所占用的空间全释放掉。

3)速度,一般而言,drop > truncate > delete

4)应用范围。

    TRUNCATE 只能对TABLE         DELETE可以是tableview

(5)TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。

6truncate与不带wheredelete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid

四、编码题

按照如下要求建表:

1. 建立班级表Class,表中字段分别是

班级编号 cno,要求最大长度位4,整数,主键

班级名称 cname,变长字符型,长度为10,非空

CREATE TABLE Class(

cno  number(4) constraint class_cno_pk PRIMARY KEY,

cname VARCHAR2(10) NOT NULL);

2. 建立学生表Student,表中字段分别是

学生编号stuid,要求最大长度为4,整数,主键

学生姓名stuname,变长字符型,长度为20,非空

身份证号 idcard,定常字符型,长度为18,唯一键

数学成绩 math,要求最大长度为4,小数点后保留1位,只能在0——100之间,

英语成绩 english,要求最大长度为4,小数点后保留1位,只能在0——100之间,

语文成绩chinese,要求最大长度为4,小数点后保留1位,只能在0——100之间,

班级编号 cno,要求最大长度位4,整数,外键关联班级表

要求:除了非空约束外,在表级别上定义其他所有约束条件

CREATE TABLE Student2(

stuid       number(4),

stuname VARCHAR2(20) NOT NULL,

idcard      char(18),

math         number(4,1),

english      number(4,1),

chinese      number(4,1),

cno             number(4),

CONSTRAINT student_stuid_pk PRIMARY KEY(stuid),

CONSTRAINT student_idcard_uk UNIQUE(idcard),

CONSTRAINT student_math_ck CHECK(math between 0 AND 100),

CONSTRAINT student_english_ck CHECK(english between 0 and 100),

CONSTRAINT student_chinese_ck CHECK(chinese between 0 and 100),

CONSTRAINT student_cno_ck FOREIGN KEY(cno) REFERENCES Class(cno)

                                                  ON DELETE CASCADE);

3. 向班级表中插入三条数据

cno                              cname

1001                            java1

1002                            java2

1003                            java3

--1、创建班级表

CREATE TABLE class_table(

cno     NUMBER(4),

cname VARCHAR(8));

--2、插入数据

INSERT INTO class_table VALUES(1001, ' java1班');

INSERT INTO class_table VALUES(1002, ' java2班');

INSERT INTO class_table VALUES(1003, ' java3班');

1.向学生表中插入四条数据

stuid              stuname        idcard           math             english           chinese          cno

1701              小明              此数据任意   88                  99                  56                  1001

1702              小红              此数据任意   98                  89                  63                  1002

1703              小红              此数据任意   95                  80                  33                  1001

1704              小红              此数据任意   90                  81                  73                  1002

--1.创建学生表

CREATE TABLE student_table(

stuid  NUMBER(4),

stuname VARCHAR2(8),

idcard     NUMBER(10),

math       NUMBER(3),

english    NUMBER(3),

chinese    NUMBER(3),

cno            NUMBER(4));

--2.向学生表中插入数据

INSERT INTO student_table VALUES(1701,' 小明 ',  100001,  88, 99, 56, 1001);

INSERT INTO student_table VALUES(1702,' 小红 ',  100002,   98,  89, 63, 1002);

INSERT INTO student_table VALUES(1703,' 小红 ',  100003,  95, 80, 33, 1001);

INSERT INTO student_table VALUES(1704,' 小红 ',  100004,  90, 81, 73, 1002);

2. 写一个查询,要求显示每位学生的姓名,数学成绩,英语成绩,语文成绩,及他们自己的平均分。

SELECT stuname, math, english, chinese, (math + english + chinese) / 3  avgstugrade

FROM student_table;

3. 写一个查询,要求显示数学成绩高于所有学生数学平均成绩的编号,姓名。

SELECT stuid, stuname

FROM student_table

WHERE math > (SELECT AVG(math) FROM student_table);

4. 写一个查询,显示学生编号,姓名,班级编号,班级名称,要求使用左外连接,将没有学生的班级也显示出来。

SELECT stuid, stuname, c.cno, cname

FROM class_table c LEFT OUTER join  student_table s

ON s.cno = c.cno;

5. 修改数据,将编号为1703的学生,调到java2班。

UPDATE class_table

SET cname = 'java2班'

WHERE cno = 1003;

6. 将所有学生的数学成绩清空,然后删除这一列。

UPDATE student_table

SET math = NULL;

--删除一列

alter table student_table drop column math;

7. 姓名相同的学生,保留编号最小的一个,其余与他(她)名字相同的人删除。

DELETE from student_table1

 WHERE (stuname) IN ( SELECT stuname FROM student_table1 GROUP BY stuname HAVING COUNT(stuname) > 1)

 AND stuid NOT IN (SELECT MIN(stuid) FROM student_table1 GROUP BY stuname HAVING COUNT(*) > 1);