数据库常见面试题

1:delete和truncate有啥区别?
答:delete可以配合where语句使用,可以只删除其中某一部分,但truncate不可以;功能上truncate和不带where条件的delete语句一样,都是删除整个表的数据,但是不删除表定义,区别是,truncate删除表数据的时候既删除了数据又释放了空间,速度快,但是删除的数据无法恢复,但是delete只是删除了表中数据,但是空间没有释放,支持数据恢复,同时删除速度慢,因为在事务日志中记录删除的每一行记录
2:in 和exist 有啥区别?
答:一般来说,这两个是用来做两张(或更多)表联合查询用的,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,假设有A、B两个表,使用时是这样的:
1、select * from A where id in (select id from B)--使用in
2、select * from A where exists(select B.id from B where B.id=A.id)--使用exists也可以完全不使用in和exists:
3、select A.* from A,B where A.id=B.id--不使用in和exists
具体使用时到底选择哪一个,主要考虑查询效率问题:
第一条语句使用了A表的索引;
第二条语句使用了B表的索引;
第三条语句同时使用了A表、B表的索引;
如果A、B表的数据量不大,那么这三个语句执行效率几乎无差别;
如果A表大,B表小,显然第一条语句效率更高,反之,则第二条语句效率更高;
第三条语句尽管同时使用了A表、B表的索引,单扫描次数是笛卡尔乘积,效率最差
3:存储过程的优缺点?
答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
优点:1)存储过程是预编译过的,执行效率高。
      2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。
      3)安全性高,执行存储过程需要有一定权限的用户。
      4)存储过程可以重复使用,可减少数据库开发人员的工作量。
缺点:移植性差
4::索引优点缺点是什么?
答:索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。
    缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。其中唯一、不为空、经常被查询的字段
5:视图的优缺点是什么?
答:视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。
优点:1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
      2)用户通过简单的查询可以从复杂查询中得到结果。
      3)维护数据的独立性,试图可从多个表检索数据。
      4)对于相同的数据可产生不同的视图。
缺点:性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据
6:几种表连接方式,有什么区别?
答:内连接、自连接、外连接(左、右、全)、交叉连接
    内连接:只有两个元素表相匹配的才能在结果集中显示。
    外连接:左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示;右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
    全外连接:连接的表中不匹配的数据全部会显示出来。
    交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。
7:union和union all有什么不同?
答:UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。
    UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。
8:Varchar2和varchar有什么区别?
答:Char的长度是固定的,而varchar2的长度是可以变化的,比如,存储字符串“abc”对于char(20),表示你存储的字符将占20个字节,包含17个空,而同样的varchar2(20)只占了3个字节,20只是最大值,当你存储的字符小于20时,按实际长度存储。 char的效率要被varchar2的效率高。 目前varchar是varchar2的同义词,工业标准的varchar类型可以存储空字符串,但是oracle不能这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型varchar2,这个类型不是一个标准的varchar,他将在数据库中varchar列可以存储空字符串的特性改为存储null值,如果你想有向后兼容的能力,oracle建议使用varchar2而不是varchar
9:Oracle和Mysql的区别?
答:1)库函数不同。
    2)Oracle是用表空间来管理的,Mysql不是。
    3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。
    4)分页查询时候时候,mysql用limit oracle用rownum
10:Oracle语句有多少类型
答:Oracle语句分三类:DDL、DML、DCL。
    DDL(Data Definition Language)数据定义语言,包括: Create语句:可以创建数据库和数据库的一些对象。 Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。 Alter语句:修改数据表定义及属性。 Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。
    DML(Data Manipulation Language)数据操控语言,包括: Insert语句:向数据表张插入一条记录。 Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 Update语句:用于修改已存在表中的记录的内容。
    DCL(Data Control Language)数据库控制语言,包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。 Revoke语句:可以废除某用户或某组或所有用户访问权限
11:什么是PL/SQL?
答:PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。
12:序列的作用
Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。
13:、表和视图的关系
视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。 表就是关系数据库中实际存储数据用的

posted @ 2018-07-04 10:23  MoonSky007  阅读(168)  评论(0编辑  收藏  举报