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()的区别:
2.说下rowid,rownum,row_number()的区别:
3.说下union, union all的区别
4.说下 delete ,truncate 区别
5.说下 主键,唯一索引的区别
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: GRANT、DENY、REVOKE
在默认状态下,只有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;
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.html3.填空题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: GRANT、DENY、REVOKE
在默认状态下,只有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;
相关文章推荐
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- Oracle Reference
- Oracle PL/SQL Language Pocket Reference, Second Edition
- Oracle Database Upgrade Path Reference List [ID 730365.1]
- oracle 闪回 - 恢复 -- test
- Oracle Enqueue Lock Type Reference including 11g new locks
- Oracle SQL Tuning Pocket Reference
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- oracle reference_link
- 今天看了一篇oracle tip,关于如何获得行锁时跳过已被锁的行,oracle8i的sql reference居然没有关于这个选项的介绍,特此记录下来。
- 我正在读:Oracle RMAN Pocket Reference.
- ORACLE XDK Reference
- Oracle RMAN Pocket Reference
- Oracle SQL Tuning Pocket Reference by Mark Gurry
- oracle读取文本文件的数据,插入到test表中,求助?
- sp_user_no(參數數的oracle_sp)及fn_test(有返回值的oracle參數)
- test oracle怎么翻译
- Oracle DBA Scripting Quick Reference
- oracle 手动建库 --test
- FC14下错误 /usr/bin/ld: libvalhalla-test.o: undefined reference to symbol 'clock_gettime@@GLIBC_2.2'