Oracle简单基础面试题01

 Oracle基础面试题:
1.常见的数据库有哪些?区别是?尤其是mysql、oracle
大型数据库有:Oracle、Sybase、DB2、SQL server
小型数据库有:Access、MySQL等
Orcale :Orcale属于大型数据库系统,主要适用于大、中小型应用系统,或作为客户机/服务器系统中服务器端的数据库系统。
较安全、较贵
MySQL :由于其体积小、速度快、总体拥有成本低,开放源码
DB :最适于海量数据,性能较高适用于数据仓库和在线事物处理。
SQLServer :SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,多用户时性能不佳
access :界面友好、易学易用、开发简单、接口灵活
sybase :是一种典型的UNIX或Windows平台上客户机/服务器环境下的大型数据库系统。
2.如何优化数据库
查询操作建立合适的索引
避免使用*,尽量使用字段代替*和常量
避免第一范式、第二范式                                                                                                                             
避免使用where子句中对字段进行表达式操作和函数操作
尽可能使用变长字段
避免使用游标、因为游标效率较差
尽量避免大事务操作,提高系统并发能力
3.数据库对象有哪些(模式)
表、视图、索引、序列、存储过程、触发器
4.char/varchar/varchar2的区别
char :长度固定、区分中英文、中文占2个字节、英文占一个字节、适用于长度比较固定的,一般不含中文的情况、最大长度为2K字节
varchar :长度不固定、区分中英文、最大长度为4K字节
varchar2 :基本和varchar一样、不同在于,varchar2用null代替varchar的空字符串
varchar和varchar2适合用于长度不固定的,一般不含中文的情况
nvarchar和nvarchar2是长度不固定的,不区分中英文,其长度定义的是字符数
nvarchar/nvarchar2适用于存放中文
5.to_date、to_char、to_number
to_date :将字符串按照指定的格式转换为日期数据
to_char :将日期数据转换为字符串数据
to_number :将字符转换为数字
6.nvl/trunc/round/initcap/lower/upper/trim/substr/length
nvl :空值处理
trunc :截取
round :四舍五入
initcap :将参数字符串的每个单词的第一个字母转换为大写,其余为小写
lower :转为大写
upper :转为小写
trim :删除指定的字符串
substr :返回字符串的一部分字符
substrb :返回字符串的一部分字节
length :求长度   返回以字符为长度单位
lengthb :求长度   返回以字节为长度单位
7.decode
相当于if ...    
用法:decode(判断条件,匹配1,值1,匹配2,值2,...)
8.数据库中去重关键字
distinct
9.where/having的区别

having :必须用于有group by;先分组,再扫描表;条件中可以用聚合函数

where :可以单独使用;先扫描表,再分组;条件中不可以使用聚合函数

10.聚合函数有哪些?
count、avg、sum、max、min
11.排序的关键字,升序,降序,分别是什么,默认是什么?
order by 
升序:asc
降序:desc
默认:asc
12.数据库的语言分类?
分为五类:
数据定义语言(DDL)  :CREATE、DROP、ALTER等语句。
数据操作语言(DML)  :INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
数据查询语言(DQL)  :SELECT语句。(一般不会单独归于一类,因为只有一个语句)。
数据控制语言(DCL)  :GRANT、REVOKE等语句。
事务控制语句(TCL)  :COMMIT、ROLLBACK等语句。
分为三类:
DDL  :CREATE、ALTER、DROP、TRUNCATE、COMMENT、GRANT、REVOKE 
DML  :SELECT、INSERT、UPDATE、DELETE、CALL(PL/SQL or Java subprogram)、EXPLAIN PLAN(explain access path to data)、LOCK TABLE(control concurrency)
DCL  :COMMIT 、SAVEPOINT、ROLLBACK、SET TRANSACTION 
13.数据库中删除操作有哪些?区别是?
DELETE :DML、删除数据,不腾出表空间的空间、可以在不删除表的情况下删除所有的行、Oracle数据库不要求必须使用FROM关键字

TRUNCATE :DDL、删除表中所有行的数据,但是会保留表的结构、不能rollback、速度快、删的数据不能恢复、只能以表或簇为操作对象,而不能操作视图、同义词等模式对象、释放表所占用的磁盘空间、不会触发表的删除触发器

语法格式:TRUNCATE TABLE [schema.]table_name;

DROP :DDL、删除数据和表、使用DROP TABLE语句删除表时,表不会被立即删除,Oracle数据库将表进行了重命名并放入回收站中,这样还可以通过闪回操作复删除的表。

14.关联查询与子查询的区别?

子查询就是查询中又嵌套的查询

子查询是指子查询返回的结果集是 N 行 N 列的一个表数据。

关联子查询会引用外部查询中的一列或多列,这种子查询之所以被称为关联子查询,是因为他的确与外部语句相关。

关联子查询 :exists 、not exists

exists 与 in 的比较 :

in操作符实现指定匹配查询

exists操作符只是检查行是否存在,针对行的存在性

在使用not exists 和 not in 时,如果一个值列表中包含有空值,not exists 返回true ,而 not in 返回false

15.内连接,左外连接,全外连接的结果集分别是什么?

内连接  :   join ...on       表1 join 表2  on 条件

内连接结果集是可以在两张表中查询到匹配数据的数据记录

左外连接  :  表1 left join 表2 on 条件   

左外连接结果集:驱动表的所有记录与其在匹配表中相匹配的数据===>驱动表的数据一个都不能少

全外连接  :   表1 full join 表2 on 条件

全外连接是将两个表的所有记录都查询出来

全外连接的结果集=内连接的结果集+驱动表在匹配表中与之匹配不上的记录和空值+匹配表中在驱动表中与之匹配不上的记录和空值

驱动表与匹配表可以互换

16.驱动表(主表)、匹配表(从表)?

驱动表与匹配表  :  表1 join 表2  on 条件

a.表1是驱动表(主表),表2是匹配表(从表)

b.等值连接下,驱动表与匹配表是可以互换位置的,不影响结果

c.执行方式:遍历驱动表,在匹配表中找到与驱动表相匹配的数据

17.并集、差集、交集的关键字

并集  :union/union all

交集  :intersect

差集  :minus

18.union和union all 的区别?

union :去重且排序

union all :不去重、不排序

19.什么是视图?索引?序列(定义,语法)?

视图(View)是一种虚拟表,内容由查询语句定义,本质上就是一条存储起来的SQL语句,是一个命名的查询,主要功能是用于改变基表(Base Table,组成视图的表)的数据显示,简化查询。

创建视图的语法格式如下:

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [schema].view_name

[(column_name[, column_name]...)]

AS Subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];

Oracle数据库中的索引是一种建立表或簇基础上的数据对象,和表一样具有独立的段存储结构,需要在表空间中为其分配存储空间。

索引是减少磁盘 I/O的一种重要的手段,通过在表的一个或多个列上创建索引,可以提高查询表中数据的速度。

索引有两个特征,即唯一性索引和复合索引。 

语法格式如下:

CREATE [ UNIQUE | BITMAP ] INDEX [schema.]index_name

ON [schema.] table_name (column_name1 [ ASC | DESC ][, column_name2 [ ASC | DESC ],...])

TABLESPACE tablespace_name

NOCOMPRESS | COMPRESS column_number

LOGGING | NOLOGGING

NOSORT | SORT

REVERSE

序列可以自动生成,主要用来自动为表中的数据类型的主键列提供有序的唯一值,这样就可以避免在向表中添加数据时,手工指定主键值。

序列和视图一样不占用实际的存储空间,只是在数据字典中保存信息。

创建序列的语法格式如下:

CREATE SEQUENCE [schema.]sequence_name

[ INCREMENT BY n ]

[ START WITH n ]

[ MAXVALUE n | NOMAXVALUE ]

[ MINVALUE n | NOMINVALUE ]

[ CYCLE n | NOCYCLE ]

[ CACHE n | NOCACHE ]

[ ORDER | NOORDER ]

20.视图的作用?

不占用实际存储空间,节约资源

可以优化查询

保证数据的安全

可以合并分离的数据,创建分区视图

适当的使用视图可以更清晰地表达查询

21.索引的作用以及优缺点?

创建索引可以大大提高系统的性能。

优点 :

第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 

第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。 

第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 

第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 

第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点 :

第一,创建索引和维护索引要耗费时间,这种时间随着数据 量的增加而增加。 

第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 

第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

何时使用索引  :

      (1)表的数据量一定要很大。

      (2)索引列的查询频率一定要高。

      (3)满足查询条件记录数不能很多。

      (4)在需要排序的列上创建索引。

      (5)可以在查询频率高的组合列上创建索引。

      (6)在多表连接查询中的连接列上创建索引。

      (7)不要在低基数的列上创建索引。

      (8)当需要对一个表频繁的进行增删改操作的时候,不应该为该表创建索引。

      (9)要限制在表上创建索引的数量。

      (10)在向数据库导入数据时,不要创建索引。

22.怎样创建一个序列?

创建序列的语法格式如下:

CREATE SEQUENCE [schema.]sequence_name

[ INCREMENT BY n ]

[ START WITH n ]

[ MAXVALUE n | NOMAXVALUE ]

[ MINVALUE n | NOMINVALUE ]

[ CYCLE n | NOCYCLE ]

[ CACHE n | NOCACHE ]

[ ORDER | NOORDER ]

23.Oracle数据库中的约束有哪些?(语法、应用在中的增删改)

约束 :主键,唯一,外键,非空,检查

(1)主键约束:列级、表级

--1)创建主键约束:

列级:

create table a(

id number(10) primary key ,

name varchar2(25)

);

表级:

create table a1(

id number(10) ,

name varchar2(25),

constraint a1_id_pk primary key(id)

);

--2)添加主键约束

--alter table 表名 add(constraint a1_id_pk primary key(id))

--alter table 表名 add(primary key(id))

--3)删除主键

--alter table 表名 drop primary key

--alter table 表名 drop constraint 约束名

--4)修改约束名

--alter table 表名 rename constraint old_name to new_name;

(2)唯一 unique  一张表可以有多个唯一约束  唯一约束值必须唯一 允许有空值,几个都无所谓

--1)创建唯一约束

列级:

create table tbb(

tbb_id number(10) primary key,

tbb_size number(20) not null,

tbb_colour varchar2(20),

constraint tbb_uq unique(tbb_size)

);

create table tb(

tb_id number(10) primary key,

tb_size number(20) not null,

tb_colour varchar2(20),

constraint tb_uq unique(tb_size,tb_colour)

);

上面是(tb_size,tb_colour)联合唯一

联合唯一与分别对不同字段定义为唯一约束的结果不同

--2).删除唯一约束

alter table 表名 drop unique(字段名)

alter table 表名 drop constraints unique uk_XX;

(3)外键约束  foreign key (fk)

--1)创建外键约束

列级约束:

create table tb(

tb_id number(10) primary key,

tb_size number(20) not null,

tb_colour number(20) constraint tb_a_fk references tbb(tbb_id)

);

create table tbb(

tbb_id number(10) primary key,

tbb_si number(20) not null,

tbb_co varchar2(20) 

);

select * from tb;

drop table tbb;

表级约束

create table e2(

c1 number(12),

c2 number(12) constraint tb_a_fk  foreign key(c2) references e(c1)

);

--2)删除外键约束

--alter table 表名 add 添加上外键关系 on delete cascade;

--alter table 表名 drop constraint 名;

alter table tbb add constraint tb_a_fk references tbb(tbb_id)

 on delete cascade;

(4)非空

--1)创建:not null

--2)修改非空约束

--alter table 表名 modify(name null)

alter table tb modify(tb_size null);

alter table tb modify(tb_size not null); 

(5)检查 check 

--1).创建检查约束方式

列级:

create table con(

id number(6),

name varchar2(11),

sex char(10) constraint con_age_a check(sex in('男','女'))

);

--2)删除检查约束

--alter table 表名 drop constraint 名

alter table asd drop constraint asd_age_a;

--注意:检查约束不允许加在sysdate,rowid(伪列,唯一的),user(数据的所有用户或者所有表)

24.事务的特点ACID(关键字)?

事务必须同时满足四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称为ACID

A:原子性是指一个事务是不可分割的数据库逻辑工作单位

C:事务在完成时,必须使所有的数据都保持一致状态

I:个事务的执行不能被其它并发执行的事务干扰

D:持久性是指一个事务一旦提交,它对数据库中数据的改变应该是永久性的,即使发生任何故障也不应该对其结果有任何影响。

25.锁

基本的封锁类型有排它锁和共享锁两种。

锁可以进行同时执行控制

使用两相锁确保可序列化

手动加锁:

(1)SELECT FOR UPDATE语句

语法格式如下:

SELECT 语句 FOR UPDATE [OF columns] [WAIT n | NOWAIT] [SKIP LOCKED];

(2)LOCK TABLE语句

语法格式如下:

LOCK TABLE table_name IN lockmode MODE NOWAIT | WAIT n;

26.哪些操作是默认提交,哪些需要事务关键字处理?

在确保数据完整性的情况下,尽量及时使用COMMIT命令对DML操作进行提交。

commit、rollback、savepoint

27.oracle和mysql的分页是怎么实现的?

Oracle :rownum

例:

查询行号大于10的学生的学号、姓名和民族。
select s_id,s_name,s_nation from(
select rownum rn,s_id,s_name,s_nation from student)
where rn>10;

mysql :limit

QUERY_SQL limit ?,? 

使用limit关键字,第一个“?”是起始行号,第二个问号是返回条目数

28.存储过程,函数,触发器的定义与应用?

创建存储过程的语法格式如下:

CREATE  [OR REPLACE]  PROCEDURE  procedure_name 

[(parameter_name  [ IN | OUT | IN OUT ]  datatype, …)]

IS | AS

   declare_section;

BEGIN

   statement;

END  [procedure_name];

创建存储函数的语法格式如下:

CREATE  [OR REPLACE]  FUNCTION  function_name 

[(parameter_name  [ IN | OUT | IN OUT ]  datatype, …)]

RETURN expression

IS | AS

declare_section;

BEGIN

statement;

END  [function_name];

所谓触发器就是指执行由某个事件引起或激活操作的对象。触发器是一种特殊的存储过程

DML触发器语法格式如下:

CREATE [ OR REPLACE ] TRIGGER trigger_name

[BEFORE|AFTER ]trigger_event [OF column_name ]  

ON tle_name

[ FOR EACH ROW]

[ WHEN trigger_condition ]

BEGIN

trigger_body;

END [ trigger_name ]

29.连接数据库的参数?

Class.forName("oracle.jdbc.driver.OracleDriver");

String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";

Connection conn = DriverManager.getConnection(url,username,userpwd);

30.段、块、区...定义?

逻辑存储结构,主要包括表空间、段、区、数据块

表空间是Oracle中最大的逻辑存储结构。表空间用于存储用户在数据库中创建的所有内容。

段是一组盘区,这组盘区组成了被Oracle视为一个单位的数据库随想,例如表或索引。因此,段一般是数据库终端用户将处理的最小存储单位

在Oracle数据库中,区是磁盘空间分配的最小单位,由一个或多个数据块组成。

数据块(块)是用来管理存储空间的基本单位,也是最小的逻辑存储单位。



原创文件,如有错误望指出

你可能感兴趣的:(Oracle)