Orcal练习题知识点总结

1、多表查询如果没有指定连接条件,会产生笛卡尔积,返回行数等于两张表行数的乘积。列相加,行相乘。内连接:根据指定的连接条件进行连接查询,因此满足连接条件的数据才会出现在结果集
外连接:在内连接的基础上,将某个连接表不符合连接条件的记录加入结果集。左外连接:左侧表dept 10号部门的记录 与右侧表emp 10号部门的员工记录 满足连接条件,因此加入结果集;
左侧表dept 20号部门的记录 与右侧表emp 20号部门的员工记录 不满足连接条件,但该查询为左连接,因此会把左侧表dept20号部门的记录加入结果集,右侧表则null填充;

2、nvl(value1,value2):如果value1的值为null,则返回value2,如果不为null,则返回value1
nvl2(value1,value2,value3):如果value1的值为null,则返回value3,如果为不为null,则返回value2.

3、Oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数。m的范围是1-38,即最大38位。

4、Orcal中三种系统文件是:数据文件DBF,控制文件CTL,日志文件LOG

5、数据库建表时,一个表只有一个主键,但是主键可以设置为多个字段,形成复合主键,可以有多个外键。主键约束用于唯一的确定表中的每一行数据

6、视图:简单视图是可以进行DML操作。复杂视图有部分可以DML操作,若复杂视图中有分组函数、groupby字句、distinct、伪列等则不可以做DML操作。

7、序列:序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
序列是在数据库中独立存储的,一旦创建就属于特定模式,即属于特定的用户,哪个用户创建的就是属于哪个用户的。

8、使用序列: 创建一个序列以后,如何使用这个序列,生成主键呢?我们获取序列的NEXTVAL就可以了,具体还要结合使用场景。
假如我们在INSERT语句中使用序列生成主键,只需要把SEQUENCE_PARAMID.NEXTVAL作为值,传递给主键字段就可以了。
假如我们想获取这个值,在程序中使用,我们可以通过下面的语句:SELECT SEQUENCE_PARAMID.NEXTVAL FROM DUAL;
自增长的方式相比,序列具有更好的灵活性,可以根据需要设置的主键的长度。而使用自增长的方式,缺乏灵活性,总是从1开始,每次递增1,我们没法控制。

9、对于索引的理解以及优缺点
索引是对数据库表中一列或多列的值进行排序的一种存储结构,索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

10、若表的某字段值存在大量的重复,则基于该字段适合创建哪种索引?位图索引,索引上有操作,则索引失效。

11、**PL/SQL:**PL/SQL是 Procedure Language & Structured Query Language 的缩写。字面意思是过程化语言(PL)和结构化查询语言(SQL),它扩展了SQL语言,是一种过程处理语言。
**PL/SQL程序的块分为三部分:**1.声明部分 2.可执行部分 3.异常处理部分
其中声明和异常处理部分是可选的。

DECLARE   --声明部分
    v_num number(10) := 0;
BEGIN   --BEGINEND 为可执行部分    
    v_num :=2/v_num;
    DBMS_OUTPUT.PUT_LINE(v_num);
EXCEPTION   --异常处理部分
    WHEN OTHERS THEN
     DBMS_OUTPUT.PUT_LINE('出错!');
END; 

12、当Select语句没有返回行时,将引发下列哪个异常? No_data_found

13、PL/SQL中过程和函数过程是执行特定的任务(动作)的命名块。过程封装了业务逻辑,随后在应用层和数据层都可调用之前已经定义的过程。设计的目的就是为了将代码模块化,有效的管理代码。在PL/SQL中参数一共有三种模式
- IN 只可以被读取
- OUT 只可以被写入
- IN OUT 即可以被读取也可以被写入。

14、触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。
因此触发器不需要人为的去调用,也不能调用。
然后,触发器的触发条件其实在你定义的时候就已经设定好了。

触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发器执行;
after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

15、Oracle中查看最近一次语句出错的语句是:show Errors

16、授予sa用户在SCOTT.EMP表中SAL列的更新权限的语句是GRANT UPDATE (SAL) ON SCOTT.EMP TO SA

17、 EMP表有14条记录,则语句SELECT ‘Aptech’ FROM EMP 的执行结果是14行Aptech

18、DBA和DBMS:DBA是英文Data Base Administrator的缩写,也就是数据库管理员。DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库

19、索引的作用以及建立索引的注意事项:索引的作用:提高数据的检索速度。
应注意的问题:对查询型的表,创建多个索引会大大提高查询速度。对更新型的表,如果索引过多,会增大开销。

20、当where条件未知,但是知道与筛选条件相关的条件时,会用子查询

21、作为列别名的一些注意事项:1. 列别名最大长度为30个字节(一个汉字2个字节)2. 列别名可以包含数字、小括号、特殊字符,有空格的多个单词组成的别名必须用双引号引起来

23、sys:超级管理员
system:普通管理员
scott:普通用户
sh:海量数据用户(大数据用户)

24、全连接可以查询出连接的表中匹配和不匹配的数据,全连接,就是根据A表和B表所共有的一列进行连接,A表中有,B表没有则为空,B表没有,则A表为空

25、分组查询经常和聚合函数一起使用

26、事务控制语言(TCL Transaction Control Language):commit提交、savepoint保存点、rollback回滚

27、通过等值连接可以关联n张表(这些表都具有单列主键),但是最少要有n-1个关联条件

28、子查询与普通的查询一样,可以查询多行数据;子查询可以用在select、update、insert中;子查询的嵌套不受层数的限制;子查询的使用条件不受组函数的影响。having子句中也可以使用组查询

29、where只能用于行数据的筛选;只限制行having只能用于组数据的筛选。只限制组

30、删除语句只能用于整行删除,不能再delete子句中指定列名。

31、日期转换用TO_CHAR(date,fmt)函数,date是将被转换的日期,fmt指定转换后的格式。to_date 是把字符串转换为数据库中得日期类型,日期减日期得到的是具体数值,日期加减数值得到的仍是日期。

32、Drop 表C,无法被回滚,基于这个表的事务也会被提交,C表的数据会被删除,表结构也会被删除,索引也会被删除,但是视图不会被删除,但是查询的时候会报错。

33、序列不属于任何一张表,表可以用序列辅助插入一些数据,但是对表的处理不会影响序列

34、oracle数据库会在唯一约束和主键约束上自动创建索引

35、order by 后面为数字时,数字代表的是对应select后查询列的字段,1即代表第一列。

36、视图:视图是基于 SQL 语句的结果集的可视化的表。视图是一个虚拟表,但视图中的字段是来自一个或多个数据库中的真实的表中的字段。如果要向视图中插入数据,则视图创建时必须是简单视图,必须把非空以及外键的列显示出来,简单视图不能有组函数。视图可以建立在视图之上。

37、distinct:必须放在列的最前面,如果有两列,对两个列相加后的条件进行去重。

38、count(*)不会返回null,如果没有数据,则返回0。max(某一列):如果没有数据,则返回null.

39、存储过程是一组存贮在数据库中,完成特定功能的SQL语句集,它们只需编译一次,以后即可多次执行,用户通过指定存储过程的名字并给出参数来执行它。因为 Transact-SQL 语句不需要重新编译,所以执行存储过程可以提高性能。 存储过程优缺点
触发器是一种特殊的存储过程,不由用户直接调用。创建触发器时,将其定义为在对特定表或列进行特定类型的数据修改时激发。
复杂的操作或需要事务操作的SQL建议使用存储过程,而参数多且操作简单SQL语句不建议使用存储过程。

40、 使用Oracle数据库,必须启动的服务是:带有Service的OracleServiceSID(ORCL),带有监听的Listener,OracleHOME_NAMETNSListener,(启动后别人也可以连接你的数据库,不然只能本机连接)

41、数据块代表了数据库中最小粒度的逻辑数据存储层次。

42、表空间下面是数据文件,数据文件下面是数据块。

43、解锁账户:alter user scott account unlock;

44、并发操作会带来哪些数据不一致性:幻读(丢失修改),不可重读,脏读

45、在select中显示的字符用单引号引起来,字符之间的连接用||,对于别名,单词有空格,必须用双引号括起来。

46、在使用sql语句的时候,表的名字,表中的列的名字,以及列的值,是不区分大小写的。

47、Oracle数据库常用数据类型: 字符类型(VARCHAR,VARCHAR2) 数字类型(NUMBER) 日期类型(DATE,TIMESTAMP) 二进制与打大文本(BLOB,CLOB)

48、简述数据库的三大范式,并举例说明
列不可再分:数据库中存储地址,只需要一列就可以存储地址,而不是设置成省列,城市列,街道列。
属性完全依赖于主键:订单表(订单编号,商品编号,订单日期,订单总额),订单编号为主键,商品编号与主键没有直接联系,不符合第二范式,应该删除该列。
属性不可以依赖其他非主属性,只能依赖主键:订单表(订单编号,订单日期,顾客ID,顾客姓名),顾客ID和订单编号相关,顾客姓名与顾客ID相关,经过传递依赖,顾客姓名与订单编号相关。为了满足第三范式,应该去掉顾客姓名放入顾客表中。

49、简述Oracle的五种约束条件
主键约束:唯一,不能为空
非空约束:该列默认值是不是为空
唯一约束:唯一,但是可以为空
检查约束; 对该列数据的范围、格式的限制(如:年龄、性别等)
外键约束: 需要建立两表间的关系并引用主表的列

50、请说明你有哪些办法提高SQL执行效率?
1、尽量使用具体的列名,少使用*
2、少使用嵌套子查询
3、避免使用耗费资源的操作(distinct,union,union all,order by,minus等)
4、选择最有效的表名顺序,mysql解析表时,是从右向左解析,所以记录少的表放在右面。
5、对于含有比较多的or查询,建议分为多个查询,然后是使用union all进行连接
6、合理使用索引
7、where优先于having,因为可以尽早限定原始数据集

51、请简介数据库事务的四个特性。
原子性:事务是数据库的逻辑工作单位,一个事务里的操作,要么全部执行,要么全部不执行
一致性:事务的处理结果必须是使数据库状态从一个一致性状态到另一个一致性状态
隔离性:一个事务的执行不受其他事务的干扰,就是并发执行各个事务之间彼此互不干扰
持久性:一个事务一旦提交,对于数据库的修改是永久性的

52、简述DML DDL DQL DCL分别包含哪些具体的操作。
查询语句:主要由select 关键字完成,查询语句是SQL 语句中最复杂、功能最丰富的语句。
DML(Data Manipulation Language,数据操作语言) 语句:主要由insert、update和 delete 三个关键字完成。
DDL(Data Definition Language,数据定义语言)语句:主要由create、alter、drop和 truncate 四个关键字完成。
DCL(Data Control Language,数据控制语言)语句:主要grant和revoke 两个关键字完成。
DQL 数据库查询语言:主要是select关键字
TCL 事务控制语言:主要由commit、rollback和savepoint 三个关键字完成。

53、可以通过以下两个伪例来使用序列:
nextval:指的是序列的下一个内容,每执行一次此操作,序列值就会加一
currval:指的是取得当前序列的内容,每次执行后不变化
nextval必须执行在currval之前,不然那会报错,因为执行过nextval后会把增加的序列值赋给当前的序列值currval
在表中ROWID伪列记录了行的物理地址,而ROWNUM伪列是对行的动态编号

54、权限分为两类:系统权限、对象权限
如果是说三类,则加上角色权限
系统权限:进行数据库资源操作的权限,例如:创建数据表、索引等权限;
对象权限:维护数据库中对象的能力,即:由一个用户操作另外一个用户的对象。
权限的两个核心操作命令:grant(授权)、revoke(回收权限);

55、对于分组,因为在where里面不可直接使用伪列
分组

56、在安装ORCAL中自动开启的账号是system

57、若要连接数据库,则该用户必须要有的权限是create session

58、

猜你喜欢

转载自blog.csdn.net/ilikejj0/article/details/81663024
今日推荐