您的位置:首页 > 数据库 > Oracle

ORACLE REFERENCES FRO TEST

2016-12-28 12:28 369 查看
【JSU】LJDragon's Oracle course notes In the first semester, junior year

Oracle考前复习

试题结构分析:


1.选择题2x10,共20分(Oracle基本概念,基本SQL语句)

2.判断题2x5,共10分(Oracle基本概念,基本SQL语句)

3.填空题2x10,共20分(Oracle基本概念,基本SQL语句)

4.简答题4x5,共20分(事务的四大特性;游标的四大特性)

5.代码编程30分(PL/SQL编程:游标)


 

1.选择题2x10,共20分(Oracle基本概念,基本SQL语句)

 

参考1-4章:http://www.cnblogs.com/anstoner/p/6227837.html

2.判断题2x5,共10分(Oracle基本概念,基本SQL语句)

参考1-4章:http://www.cnblogs.com/anstoner/p/6227837.html

3.填空题2x10,共20分(Oracle基本概念,基本SQL语句)

事务四大特性(简称ACID) (这个地方扣了我6分,考前忘记看了)

1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行

2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。

3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

参考1-4章:http://www.cnblogs.com/anstoner/p/6227837.html

4.简答题4x5,共20分(事务的四大特性;游标的四大特性)

1.说下char(),varchar2(),nchar(),nvarchar2()的区别:

char()

varchar2()

nchar()

nvarchar2()

1.定长类字符

1.定长类字符

1.定长类字符

1.定长类字符

2.以定义的长度占用空间,不够以空格补充

2.根据实际长度长度占用空间,比较节省空间

2.以定义的长度占用空间,不够以空格补充

2.根据实际长度长度占用空间,比较节省空间

3.插入时比较快

3.插入时比较慢

3.插入时比较快

3.插入时比较慢

4.小括号类的参数,是以字节计算

4.小括号类的参数,是以字节计算

4.小括号类的参数,是以字符计算

4.小括号类的参数,是以字符计算

5.最大存储字节2000

5.最大存储字节4000

5.最大存储字节2000

5.最大存储字节4000

2.说下rowid,rownum,row_number()的区别:

Rowid

Rownum

Row_number()

1.行的逻辑编号,或者是物理地址

1.行的临时序号

1.分析函数

2.新增的时候产生

2.查询的时候产生

2.要结合over()一起使用

3.固定不变

3.会跟着查询条件的改变而改变

3.可以分组显示序号

4.不会重复

4.是个整数类型的数字

4.待补充.....

5.是18位长的字符

5.主要用于分页(好像上课说过)

5.待补充.....

3.说下union, union all的区别

uinon

union all

1.合并记录的时候,去掉重复行

1.合并记录的时候,不去掉重复行

2.会默认排序

2不会排序

3.合并速度会比较慢

3.合并速度比较快

4.说下 delete ,truncate 区别

Delete

truncate

1.可以带条件删除

1.不可以带条件删除,是清空整个表的记录

2.记录日志

2.不记录日志

3.不删除表空间

3.删除表空间

4.可以回滚数据

4.不可以回滚数据

5.是DML语句

5.是DDL语句

6.删除速度比较慢

6.删除速度比较

5.说下 主键,唯一索引的区别

主键

唯一索引

1.一个表只有一个主键

1.一个表可以有多个唯一索引

2.主键字段要非空

2.唯一索引可以为空值

3.主键可以作为其他表的外键

3.待补充....

exsits和in 的区别

1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。


2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。


3.in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询


显示游标的四个基本步骤

1.定义游标 cursor 游标变量名 is 查询语句;


2.打开游标 open 游标变量名;(可以重复打开)


3.提取游标 fetch 游标变量名 into 变量名;


4.关闭游标 close 游标变量名;


游标的四个属性

1.游标变量名%FOUND 布尔型属性,当最近一次读记录时成功返回,则值为TRUE;


2.游标变量名%NOTFOUND 和%found相反


3.游标变量名%ISOPEN 布尔型属性,当游标已打开时返回 TRUE;


4.游标变量名%ROWCOUNT 数字型属性,返回已从游标中读取的记录数


ddl,dml,dcl,tcl分别是什么语言,并举例说明

(1)数据查询语言(DQL:)eg: select

(2)数据操纵语言(DML:Data Manipularion Language)eg:modify,delete

(3)事务控制语言(TCL) eg:commit,rollback

(4)数据定义语言(DDL:Data Definition Language) eg:create,truncate

(5)数据控制语言(DCL:Data Control Language)eg: GRANTDENYREVOKE

在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言

5.代码编程30分(PL/SQL编程:游标)

树状结构查询的语法

select * from emp;

--树状结构的表设计


--两个关键字段:id ,parenid


--parenid引用自己表的主键


--树查询,递归查询,分级查询


--分两个方向


--起始节点


--向上


--向下


--查询7566下所有的员工

select * from emp

start with empno = 7566--起始位置

connect
by
prior empno = mgr--方向(向下)

--查询7566上面所有的领导

select * from emp

start with empno = 7566--起始位置

connect
by
prior mgr = empno--方向(向上)

--伪列:level显示层级序号n

select
level, t.* from emp t

start with t.empno = 7566--起始位置

connect
by
prior t.empno = t.mgr--方向(向下)

--过滤单个节点 条件是写在where 后面

select
level, t.* from emp t where empno <>7902

start with t.empno = 7566--起始位置

connect
by
prior t.empno = t.mgr--方向(向下)

--过滤整个分支 写在connect by prior语句的最后面

select
level, t.* from emp t

start with t.empno = 7566--起始位置

connect
by
prior t.empno = t.mgr--方向(向下)

and empno <>7902

PL/SQL之游标

--查询输出10号部门的所有员工(编号,姓名,工资)

declare

       cursor emp_cursor is

       select empno,ename,sal from emp where deptno = 10;

       v_empno emp.empno%type;

       v_ename emp.ename%type;

       v_sal emp.sal%type;

begin

       open emp_cursor;

 

 
       fetch emp_cursor into v_empno,v_ename,v_sal;

        dbms_output.put_line(emp_cursor%ROWCOUNT);

       fetch emp_cursor into v_empno,v_ename,v_sal;

       fetch emp_cursor into v_empno,v_ename,v_sal;

       dbms_output.put_line(emp_cursor%ROWCOUNT);

 
        if emp_cursor%notfound then

          dbms_output.put_line('true');

       else

         dbms_output.put_line('false');

       end
if;

       dbms_output.put_line(v_empno||','||v_ename||','||v_sal);

       close emp_cursor;

end;

 

--loop循环

declare

       cursor emp_cursor is

       select empno,ename,sal from emp where deptno = 10;

       v_empno emp.empno%type;

       v_ename emp.ename%type;

       v_sal emp.sal%type;

begin

       open emp_cursor;

      loop

            fetch emp_cursor into v_empno,v_ename,v_sal;

            exit
when emp_cursor%notfound;

            dbms_output.put_line(v_empno||','||v_ename||','||v_sal);

      end loop;

      close emp_cursor;

end;

 

--while loop


declare

       cursor emp_cursor is

       select empno,ename,sal from emp where deptno = 10;

       v_empno emp.empno%type;

       v_ename emp.ename%type;

       v_sal emp.sal%type;

begin

       open emp_cursor;

       fetch emp_cursor into v_empno,v_ename,v_sal;

       while emp_cursor%found loop

            dbms_output.put_line(v_empno||','||v_ename||','||v_sal);

            fetch emp_cursor into v_empno,v_ename,v_sal;

       end loop;

      close emp_cursor;

end;

 

--参照类型


declare

       cursor emp_cursor is

       select * from emp where deptno = 10;

       e emp%rowtype;

begin

       open emp_cursor;

      loop

            fetch emp_cursor into e;

            exit
when emp_cursor%notfound;

            dbms_output.put_line(e.empno||','||e.ename||','||e.sal);

      end loop;

      close emp_cursor;

end;

 

--游标for循环


declare

       cursor emp_cursor is
select * from emp ;

begin

       for e in emp_cursor loop

         dbms_output.put_line(e.ename);

       end loop;

end;

 

--带参数的for循环游标


declare

       cursor emp_cursor(v_deptno emp.deptno%type)

       is
select * from emp where deptno = v_deptno;

begin

       for e in emp_cursor(10) loop

         dbms_output.put_line(e.ename);

       end loop;

end;

 

--最精简版


begin

       for e in ( select * from emp) loop

         dbms_output.put_line(e.ename);

       end loop;

end;

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: