精华内容
下载资源
问答
  • 数据库面试题目

    千次阅读 2013-05-29 12:15:46
    1 关系数据库的设计范式有哪些? 第一范式: 关系数据库表的每一列都是不可分割的基本数据项。第一范式是确保列中的值是不重复。 第二范式:必须是第一范式。而且数据库表中的每一行必须被唯一的区分。 通常将表的一...

    1  关系数据库的设计范式有哪些?

    第一范式: 关系数据库表的每一列都是不可分割的基本数据项。第一范式是确保列中的值是不重复。

    第二范式:必须是第一范式。而且数据库表中的每一行必须被唯一的区分。 通常将表的一个或者多个属性作为行的主键。(另一种说法:而且R中每一个非主属性完全函数依赖于R的某个候选键)

    第三范式:必须是第二范式。一个表中的列不能依赖于另一个表中的非主键列。(另一种说法:每个非主属性都不传递依赖于R的候选键)

    BCF: 必须是第一范式,而且每个属性都不传递依赖于关系R的候选键。

    第四范式:设R是一个关系模式,D是R上的多值依赖集合。如果D中成立非平凡多值依赖X->->Y时,X必是R的超键。


    2 存储过程和函数的区别是什么?

    存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。而函数通常是它接收参数并返回某种类型的值,并且不涉及特定用户表。

    如下表格是在Oracle中里面的:




    存储过程的定义:

    CREATE [OR REPLACE] Procedure [模式名.]过程名

                          [(参数名 [IN | OUT| IN OUT ] 数据类型 ...)]

    {IS | AS}

                      [说明部分]

    <PL/SQL块>;


    函数的定义:

    CREATE [OR REPLACE]  FUNCTION  [模式名.]过程名

                          [(参数名 [IN ] 数据类型 ...)]

                          RETURN 数据类型

    {IS | AS}

                      [说明部分]

    <PL/SQL块>;



    3  什么是数据库事务?

    答案:数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 满足ACID。

    A 原子性: 事务的原子性是指一个事务要么全部执行,要么不执行。

    C 一致性: 事务的一致性是指事务的运行并不改变数据库中数据的一致性。 (银行转账)

    I 独立性:事务的独立性是指并发执行的事务相互之间不能干扰。

    D 持久性: 事务的持久性是指 事务运行成功以后,系统的更新是永久的。


    4 索引基本问题

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。建立索引的目的是加快对表中记录的查找排序。
    为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
    创建索引可以大大提高系统的性能。
    创建索引的优点:
    第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
    第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
    第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

    也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?
    因为,增加索引也有许多不利的方面。
    创建索引的缺点:
    第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
    第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。
    什么情况下创建索引??一般来说,应该在这些列上创建索引
    1  在经常需要搜索的列上,可以加快搜索的速度;
    2  在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
    3  在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
    4   在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
    5   在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
     6   在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
    同样,对于有些列不应该创建索引
    什么情况下不宜创建索引??一般来说,不应该创建索引的的这些列具有下列特点:
    第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
    第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
    第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少,不利于使用索引
    第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。


    5 解释聚集索引和非聚集索引之间的区别

    答案: 聚集索引的顺序就是数据的物理存储顺序,而对非聚集索引是索引顺序与数据的物理存储顺序无关。正因为如此,一个表最多只能有一个聚集索引。

    聚集索引确定了数据的物理顺序。聚集索引类似于电话薄(按姓氏排序)。 由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话薄按照姓氏和名字进行组织一样。 聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理上相邻。


    非聚集索引:非聚集索引与课本中索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按照索引键值的顺序存储,而表中的信息按另一种顺序存储。


    eg: 在sql Server中,索引是通过二叉树的数据结构来描述的,我们可以这么理解聚集索引: 索引的叶节点就是数据节点。 而非聚集索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。



    6  角色

    数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

     

    1 创建一个角色

    Create ROLE R1;

     

    2 使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限

    GRANT SELECT ,PDATE,INSERT

    ON TABLE Student

    TO R1;

     

    3  将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限

    GRANT R1

    TO 王平,张明, 赵玲;

     

    4  当然,也可以一次性的通过R1来回收王平的这3个权限

    REVOKE R1

    FROM 王平;

     

    角色的修改

    GRANT DELETE

    ON TABLE Student

    TO R1

    使角色R1在原来的基础上增加了Student表的DELETE权限

     

    REVOKE SELECT

    ON TABLE Student

    FROM R1;

     

    7  求成绩第二高的学生的名字

    求:1、每个科目的最高分。 
          2、java成绩最高的姓名 
          3、java成绩第二高的姓名



    1.每个科目的最高分:
        SELECT kemu,max(score) FROM table GROUP BY kemu;

        分析:找出成绩最高的人后,根据科目分组就可以得到每组的最高分的人。


    2.java成绩最高的姓名:
         SELECT name FROM table WHERE kemu='java' and 
               score=(SELECT max(score) FROM table WHERE kemu='java');

         分析:从表格中查询名称时,提出两点条件1.科目是java,2.科目是java的最高分


    3.java成绩第二高的姓名:
         SELECT name FROM table WHERE kemu='java' GROUP BY name 
               ORDER BY SCORE DESC LIMIT 1,1;

        分析:在查询姓名时根据[color=blue]  kemu='java'  [/color]这个条件,然后根据姓名分组,然后根据成绩排序,最后在列表中根据TOP 方法 LIMIT 选取从0开始的第二个姓名,只取1个人。OK了!这个题目主要考察了分组,排名和TOP取值方面的知识,难度相对最高。如果遇到这样的题,应该把大的问题一个个分散成小问题,然后一个个的解决小问题,然后拼凑起来,大问题就可以解决了。



    8  稠密索引和稀疏索引


    一、稠密索引
    如果记录是排好序的,我们就可以在记录上建立稠密索引,它是这样一系列存储块:块中只存放记录的键以及指向记录本身的指针,指针就是一个指向记录或存储块地址。稠密索引文件中的索引块保持键的顺序与文件中的排序顺序一致。既然我们假定查找键和指针所占存储空间远小于记录本身,我们就可以认为存储索引文件比存储数据文件所需存储块要少得多。当内存容纳不下数据文件,但能容纳下索引文件时,索引的优势尤为明显。这时,通过使用索引文件,我们每次查询只用一次I/O操作就能找到给定键值的记录。
      www.2cto.com  
    下图所示为一个建立在顺序文件上的稠密索引。
    图1 顺序文件(右)上的稠密索引(左)
    第一个索引块存放指向前四个记录的指针,第二个索引块存放指向接下来的四个记录的指针,依此类推。
    稠密索引支持按给定键值查找相应记录的查询。给定一个键值K,我们先在索引块中查找K。当找到K后,我们按照K所对应的指针到数据文件中找到相应的记录。似乎在找到K之前我们需要检索索引文件的每个存储块,或平均一半的存储块。然而,由于有下面几个因素,基于索引的查找比它看起来更为有效:
     
    1.索引块数量通常比数据块数量少。
    2.由于键被排序,我们可以使用二分查找法来查找K。若有n个索引块,我们只需查找log2n个块。
    3.索引文件可能足够小,以至可以永久地存放在主存缓冲区中。要是这样的话,查找键K时就只涉及主存访问而不需执行I/O操作。
     
    二、稀疏索引
    稀疏索引只为数据文件的每个存储块设一个键-指针对,它比稠密索引节省了更多的存储空间,但查找给定值的记录需更多的时间。只有当数据文件是按照某个查找键排序时,在该查找键上建立的稀疏索引才能被使用,而稠密索引则可以应用在任何的查找键。如图2所示,稀疏索引只为每个存储块设一个键-指针对。键值是每个数据块中第一个记录的对应值。
    图2 顺序文件上的稀疏索引
    同图1实例一样,我们假定数据文件已排序,且其键值为连续的10的倍数,直至某个较大的数。我们还继续假定每个存储块可存放四个键-指针对。这样,第一个索引存储块中为前四个数据存储块的第一个键值的索引项,它们分别是10、30、50和70。按照前面假定的键值模式,第二个索引存储块中为第五至第八个数据存储块的第一个键值的索引项,它们分别是90、110、130和150。图中我们还列出第三个索引存储块存放的键值,它们分别是假设的第九至第十二个数据存储块的第一个键值。
      www.2cto.com  
    在已有稀疏索引的情况下,要找出查找键值为K的记录,我们得在索引中查找到键值小于或等于K的最大键值。由于索引文件已按键排序,我们可以使用二分查找法来定位这个索引项,然后根据它的指针找到相应的数据块。现在我们必须搜索这个数据块以找到键值为K的记录。当然,数据块中必须有足够的格式化信息来标明其中的记录及记录内容,可以采用2.5节和2.7节中的任何技术。

    10  B-Tree索引和Hash索引的区别  



    Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。


    可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。


    (1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。


    由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。


    (2)Hash 索引无法被用来避免数据的排序操作。


    由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;


    (3)Hash 索引不能利用部分索引键查询。


    对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。


    (4)Hash 索引在任何时候都不能避免表扫描。


    前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。


    (5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。


    对于选择性比较低(即选择度  %)的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。


    hash相当于把key通过hash函数计算,得到key的hash值,再用这个hash值做指针,查找hash表中是否存在key,如果存在就返回 key所对应的value,选定一个好的hash函数很重要,好的hash函数可以使计算出的hash值分布均匀,降低冲突,只有冲突减小了,才会降低 hash表的查找时间。


    b-tree完全基于key的比较,和二叉树相同的道理,相当于建个排序后的数据集,使用二分法查找算法,实际上也非常快,而且受数据量增长影响非常小。



    9  行式数据库 和 列式数据库


    展开全文
  • 常见的ORacle数据库题目题目是从网上找到的,给出答案了,都是自己写的,如果有问题请联系我
  • 我主要是用来面试JAVA的工程师的时候,用来面试之前的准备,比较大。数据库的基础使用、技巧。理论。用法、所以面试成功,所以用来共享给你哦!
  • 1. 对字符串操作的函数 答ASCII) --函数返回字符表达式最左端字符的 ASCII 码值 CHR) --函数用于将 ASCII 码转换为字符 --如果没有输入 0 ~ 255 之间的 ASCII 码值 CHR 函数会返回一个 NULL 值 --应该是必须给 chr)...
  • 数据库面试题目集锦

    2019-08-18 23:00:01
    一、数据库问答题 SQL语言包括哪些类型? 数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等 数据操纵DML:Select ,insert,update,delete, 数据控制DCL:grant,revoke 内联接,外联接区别...

    一、数据库问答题

    1. SQL语言包括哪些类型?
      数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等
      数据操纵DML:Select ,insert,update,delete,
      数据控制DCL:grant,revoke

    2. 内联接,外联接区别?
      内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
      在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接(mysql不支持)三种。

    3. 什么是存储过程?用什么来调用?
      答:存储过程是一个预编译的SQL语句,只需创建一次,以后在程序中就可以调用多次。由于存储过程是经过预编译处理的,因此如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。存储过程不允许执行return语句,但是可以通过out参数返回多个值,存储过程一般是作为一个独立的部分来执行,存储过程是一个预编译的SQL语句。

    4.触发器的作用?
    答:触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。触发器无法由用户直接调用,而是由于对表的【增/删/改】操作被动引发的。

    1. 索引的作用?和它的优点缺点是什么?
      答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入和修改的速度,同时索引也会占用一定的存储资源,因此我们在建索引的时候需要斟酌。

    2. 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
      答:我是这样做的,尽可能使用约束,如主键,外键,非空字段等来约束(Check约束在mysql中可以使用但是对数据验证没有任何作用),这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。 最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

    3. 什么是事务?什么是锁?事务有哪些类型?

    事务:就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
    锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
    扁平化事务:在扁平事务中,所有的操作都在同一层次,这也是平时使用最多的事务,主要限制是不能提交或回滚事务的某一部分,要么都成功要么都回滚。
    带保存点的扁平事务:解决了扁平事务的弊端,它允许事务在执行过程中回滚到较早的状态而不是全部回滚,通过在事务中插入保存点,当操作失败后可以选择回滚到最近的保存点处。
    链事务:可看做第二种事务的变种,它在事务提交时,会将必要的上下文隐式传递给下一个事务,当事务失败时,可以回滚到最近的事务,不过链事务只能回滚到最近的保存点,而带保存点的扁平化事务是可以回滚到任意一个保存点。
    嵌套事务:由顶层事务和子事务构成,类似于树的结构,一般顶层事务负责逻辑处理,子事务负责具体的工作,子事务可以提交,但真正的提交要等到顶层事务的提交,如果顶层事务回滚,那么所有的子事务都将回滚。
    分布式事务:在分布式环境中的扁平化事务。
    常用的分布式事务解决方案:
    (1) XA规范,是保证强一致性的刚性事务,实现方式有两段式提交(2PC)和三段式提交(3PC),2PC需要一个事务协调者来保证事务的参与者都完成了第一阶段的准备工作,如果协调者收到了所有的参与者都准备好的消息,就会通知所有的事务执行第二阶段的提交,一般场景下两段式提交已经能很好的解决分布式事务了。然而两阶段在即使只有一个进程发生故障时,也会导致整个系统存在较长时间的阻塞。三段式提交通过增加pre-commit阶段来减少两段式提交提到的系统阻塞时间,三段式提交很少在实际中使用,简单了解就行了。
    (2) TCC:是满足最终一致性的柔性事务方案。TCC采用补偿机制,核心的思想是对每一个操作都要注册对应的确认和补偿操作,分为三个阶段,try阶段主要对业务系统进行检测及资源预留,confirm阶段对业务系统进行确认提交,cancel阶段是对业务执行错误,执行回滚释放预留的资源。
    (3) 消息一致性方案:基本思路是将本地操作和发送消息封装在一个事务中,保证本地的操作和消息发送要么都成功,要么都失败。下游应用订阅消息,收到消息后执行对应的操作。
    (4)GTS:阿里云的全局事务服务,对应的开源版本是Fescar,Fescar基于两段式提交进行改良,剥离了分布式事务方案对数据库在协议支持上的要求,使用Fescar的前提是分支事务中涉及的资源必须支持ACID事务的关系型数据库,分支的提交和回滚都依赖于本地事务来保障。了解即可。
    8. 事务的基本要素?
    原子性Atomicity,即不可分割性,事务要么全部被执行,要么就全部不被执行;
    一致性Consistency,事务的执行使得数据库从一种正确状态转换成另一种正确状态;
    隔离性Isolation,在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务;(不同的隔离级别可以防止不同的事务并发问题脏读、不可重复读、幻读)
    持久性Durability, 事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存;

    1. 事务的并发问题?事务的隔离级别有哪些?

       事务的并发问题
      

    1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

    2、不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致,事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

    3、幻读:在一个事务里面的操作中发现了未被操作的数据,系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条新的学生成绩具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

    小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

    事务隔离级别 脏读 不可重复读 幻读
    读未提交(read-uncommitted) 是 是 是
    读已提交(read-committed) 否 是 是
    可重复读(repeatable-read) 否 否 是
    串行化(serializable) 否 否 否
    10. 什么叫视图?游标是什么?
    答:视图是对一些原表选择部分列合并成的一个虚拟表格,具有和物理表相同的功能。可以对视图进行插入、更新、删除操作。对视图的修改会同步到具体数据表中。注意以下几种情况不能对视图进行插入、更新、删除的操作:

    视图列中含有统计函数的情况
    视图使用了GROUP BY /HAVING,DISTINCT,UNION语句的情况
    视图定义时使用了子查询的情况
    对视图的修改涉及到了多个基础表的数据
    游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

    1. 什么是主键?什么是外键?
      主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

    12.一个表有过多索引需要有什么样的性能考虑?
    对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

    13.你可以用什么来确保表格里的字段只接受特定范围里的值?
    这个问题可以用多种方式来回答,但是只有一个答案是"好"答案。您希望听到的回答是Check限制(MYSQL有,但是没有强制约束,使用了也没用),它在数据库表格里被定义,用来限制输入该列的值。
    触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

    1. 什么是相关子查询?如何使用这些查询?
      相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会用到外部查询的值。如:SELECT * FROM A WHERE A.id IN(SELECT B.aId FROM B WHERE B.name=A.name)

    2. 使用索引查询一定能提高查询的性能吗?为什么
      通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.
      索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:
      1.基于一个范围的检索,一般查询返回结果集小于表中记录数的30%宜采用;
      2.基于非唯一性索引的检索
      索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同

    3. 列举几种表连接方式,并写出SQL语句?
      内连接、外连接(左、右、全)、自连接(特殊的内连接)、交叉连接
      Or hash join/merge join/nest loop(cluster join)/index join
      1)内连接:只连接匹配的行
      select A.c1,B.c2 from A join B on A.c3 = B.c3;
      2)左外连接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行)以及右边表中全部匹配的行
      select A.c1,B.c2 from A left join B on A.c3 = B.c3;
      3)右外连接:包含右边表的全部行(不管左边的表中是否存在与它们匹配的行)以及左边表中全部匹配的行
      select A.c1,B.c2 from A right join B on A.c3 = B.c3;
      4)全外连接:包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的行
      select A.c1,B.c2 from A full join B on A.c3 = B.c3;
      5)交叉连接又称隐式的内联查询:生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配
      select A.c1,B.c2 from A,B;

    交叉连接与内连接,查询的结果是一样的,但是效率不同,内连接查询的效率更高。

    1. 为管理业务培训信息,建立3个表:
      S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
      C(C#,CN)C#,CN分别代表课程编号,课程名称
      SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
      1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?
      答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基础’)
    1. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?
      答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
    2. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?
      答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
      4)查询选修了课程的学员人数
      答:select 学员人数=count(distinct s#) from sc
    3. 查询选修课程超过5门的学员学号和所属单位?
      答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
    1. 查询表A(id,name)中存在id重复三次以上的记录,查询语句请写出来?
      SELECT * FROM A GROUP BY id HAVING COUNT(id)>3

    2. 适用于MySql的分页查询语句?
      –limit函数,从数据库表中的m条记录开始,检索n条记录。
      select * from 表名 limit m,n;

    3. 适用于Oracle的分页查询语句?使用rownum关键字,oracle特有的分析函数和树查询非常有用可以看看。
      –从m条开始,检索n条记录。
      select * from (select rownum r,t1.* from 表名称 t1 where rownum < m + n) b where b.r >= m;

    4. 如何优化数据库,如何提高数据库的性能?
      1)给数据库做索引,合理的索引能立即显著地提高数据库整个系统的性能。
      2)在适当的情况下,尽可能的用存储过程而不是SQL查询。因为前者已经过了预编译,运行速度更快。
      3)优化查询语句,通过高性能的查询语句提高数据库的性能。

    5. 谈谈数据库设计的三范式
      第一范式的定义:所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,则这个表属于第一范式(常记成1NF)。简而言之:“每一字段只存储一个值”。例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码)
      第二范式的定义:如果一个表属于1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成2NF )。简而言之:必须先符合1NF的条件,且每一行都能被唯一的识别。将1NF转换成2NF的方法是添加主键。例如:学号,姓名,课程名,成绩
      第三范式的定义:如果一个表属于2NF,且不包含传递依赖性,则这个表是第三范式(常记成 3NF)。简而言之,第三范式就是属性不依赖于其它非主属性。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

    6. 设计数据库应注意那些问题
      首先应尽量满足三范式的要求,在一定程度上打破三范式的要求以提高数据库的性能。例如,我们创建某些表的时候,不仅会插入外键,还会插入相关的属性,这违反了第三范式,但这样做的好处,就是我们在业务查询的时候会减少很多关联查询,从而提高查询效率。

    7. 表与表之间的关联关系
      分为3种:一对一、一对多、多对多。

    8. 主键和外键的区别
      主键在本表中是唯一的、不可为空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

    9. 游标的作用?如何知道游标已经到了最后?
      游标用于定位结果集的行,在mysql中用DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done = 1; 可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

    10. 事前触发和事后触发有何区别?语句级触发和行级触发有何区别?
      事前触发器运行于触发事件发生之前,如表的插入、更新、删除之前,而事后触发器运行于触发事件发生之后,如表的插入、更新、删除之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

    11. 数据库设计的必要性及设计步骤
      好的数据库结构有利于:节省数据的存储空间,能够保证数据的完整性,方便进行数据库应用系统的开发
      设计不好的数据库结构将导致:数据冗余、存储空间浪费和内存空间浪费
      不管数据库的大小和复杂程度如何,可以用下列基本步骤来设计数据库:收集信息–标识对象–设计数据模型–标识每个对象–存储的信息类型–标识对象之间的关系

    12. 什么是数据模型?什么是规范化?
      数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。
      从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据

    13. 说出一些数据库优化方面的经验?
      用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存
      “inert into user values(1,1,1)”-?二进制
      “inert into user values(2,2,2)”-?二进制
      “inert into user values(?,?,?)”-?二进制

    有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)
    (对于hibernate来说,就应该有一个变化:empleyee->Deptment对象,现在设计时就成了employee?deptid)

    看mysql帮助文档子查询章节的最后部分,例如,根据扫描的原理,下面的子查询语句要比第二条关联查询的效率高:
    1)select e.name,e.salary where e.managerid=(select id from employee where name=‘zxx’);
    2)select e.name,e.salary,m.name,m.salary from employees e,employees m where
    e.managerid = m.id and m.name=‘zxx’;

    表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
    将姓名和密码单独从用户表中独立出来。这可以是非常好的一对一的案例哟!
    sql语句全部大写,特别是列名和表名都大写。特别是sql命令的缓存功能,更加需要统一大小写,sql语句?发给oracle服务器?语法检查和编译成为内部指令?缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用?和PreparedStatment
    还有索引对查询性能的改进也是值得关注的。

    1. union和union all有什么不同?
      Union和Union All的区别之一在于对重复结果的处理。

    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
    而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
    从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL

    1. 几种索引类型?

    MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、组合索引、全文索引

    索引加快数据库的检索速度
    索引降低了插入、删除、修改等维护任务的速度
    唯一索引可以确保每一行数据的唯一性
    通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
    索引需要占物理和数据空间
    36. 所有部门之间的比赛组合
    一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

    答:SELECT t1.name AS whiteName,t2.name AS blackName FROM department t1 INNER JOIN department t2

    1. 数据库的乐观锁和悲观锁是什么?数据库表锁和行锁又是什么?

    数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
    乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

    悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
    乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
    在MySQL中 引擎为InnoDB的表支持表锁和行锁,而引擎为MyISAM的表只支持行锁

    表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
    行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高
    38.简单说一说drop、delete与truncate的区别

    SQL中的drop、delete、truncate都表示删除,但是三者有一些差别

    delete和truncate只删除表的数据不删除表的结构
    速度,一般来说: drop> truncate >delete
    delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
    如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
    40. char和vachar区别?

    char是固定长度,处理速度比vachar快,费内存空间,当存储的值没有达到指定的范围时,会用空格替代。
    vachar是不固定长度,节约存储空间,存储的是真实的值。
    如:存储字符串’abc’
    使用char(10),表示存储的字符将占10个字节(包括7个空字符)
    使用varchar(10),则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。

    1. 什么是E-R图?

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    ER图中有如下四个成分:

    矩形框:表示实体,在框中记入实体名。

    菱形框:表示联系,在框中记入联系名。

    椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。

    连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。

    E-R图的3个基本要素是实体、属性和联系

    42.MySQL两种引擎InnoDB和MyISAM的区别?

    MyISAM不支持事务,而InnoDB支持事务。
    MyISAM锁的是表锁(表锁又分读锁和写锁),而InnoDB锁为行级锁。
    MyISAM支持全文类型索引,而InnoDB不支持。
    MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
    MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
    InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。
    43. 如何解决MYSQL数据库中文乱码问题?

    建表和建库的时候指定字符集。

    1. 每个月份的发生额都比101科目多的科目
      请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。
      请注意:TestDB中有很多科目,都有1-12月份的发生额。
      表名:TestDB
      字段:AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。
      答案:
      SELECT DISTINCT t1.AccID FROM TestDB t1 INNER JOIN TestDB t2 ON t2.Occmonth=t1.OccMonth AND t1.DebitOccur>t2.DebitOccur AND t2.AccID=101

    2. 统计每年每月的信息
      year month amount
      1991 1 1.1
      1991 2 1.2
      1991 3 1.3
      1991 4 1.4
      1992 1 2.1
      1992 2 2.2
      1992 3 2.3
      1992 4 2.4
      查成这样一个结果
      year m1 m2 m3 m4
      1991 1.1 1.2 1.3 1.4
      1992 2.1 2.2 2.3 2.4
      答案一:
      select sales.year ,
      (select t.amount from sales t where t.month=‘1’ and t.year= sales.year) ‘1’,
      (select t.amount from sales t where t.month=‘1’ and t.year= sales.year) ‘2’,
      (select t.amount from sales t where t.month=‘1’ and t.year= sales.year) ‘3’,
      (select t.amount from sales t where t.month=‘1’ and t.year= sales.year) as ‘4’
      from sales group by year;
      答案二:

    SELECT sales.year,GROUP_CONCAT(CONCAT(sales.year,’:’,sales.amount))
    FROM sales GROUP BY sales.year

    1. 显示文章标题,发帖人、最后回复时间
      表:id,title,postuser,postdate,parentid
      准备sql语句:
      drop table if exists articles;
      create table articles(id int auto_increment primary key,title varchar(50), postuser varchar(10), postdate datetime,parentid int references articles(id));
      insert into articles values
      (null,‘第一条’,‘张三’,‘1998-10-10 12:32:32’,null),
      (null,‘第二条’,‘张三’,‘1998-10-10 12:34:32’,null),
      (null,‘第一条回复1’,‘李四’,‘1998-10-10 12:35:32’,1),
      (null,‘第二条回复1’,‘李四’,‘1998-10-10 12:36:32’,2),
      (null,‘第一条回复2’,‘王五’,‘1998-10-10 12:37:32’,1),
      (null,‘第一条回复3’,‘李四’,‘1998-10-10 12:38:32’,1),
      (null,‘第二条回复2’,‘李四’,‘1998-10-10 12:39:32’,2),
      (null,‘第一条回复4’,‘王五’,‘1998-10-10 12:39:40’,1);

    答案:
    select a.title,a.postuser,
    (select max(postdate) from articles where parentid=a.id) reply
    from articles a where a.parentid is null;

    1. 查出比经理薪水还高的员工信息:
      Drop table if not exists employees;
      create table employees(id int primary key auto_increment,name varchar(50)
      ,salary int,managerid int references employees(id));
      insert into employees values (null,’ lhm’,10000,null), (null,’ zxx’,15000,1
      ),(null,‘flx’,9000,1),(null,‘tg’,10000,2),(null,‘wzg’,10000,3);

    Wzg大于flx,lhm大于zxx

    解题思路:
    根据sql语句的查询特点,是逐行进行运算,不可能两行同时参与运算。
    涉及了员工薪水和经理薪水,所有,一行记录要同时包含两个薪水,所有想到要把这个表自关联组合一下。
    首先要组合出一个包含有各个员工及该员工的经理信息的长记录,譬如,左半部分是员工,右半部分是经理。而迪卡尔积会组合出很多垃圾信息,先去除这些垃圾信息。

    select e.* from employees e,employees m where e.managerid=m.id and e.sala
    ry>m.salary;

    1. 求出小于45岁的各个老师所带的大于12岁的学生人数
      数据库中有3个表 teacher 表,student表,tea_stu关系表。
      teacher 表 teaID name age
      student 表 stuID name age
      teacher_student表 teaID stuID
      要求用一条sql查询出这样的结果
      1)显示的字段要有老师name, age 每个老师所带的学生人数
      SELECT t1.teaID,COUNT(*) FROM teacher_student t1 LEFT JOIN teacher t2 ON t1.teaID=t2.teaID GROUP BY t1.teaID
      2)只列出老师age为40以下,学生age为12以上的记录
      SELECT t1.teaID,t2.name AS teaName,t1.stuID,t3.name AS stuName FROM teacher_student t1 INNER JOIN teacher t2 ON t1.teaID=t2.teaID AND t2.age<40 INNER JOIN student t3 ON t1.stuID=t3.stuID AND t3.age>12

    2. 求出发帖最多的人:
      select authorid,count(*) total from articles group by authorid ORDER BY total DESC LIMIT 1

    3. 一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?
      alter table drop column score;
      alter table add colunm score int;
      可能会很快,但是需要试验,试验不能拿真实的环境来操刀,并且要注意,
      这样的操作时无法回滚的,在我的印象中,只有inert update delete等DML语句才能回滚,
      对于create table,drop table ,alter table等DDL语句是不能回滚。

    解决方案一,update user set score=0;
    解决方案二,假设上面的代码要执行好长时间,超出我们的容忍范围,那我就
    alter table user drop column score;
    alter table user add column score int。

    1. xxx公司的sql面试
      Table EMPLOYEES Structure:
      EMPLOYEE_ID NUMBER Primary Key,
      FIRST_NAME VARCHAR2(25),
      LAST_NAME VARCHAR2(25),
      Salary number(8,2),
      HiredDate DATE,
      Departmentid number(2)
      Table Departments Structure:
      Departmentid number(2) Primary Key,
      DepartmentName VARCHAR2(25).

    1)基于上述EMPLOYEES表写出查询:写出雇用日期在今年的,或者工资在[1000,2000]之间的,或者员工姓名(last_name)以’Obama’打头的所有员工,列出这些员工的全部个人信息。
    select * from employees
    where Year(hiredDate) = Year(date())
    or (salary between 1000 and 200)
    or left(last_name,3)=‘abc’;

    1. 基于上述EMPLOYEES表写出查询:查出部门平均工资大于1800元的部门的所有员工,列出这些员工的全部个人信息。
      mysql> select id,name,salary,deptid did from employee1 where (select avg(salary)
      from employee1 where deptid = did) > 1800;

    2. 基于上述EMPLOYEES表写出查询:查出个人工资高于其所在部门平均工资的员工,列出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。
      select employee1.*,(employee1.salary-t.avgSalary)*100/employee1.salary
      from employee1,
      (select deptid,avg(salary) avgSalary from employee1 group by deptid) as t
      where employee1.deptid = t.deptid and employee1.salary>t.avgSalary;

    二、数据库选择题:

    1. 下面叙述正确的是___C___。
      A、算法的执行效率与数据的存储结构无关
      B、算法的空间复杂度是指算法程序中指令(或语句)的条数
      C、算法的有穷性是指算法必须能在执行有限个步骤之后终止D、以上三种描述都不对

    2. 以下数据结构中不属于线性数据结构的是__C____。
      A、队列 B、线性表 C、二叉树 D、栈

    3. 在一棵二叉树上第5层的结点数最多是__B____。
      A、8 B、16 C、32 D、15

    4. 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是__B__。
      A、可行性分析 B、需求分析 C、详细设计 D、程序编码

    5. 在软件开发中,下面任务不属于设计阶段的是___D___。
      A、数据结构设计 B、给出系统模块结构 C、定义模块算法 D、定义需求并建立系统模型

    6. 数据库系统的核心是___B___。
      A、数据模型 B、数据库管理系统 C、软件工具 D、数据库

    7. 下列叙述中正确的是___C___。
      A、数据库是一个独立的系统,不需要操作系统的支持
      B、数据库设计是指设计数据库管理系统
      C、数据库技术的根本目标是要解决数据共享的问题
      D、数据库系统中,数据的物理结构必须与逻辑结构一致

    8. SQL语句中修改表结构的命令是__C____。
      A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE

    9. 如果要创建一个数据组分组报表,第一个分组表达式是"部门",第二个分组表达式是"性别",第三个分组表达式是"基本工资",当前索引的索引表达式应当是___B___。
      A、部门+性别+基本工资 B、部门+性别+STR(基本工资)
      C、STR(基本工资)+性别+部门 D、性别+部门+STR(基本工资)

    10. 数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是___A___。
      A、DBS包括DB和DBMS B、DBMS包括DB和DBS
      C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS

    11. 要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表__A___。
      A、是同一个数据库中的两个表 B、不同数据库中的两个表
      C、两个自由表 D、一个是数据库表另一个是自由表

    12. 在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过___B___。
      A、候选键 B、主键 C、外键 D、超键

    13. 只有满足联接条件的记录才包含在查询结果中,这种联接为___C___。
      A、左联接 B、右联接 C、内部联接 D、完全联接

    14. 索引字段值不唯一,应该选择的索引类型为___B___。
      A、主索引 B、普通索引 C、候选索引 D、唯一索引

    15. 从数据库中删除表的命令是__A____。
      A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE

    16. DELETE FROM S WHERE 年龄>60语句的功能是__B____。
      A、从S表中彻底删除年龄大于60岁的记录 B、S表中年龄大于60岁的记录被加上删除标记
      C、删除S表 D、删除S表的年龄列

    17. SELECT-SQL语句是__B____。
      A、选择工作区语句 B、数据查询语句 C、选择标准语句 D、数据修改语句

    18. SQL语言是___C___语言。
      A、层次数据库 B、网络数据库 C、关系数据库 D、非数据库

    19. 在SQL中,删除视图用___C___。
      A、DROP SCHEMA命令 B、CREATE TABLE命令 C、DROP VIEW命令 D、DROP INDEX命令

    20. 在命令窗口执行SQL命令时,若命令要占用多行,续行符是__D____。
      A、冒号(? B、分号(? C、逗号(,) D、连字符(-)

    21. 设有图书管理数据库:
      图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
      读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))
      借阅(借书证号C(4),总编号C(6),借书日期D(8))
      对于图书管理数据库,查询0001号借书证的读者姓名和所借图书的书名。
      SQL语句正确的是___A___。
      SELECT 姓名,书名 FROM 借阅,图书,读者 WHERE;
      借阅.借书证号=“0001” AND;



    A、图书.总编号=借阅.总编号 AND;
    读者.借书证号=借阅.借书证号
    B、图书.分类号=借阅.分类号 AND;
    读者.借书证号=借阅.借书证号
    C、读者.总编号=借阅.总编号 AND;
    读者.借书证号=借阅.借书证号
    D、图书.总编号=借阅.总编号 AND;
    读者.书名=借阅.书名

    1. 设有图书管理数据库:
      图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
      读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))
      借阅(借书证号C(4),总编号C(6),借书日期D(8))
      对于图书管理数据库,分别求出各个单位当前借阅图书的读者人次。下面的SQL语句正确的是___A___。
      SELECT 单位,______ FROM 借阅,读者 WHERE;
      借阅.借书证号=读者.借书证号 ______
      A、COUNT(借阅.借书证号) GROUP BY 单位 B、SUM(借阅.借书证号) GROUP BY 单位
      C、COUNT(借阅.借书证号) ORDER BY 单位 D、COUNT(借阅.借书证号) HAVING 单位

    2. 设有图书管理数据库:
      图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
      读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))
      借阅(借书证号C(4),总编号C(6),借书日期D(8))
      对于图书管理数据库,检索借阅了《现代网络技术基础》一书的借书证号。下面SQL语句正确的是___B___。
      SELECT 借书证号 FROM 借阅 WHERE 总编号=;


    A、(SELECT 借书证号 FROM 图书 WHERE 书名=“现代网络技术基础”)
    B、(SELECT 总编号 FROM 图书 WHERE 书名=“现代网络技术基础”)
    C、(SELECT 借书证号 FROM 借阅 WHERE 书名=“现代网络技术基础”)
    D、(SELECT 总编号 FROM 借阅 WHERE 书名=“现代网络技术基础”)

    三、Oracle面试题

    1. 解释冷备份和热备份的不同点以及各自的优点
      解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)

    2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
      解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。

    3. 如何转换init.ora到spfile?
      解答:使用create spfile from pfile 命令.

    4. 解释data block , extent 和 segment的区别(这里建议用英文术语)
      解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象
      拥有的所有extents被称为该对象的segment.

    5. 给出两个检查表结构的方法
      解答:
      1)DESCRIBE命令
      2)DBMS_METADATA.GET_DDL 包

    6. 怎样查看数据库引擎的报错
      解答:alert log.

    7. 比较truncate和delete 命令
      解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.

    8. 使用索引的理由
      解答:快速访问表中的data block

    9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据
      解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放对fact table 某些属性描述的信息

    10. FACT Table上需要建立何种索引?
      解答:位图索引 (bitmap index)

    11. 给出两种相关约束?
      解答:主键和外键

    12. 如何在不影响子表的前提下,重建一个母表
      解答:子表的外键强制实效,重建母表,激活外键

    13. 解释归档和非归档模式之间的不同和它们各自的优缺点
      解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高.

    14. 如何建立一个备份控制文件?
      解答:Alter database backup control file to trace.

    15. 给出数据库正常启动所经历的几种状态 ?
      解答:
        STARTUP NOMOUNT – 数据库实例启动
        STARTUP MOUNT - 数据库装载
        STARTUP OPEN – 数据库打开

    16. 哪个column可以用来区别VGV视图和GV视图?
      解答: INST_ID 指明集群环境中具体的 某个instance 。

    17. 如何生成explain plan?
      解答:运行utlxplan.sql. 建立plan 表
      针对特定SQL语句,使用 explain plan set statement_id = ‘tst1’ into plan_table
      运行utlxplp.sql 或 utlxpls.sql察看explain plan

    18. 如何增加buffer cache的命中率?
      解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set db_cache_size 命令

    19. ORA-01555的应对方法?
      解答:具体的出错信息是snapshot too old within rollback seg , 通常可以通过
      增大rollback seg来解决问题。当然也需要察看一下具体造成错误的SQL文本

    20. 解释ORACLEHOMEORACLE_HOME和ORACLE_BASE的区别?
      解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。

    21. 如何判断数据库的时区?
      解答:SELECT DBTIMEZONE FROM DUAL;

    22. 解释GLOBAL_NAMES设为TRUE的用途
      解答:GLOBAL_NAMES指明联接数据库的方式。如果这个参数设置为TRUE,在建立数据库链接时就必须用相同的名字连结远程数据库

    23。如何加密PL/SQL程序?
    解答:WRAP

    1. 解释FUNCTION,PROCEDURE和PACKAGE区别
      解答:function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值而function将返回一个值在另一
      方面,Package是为了完成一个商业功能的一组function和proceudre的集合

    2. 解释TABLE Function的用途
      解答:TABLE Function是通过PL/SQL逻辑返回一组纪录,用于普通的表/视图。他们也用于pipeline和ETL过程。

    3. 举出3种可以收集three advisory statistics
      解答:Buffer Cache Advice, Segment Level Statistics, Timed Statistics

    4. Audit trace 存放在哪个oracle目录结构中?
      解答:unix $ORACLE_HOME/rdbms/audit Windows the event viewer

    5. 解释materialized views的作用
      解答:Materialized views 用于减少那些汇总,集合和分组的信息的集合数量。它们通常适合于数据仓库和DSS系统。

    6. 当用户进程出错,哪个后台进程负责清理它
      解答: PMON

    7. 哪个后台进程刷新materialized views?
      解答:The Job Queue Processes.

    8. 如何判断哪个session正在连结以及它们等待的资源?
      解答:VSESSION/VSESSION / VSESSION_WAIT

    9. 描述什么是 redo logs
      解答:Redo Logs 是用于存放数据库数据改动状况的物理和逻辑结构。可以用来修复数据库.

    10. 如何进行强制LOG SWITCH?
      解答:ALTER SYSTEM SWITCH LOGFILE;

    11. 举出两个判断DDL改动的方法?
      解答:你可以使用 Logminer 或 Streams

    12. Coalescing做了什么?
      解答:Coalescing针对于字典管理的tablespace进行碎片整理,将临近的小extents合并成单个的大extent.

    13. TEMPORARY tablespace和PERMANENT tablespace 的区别是?
      解答:A temporary tablespace 用于临时对象例如排序结构而 permanent tablespaces用来存储那些’真实’的对象(例如表,回滚段等)

    14. 创建数据库时自动建立的tablespace名称?
      解答:SYSTEM tablespace.

    15. 创建用户时,需要赋予新用户什么权限才能使它联上数据库。
      解答:CONNECT

    16. 如何在tablespace里增加数据文件?
      解答:ALTER TABLESPACE ADD DATAFILE SIZE

    17. 如何变动数据文件的大小?
      解答:ALTER DATABASE DATAFILE RESIZE ;

    18. 哪个VIEW用来检查数据文件的大小?
      解答: DBA_DATA_FILES

    19. 哪个VIEW用来判断tablespace的剩余空间
      解答:DBA_FREE_SPACE

    20. 如何判断谁往表里增加了一条纪录?
      解答:auditing

    21. 如何重构索引?
      解答: ALTER INDEX REBUILD;

    22. 解释什么是Partitioning(分区)以及它的优点。
      解答:Partition将大表和索引分割成更小,易于管理的分区。

    23. 你刚刚编译了一个PL/SQL Package但是有错误报道,如何显示出错信息?
      解答:SHOW ERRORS

    24. 如何搜集表的各种状态数据?
      解答: ANALYZE
      The ANALYZE command.

    25. 如何启动SESSION级别的TRACE
      解答: DBMS_SESSION.SET_SQL_TRACE
      ALTER SESSION SET SQL_TRACE = TRUE;

    26. IMPORT和SQLLOADER 这2个工具的不同点
      解答:这两个ORACLE工具都是用来将数据导入数据库的。
      区别是:IMPORT工具只能处理由另一个ORACLE工具EXPORT生成
      的数据。而SQL
      LOADER可以导入不同的ASCII格式的数据源

    50。用于网络连接的2个文件?
    解答: TNSNAMES.ORA and SQLNET.ORA

    展开全文
  • 常见数据库面试题目

    2016-04-02 22:12:20
    SQL语句执行顺序 1 from子句 组装来自不同数据源的数据 2 where子句 基于指定的条件对记录进行筛选 3 group by子句 将数据划分为多个分组 4 使用聚集函数进行计算 5 having子句筛选分组 6 计算所有表达式 ...

    • SQL语句执行顺序

    1 from子句 组装来自不同数据源的数据

    2 where子句 基于指定的条件对记录进行筛选

    3 group by子句 将数据划分为多个分组

    4 使用聚集函数进行计算

    5 having子句筛选分组

    6 计算所有表达式

    7 select选出符合要求的数据

    8 对结果进行排序并输出

    • having和where的区别

    都用于筛选。

    having短语作用于组,从中选择满足条件的组;where子句作用于基本表或视图,从中选择满足条件的元组。

    • 数据库规范

    第一范式:数据库表的每一列都是不可分割的数据项,同一列不能有多个值

    第二范式:每个非主属性完全函数依赖某个候选键。在第一范式的基础上,消除非主属性对码的部分函数依赖

    第三范式:每个非主属性都不传递依赖于每个候选键。在第二范式的基础上,消除非主属性对码的传递函数依赖

    BC范式:每个属性都不传递依赖于某个候选键。在第三范式的基础上,消除了主属性对码的部分和传递函数依赖

    第四范式:在BC范式的基础上,消除非平凡且非函数依赖的多值依赖

    • 索引和视图的区别

    1 索引:

    使数据库程序无需对整个表进行扫描,就可找到数据。

    当查询数据时,系统先搜索索引,找到数据的指针,再直接通过指针从表中读取数据。

    优点:查询快

    缺点:占用内存;在表中执行insert、update、delete时,有额外操作维护索引

    2 视图:

    虚表,数据仍存放在基本表中,只是根据该视图查询数据。

    优点:简化查询;安全保护机密数据

    缺点:基本表结构变化,致使维护试图

    • 常见SQL语言

    1 创建数据库

    create database <库名>;

    2 删除数据库

    drop database <库名>;

    3 创建表

    create table <表名>
    (
    id char(10) primary key,
    name varchar(10),
    sex char(1),
    score float
    );

    4 修改基本表

    4.1 添加一个字段

    alter table <表名>
    add dept varchar(20);

    4.2 修改一个字段

    alter table <表名>
    modify score smallint;

    4.3 删除一个字段

    alter table <表名>
    drop dept;

    5 删除基本表

    drop table <表名>;

    6 添加一个元组

    insert
    into <表名>
    values ("1014051334","twc","F",95);

    7 删除一个元组

    delete
    from <表名>
    where id="1014051334";

    8 修改字段数值

    update <表名>
    set score=97
    where id="1014051334";

    9 查询表中数据

    select * from student where score=97;


    展开全文
  • oracle数据库面试题目汇总

    千次阅读 2017-06-02 02:26:47
    1. 对字符串操作的函数? 答:ASCII() --函数返回字符表达式最左端字符的ASCII 码值 CHR() --函数用于将ASCII 码转换为字符 --如果没有输入0 ~ 255 之间的ASCII 码值CHR 函数会返回一个NULL 值 ...
    1.	对字符串操作的函数? 
    答:ASCII()         --函数返回字符表达式最左端字符的ASCII 码值
    CHR()   --函数用于将ASCII 码转换为字符
        --如果没有输入0 ~ 255 之间的ASCII 码值CHR 函数会返回一个NULL 值
    --应该是必须给chr()赋数字值 
    concat(str,str)连接两个字符串
    LOWER()   --函数把字符串全部转换为小写
    UPPER()   --函数把字符串全部转换为大写
    LTRIM()   --函数把字符串头部的空格去掉
    RTRIM()   --函数把字符串尾部的空格去掉
    TRIM()    --同时去掉所有两端的空格
    实际上LTRIM(),RTRIM(),TRIM()是将指定的字符从字符串中裁减掉
    其中LTRIM(),RTRIM()的格式为xxxx(被截字符串,要截掉的字符串),但是TRIM()的格式为TRIM(要截掉的一个字符 from  被截的字符串)
    SUBSTR()  --函数返回部分字符串
    INSTR(String,substring) --函数返回字符串中某个指定的子串出现的开始位置,如果不存在则返回0
    REPLACE(原来的字符串,要被替换掉的字符串,要替换成的字符串)
    SOUNDEX()  --函数返回一个四位字符码 
        --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回NULL 值     
    
    2、	事务概念
    答案:事务是这样一种机制,它确保多个SQL语句被当作单个工作单元来处理。事务具有以下的作用: 
       				* 一致性:同时进行的查询和更新彼此不会发生冲突,其他用户不会看到发生了变化但尚未提交的数据。 
        			* 可恢复性:一旦系统故障,数据库会自动地完全恢复未完成的事务。 
    3、oracle中查询系统时间
    答:select sysdate from dual
    4、	触发器的作用,什么时候用触发器,创建触发器的步骤,触发器里是否可以有commit, 为什么?
    答案:触发器是可以由事件来启动运行的,存在于数据库服务器中的一个过程。
    他的作用:可以实现一般的约束无法完成的复杂约束,从而实现更为复杂的完整性要求。
    使用触发器并不存在严格的限定,只要用户想在无人工参与的情况下完成一般的定义约束不可以完成的约束,来保证数据库完整性,那么就可以使用触发器。
    由于触发器主要是用来保证数据库的完整性的,所以要创建一个触发器,首先要明确该触发器应该属于那一种(DML,INSTEAD OF,SYSTEM)因为他们各有个的用途;其次就是要确定触发器被触发以后所设计到的数据。
    出发器中不可以使用COMMIT。
    5.数字函数
    	abs()绝对值	exp(value)e的value次幂	ceil()大于等于该值的最小整数	floor()小于等于该值的最大整数	trunc(value,precision)保留precision个小数截取value	round(value,precision)保留precision个小数对value进行四舍五入 	sign()根据值为正负零返回1,-1,0	mod()取模操作	power(value,exponent)value的exponent次幂	sqrt()求平方根
    1.	初级
    4、	关系数据库系统与文件数据库系统的区别在那里?关系数据库系统一般适用那些方面? 
    答案: 
    关系数据库系统文件系统的区别在于:
    首先,关系性数据库的整体数据是结构化的,采用关系数据模型来描述,这是它与文件系统的根本区别。(数据模型包括:数据结构,数据操作以及完整性约束条件)
    其次,关系数据库系统的共享性高,冗余低可以面向整个系统,而文件系统则具有应用范围的局限性,不易扩展。
    第三,关系数据库系统采用两级映射机制保证了数据的高独立性,从而使得程序的编写和数据都存在很高的独立性。这方面是文件系统无法达到的,它只能针对于某一个具体的应用。(两级映射:保证逻辑独立性的外模式/模式映射和保证物理独立性的内模式/模式映射。外模式:用户模式,是数据库用户的局部数据的逻辑结构特征的描述。模式:数据库全体数据的逻辑结构特征的描述。内模式:也就是数据最终的物理存储结构的描述。)
    第四,就是关系性数据库系统由统一的DBMS进行管理,从而为数据提供了如安全性保护,并发控制,完整性检查和数据库恢复服务。
    
    
    5、	触发器的概念,存储过程的概念. 
    答案: 
    触发器: 是存储在数据库中的过程,当表被修改(增、删、改)时它隐式地被激发。
    存储过程:是数据库语言SQL的集合,同样也存储在数据库中,但是他是由其他应用程序来启动运行或者也可以直接运行。
    6、	基本SQL语句有哪些. 
    答案: 
    select、insert、update、delete、create、drop、truncate
    1.	中级
    8、什么是事务一致性 ? 选择熟悉的数据库实现一个事务处理,如信用卡提款. 
    答案: 
    	事务的一致性:是事务原子性的体现,事务所对应的数据库操作要么成功要么失败没有第三种情况。事务不管是提交成功与否都不能影响数据库数据的一致性状态。
    	事务:用户定义的一个数据库操作序列,这些操作要么全部成功完成要么全部不做,是一个不可分割的整体。定义事务的SQL语句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。
    事务的原子性:就是事务所包含的数据库操作要么都做,要么都不做.
    事务的隔离性:事务对数据的操作不能够受到其他事务的影响。
    事务的持续性:也就是说事务对数据的影响是永久的。
    对'信用卡提款'这一事务而言就是要保证'提取到现金'和'卡帐号余额'的修改要同时成功或失败.
    BEGIN TRANSACTION
    读取A的帐户余额BALANCE;
    BALANCE=BALANCE-AMOUNT转帐金额;
    IF(BALANCE<0) THEN
    ROLLBACK;
    ELSE
    BEGIN
    将A的新余额写回;
    读取B的帐户余额BALANCEB;
    BALANCEB=BALANCEB+AMOUNT转帐金额;
    将B的新余额写回;
    COMMIT;
    END IF;
    END;
    
    9、	实际编写和调试存储过程或触发器. 
    答案: 
    10、	实现索引的方式? 索引的原理? 索引的代价? 索引的类型? 
    答案: 实现索引的方式有两种:针对一张表的某些字段创建具体的索引,如对oracle: create index 索引名称 on 表名(字段名);在创建表时为字段建立主键约束或者唯一约束,系统将自动为其建立索引。
    	索引的原理:根据建立索引的字段建立索引表,存放字段值以及对应记录的物理地址,从而在搜索的时候根据字段值搜索索引表的到物理地址直接访问记录。
    引入索引虽然提高了查询速度,但本身占用一定的系统存储容量和系统处理时间,需要根据实际情况进行具体的分析.
    索引的类型有:B树索引,位图索引,函数索引等。
    11、	view 的概念 ? 何时应用? 
    答案: view 是对表级数据的多角度的透视,适用于对查询安全性、灵活性有一定要求的环境
    12、	sql语句例外处理?举例说明? 
    答案: 当sql 语句在执行过程中出现意外时,如查询时,未查询到结果;更改时无记录等情况的应采取的措施.
    以oracle为例:测试其对exception的理解.如
    select 字段 into 变量 from table ;
    若查询出多条记录,应增加exception 例外处理.
    Oracle处理异常有三种:
    1.	预定义的例外处理,EXCEPTION WHEN exception_name THEN 
    2.	EXCEPTION_INIT产生例外
    首先要declare 声明一个例外名;然后将例外名和错误代码绑定pragma exception_init(错误名,错误代码);最后在EXCEPTION 处when 错误名then 
    		3.用户自定义例外,不用EXCEPTION,当判断条件成熟时用raise_application_error(-20000~~~-20999,提示信息)。
    13、	判断下列论述是否正确。 (1) 一个事务中的某条SQL命令提交时,其它SQL命令可以不提交。 (2) 在一个关系表中,主键可唯一标识一行记录。 (3) 一个关系表中的外键必定是另一表中的主键。 (4) 回滚可以在事务失败时,回到操作事务前的数据状态。 
    答案: (1)错误 (2)正确 (3)正确 (4)正确
    14、	以下哪些手段可保证数据库中数据的完整性和一致性: (1)自定义数据类型 (2)触发器 (3)主键和外键 (4)事务 
    答案: (1)(2)(3)(4) (为什么有1)
    15、	使用存储过程访问数据库比直接用SQL语句访问有哪些优点? 
    答案:存储过程是预编译过的,执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句,便于维护数据的完整性与一致性;可以实现代码的复用。
    1.	高级
    16、	对于精通的数据库系统描述其体系结构,主要包括存储机制、回滚机制、运行机制等. 
    答案:对oracle 系统而言,描述sga的结构; 后台pmon,ckpt、lgwr,smon等进程的功能;表空间的分配策略; 回滚段的结构
    oracle的sga(系统全局区)包括的主要区有:数据库缓存区,重做日志缓存区,共享池(数据字典缓存和库缓存),大池等。数据库缓存区用来存放最近使用过的数据块主要和后台进程中的数据库写进程(DBWR)以及数据文件发生关系;重做日志缓存区用于存放操作数据库数据所产生的重做日志信息,与之合作的有重做日志写进程(LGWR)和重做日志文件;共享池主要缓存SQL/PLSQL,资源锁,控制信息等,其中的库缓存主要缓存被解析执行过的SQL/PLSQL库缓存可分为共享SQL和私有SQL两个区,共享SQL用于存放SQL语句的语法分析结果和执行计划,私有SQL则用来存放与具体SQL语句执行有关的绑定变量,会话参数等。
    ORACLE实例的另外一个重要部分就是其后台进程,主要的后台进程有:数据库写进程(DBWR),重做日志写进程(LGWR),系统监视器(SMON),进程监视器(PMON),检查点进程(CKPT)。DBWR主要是对数据库缓存区中的脏冷数据进行写入数据文件操作;LGWR主要是将对数据库数据操作所产生的重做日志信息写入到重做日志文件中;SMON完成由于非正常关闭数据库的情况下重起数据库时对数据库的恢复;PMON用来恢复失败的用户进程和服务进程,并释放其所占的系统资源;CKPT可以表示数据库在此出处于完整状态。
    逻辑存储结构:数据块BLOCK,区EXTENT,段SEGMENT,表空间TABLESPACE
    物理存储空间:表空间,数据文件,控制文件,日志文件,数据字典
    软件体系结构就是上边对SGA和后台进程的描述。
    17	、对于精通的数据库系统描述其数据一致性的保证机制,包括lock,事务一致性等. 
    答案: 在并发环境下,采用多种机制保持其数据的一致性,如oracle系统提供的事务级的一致性、行级锁、表级锁等等.
    18、对精通的数据库系统描述其联机备份机制、恢复机制,考核其对日志的理解. 
    答案: 描述相关数据库的实时联机备份策略,如数据库系统在运行中通过何种方式保证其数据的实时备份, 出现问题时,应采取何种办法从联机备份进行恢复.
    对对oracle而言,其archive online 备份方式应如何设置、修改什么参数、如何安排备份空间等等.
    19、	精通的数据库系统描述性能优化方法,包括优化的策略、参数、验证方法等. 
    答案: 
    20、Truncate; 与 delete;的区别?(这道题可以衍生出很多的问题比如:想快速的清除一个很大的表中的数据应该用设么操作?答案是:应该用truncate。还有,在对两个相同纪录数的分别表使用了truncate,和delete commit;后对这两个表进行count(*)统计记录数操作,那个表速度会快些?答案是:使用了truncate的会快些。)
    21、写一个‘游标’并使用它。(这道题应该注意的是:在使用游标后一定要记得关闭游标)。
    Declare 
    Cursor cursor_name is
    	Select * from tablename;
    Begin
    	Open cursor_name;
    	Loop
    	Fetch cursor_name into bianliang;
    	Exit when cursor_name%notfound;
    	Sql……..
    	End loop;
    	Close cursor_name;
    End;
    22、在创建表的时候会设置
    pctfree 10
    pctused 40
    而创建表的索引的时候却没有
    pctused 40
    这是为什么?
    (这道题的主要思想是索引不能在pctused 40上得到什么好处)
    23、使用过的最大的表有多少行纪录?(这道题不是看应试者的技术过不过关,而是考察应试者是否有大型数据库的管理操作经验)
    不要对表的索引列进行函数操作,因为这样系统就不能使用索引,使查询变得很慢,但是在ora8i以后就已经开始支持函数的索引,弥补了这个不足。
    
    24、ORACLE数据库启动与关闭的步骤
    启动:启动实例----加载数据库数据-----打开数据库
    关闭:关闭数据库----卸载数据库数据----关闭实例
    25、Delete与truncate的区别
    delete一般用于删除少量记录的操作,而且它是要使用回滚段并且要进行显示的提交事务。而truncate则使用于大量删除数据,而且隐式提交事务,其速度要比使用delete快的多。
    26、DDL和DML分别代表什么??
    DDL表示数据定义语言,在ORACLE中主要包括CREATE,ALTER,DROP
    DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE
    28、Javascript中动态效果时调用的函数。
    29、数据库中有若干条相同的记录,删除到只剩下一条记录。如何做,请用SQL语句通过ROW_ID来写出执行过程。
    Delete table_name where ziduan=’’ and rowed<(select max(rowed) from table_name where ziduan=’’);
    30、oracle数据库表存放到磁盘什么地方(什么物理空间上——大概意思)?
    Oracle数据库表存放在数据文件上。
    31、Oracle使用什么语句给用户分配权限?
    GRANT TO 语句
    32、你在项目现场,用户要求你向正在运行的表中添加一个字段,你该怎么做?
    第一种方法:关闭数据库,然后使用受限模式打开,由sys/sysdba来进行
    第二种方法:不关闭数据库,将数据库置于静默状态在SYS/SYSDBA模式下用ALTER SYSTEM QUISCE RESTRICTED,这种状态下只有SYS/SYSDBA才可以对数据库进行操作,修改完毕之后再退出静默状态ALTER SYSTEM UNQUISCE
    在这里复习到了数据库的两种特殊状态:静默状态(QUISCE)和挂起状态
    静默状态就是只有特殊权限的SYS/SYSDBA才可以对数据库进行操作,使用ALTER SYSTEM QUISCE RESTRICTED以后系统将等候活动着的会话主动结束,同时阻止建立新的会话,系统挂起所有的SQL语句,等恢复以后再重新激活会话执行挂起的SQL。
    挂起状态就是系统将数据库所有对物理文件(数据文件,控制文件,日志文件)的I/O操作都暂停,但是并不禁止非DBA用户对数据库进行操作。这种状态主要用于进行数据库备份。
    
    33、Oracle中回滚的概念?回滚段有什么作用。
    回滚就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。
    回滚段就是为回滚提供依据,记录的是事务操作数据库之前的数据或者对应于以前操作的操作,这个内容要根据以前的操作而定。比如说以前事务操作如果是UPDATE那么回滚段则存储UPDATE以前的数据,如果事务是DELETE操作那么存储的则是与之相对应的INSERT操作语句,相反如果事务操作是INSERT那么记录相应的则是DELETE操作了。
    34、Oracle的8I和9I有什么区别
    35、一张表有10万条记录,如何删除其中的任意20条记录?请用SQL语句进行操作
    36、客户端如何访问服务器端的oracle?如果客户端无法访问服务器端的oralce,可能会是什么原因?
    客户端通过网络或者进程方式以合法的用户身份来取得和服务器端ORACLE的连接。如果客户端无法访问服务器端ORACLE可能出现的原因是:用户无权访问;服务器端数据库并没有打开(启动数据库的第三步没有完成);如果服务器是在共享模式下的则有可能没有对应于该客户所使用的通信协议的调度进程Dnnn。
    37、	oracle中执行语句错误时去哪里查找错误信息?
    Select * from USER_ERRORS
    38、	select语句需要提交吗?insert和update语句呢?
    39、	在执行insert语句并提交后,这些提交的数据存储到什么地方??
    被存储到数据文件中
    40、	oracle中有哪些类型的文件?
    数据文件,控制文件,日志文件和数据字典
    41、	介绍一下oracle的体系结构?
    逻辑体系结构:块,区,段,表空间
    物理体系结构:表空间,三大文件
    软件体系结构:SGA,后台进程
    42、	谈谈对oracle的row_ id是否理解?请简述?
    ORACLE的row_id是一个伪列,其个是为18个字节可将这18个字节用6363来划分,分别表示段编号,数据文件编号,数据块编号和记录编号。
    Row_id表示的是一个记录的物理存储地址。
    43、	oracle中如何删除用户?
    Oracle中使用DROP USER来删除用户,如果使用DROP USER CASCADE那么用户的对象也同时被删除掉。为了达到删除用户的效果而又不影响对用户下的对象的使用可以使用alter user username account lock将用户锁定。
    44、	客户端对服务器端的oralce操作的流程是什么?
    专用模式下:用户通过应用程序进程试图去得到一个与ORACLE数据库服务器的连接客户端通过网络传递连接请求,ORACLE服务器则使用监听进程监听用户请求,并且来验证用户身份,通过验证则为用户分配一专用服务进程用户提交SQL语句专用服务进程则首先在SGA区的共享池中检查是否有与该SQL语句相似的已经被解析执行并且缓存的SQL语句,如果有则采用它的解析结果和执行计划执行SQL语句,如果没有则对SQL语句进行语法解析生成执行计划通过解析则执行操作获取数据将执行结果返回给客户。
    共享模式下:与专用模式不同在于当监听程序验证用户的合法性以后并不为它分配一个专用的服务进程,而是将该请求与响应的调度进程相联系起来,并将起放入到一个请求队列中,最终由响应的Dnnn来从调度队列中获取一个请求并为之分配一个空闲的服务进程,接下来有服务进程对该请求进行服务操作和专用方式下相同,处理完成之后由服务进程先将结果放入一个返回队列最后再由调度进程(Dnnn)将返回队列中的结果返回给对应的用户。
    45、	exits和in在ORALCE数据库中那个执行效率更高?
    Exits执行效率比in高。因为:
    46、	如何判断游标已经到最后一行?
    Cursor_name%notfound
    47、	聚簇索引和普通索引在不同的SQL语句中哪个效率更高??(笔试题,原题回忆不起来,主题就是聚簇索引和普通索引的区别)
    概念类:
    聚合函数?   Session的定义和用法?    Oracle的存储过程 ?  什么是构造函数?  
            
    
    48、简述ORACLE中SGA的组成部分。
    答:系统全局区包括:共享池、重做日志缓存区、数据高速缓存区,大池,JAVA池。
    49、简述ORACLE的启动和关闭各有多少步骤?
    启动:启动实例、装载数据库数据、打开数据库。
    关闭:关闭数据库、卸载数据库数据、关闭实例。
    50、在Oracle表空间的分类和作用,如排序时数据将放在什么表空间?
    作用是为了突破存储容量的限制,是一个逻辑概念。排序数据放在临时表空间。
    51、执行COMMIT命令时,数据库将会发生什么改变,ROLLBACK呢?
    答:commit 提交时首先是与事务对应的重做日志信息将被写入到数据库物理文件中的重做日志文件中,至于是否会真正将事务操作的内容反映到数据文件还好看DBWR是否启动了。在完成数据库的插入,删除和修改操作时,只有当事务提交到数据库才算完成,有提交前只有操作数据库的本人才能看到,别人只有在最后提交完成才可以看到。
    ROLLBACK回滚当前尚未提交的事务,使数据库恢复到事务操作前的状态。
    52、用命令创建用户,并为用户授权。
    Create user user_name 
    identified by password /
    identified externally/
    identified blobally as ‘CN=user’
    default tablespace tablespace_name
    temporary tablespace tablespace_name;
    grant role/privilege to user_name;
    
    53、	写一个存储过程,使employee(name,age,emp_no,salary)表中的salary值在0-1000之间的员工的工资上涨20%,(提示:要求用到游标)
    Cteate or replace procedure emp_sal
    V_name employee.name%type;
    V_emp_no employee.emp_no%type;
    V_salary employee.salary%type;
    Cursor cursor_sal is
    	Select name,emp_no,salary from employee where salary between 0 and 1000;
    Begin
    	Open cursor_sal;
    	Loop
    		Fetch cursor_sal into v_name,v_emp_no,v_salary;
    		Exit when cursor_sal%notfound;
    		Update employee set salary=salary*1.2 where name=v_name and emp_no=v_emp_no;
    	End loop;
    	Close cursor_sal;
    	Commit;
    End;
    54、	ORACLE数据库都有哪些类型的文件?
    数据文件,控制文件,日志文件,参数文件
    55、	用命令创建表空间、用户,并为用户授权、收回权限。
    Create tablespace tabllespacename
    Datafile ‘f:\orcl\user001.dbf  size 20m
    Default storage(
    Initial 512k
    Next 512k
    minextents 2
    pctincrease 50% 
    maxExitnts 2048)
    minimum extent 512k
    logging
    online
    permanent
    extent management dictionary;
    回收权限: revoke privilege from user;
    create tablespace tablespace_name 
    	datafile ‘’
    	default storage(
    		initial xxxkb
    		next yykb
    		minextents 2
    		pctincrease nnnn
    		maxextents mmm)
    	logging
    	online
    	extent management dictionary/local[autoallocate/uniform size xxxmb];
    create user user_name
    	identified by passwore/
    	identified externally/
    	identified globally as ‘CN=user’
    	default tablespace tablespace_name
    	temporary tablespace tablespace_name
    	[account lock /unlock]
    grant connect to user_name;
    grant create table to suer_name;
    grant update on table_name to user_name;
    revoke create table from user_name;
    revoke update on table_name from user_name;
    56、	在Oracle中如何更改用户名?
    57、如何在Oracle中查询某个用户下所有已建的表?
    答:select * from cat;
    57、	执行TRUNCATE命令后,存储空间是否还存在,是否可被其他的表占用?
    执行TRUNCATE之后,为表分配的区空间将被回收HWM将回退,如果在使用TRUNCATE的时候没有指定REUSE STORAGE那么执行操作后仅仅留下由MINEXTENTS所指定的区否则表的所有空间将被回收用于再分配。
    59、何在Oracle中查看当前用户,通常有哪些方式?(提示:show user和select * from user_users)show user;/select username from user_users;
    60、	出在Oracle中,创建表空间的语法结构,以及所含参数说明。
    Create tablespace tablespacename
    Datafile ‘’
    Logging/nologging
    Default storage(initial kb
    			Next kb
    			Minextents x
    			Maxextents y
    			Pctincrease z
    			)
    online/not online
    extent management dictionary/local[autoallocate/uniform size kb];
    61、	如何判断游标是否到了末尾?(提示:用%notfound)
    cursor_name%notfound
    62、	在Oracle中,如何查看当前用户下的所有表空间?
    Select tablespace_name from user_tablespaces;
    63、	在Oracle中,你所创建的表空间信息放在哪里?
    存放在数据字典中,数据字典内容对应于系统表空间SYSTEM表空间。
    64、	ORACLE中的控制文件什么时候读取?
    ORACLE服务器启动时,先启动实例然后再读取数据库的各个文件当然也包括控制文件。也就是说在数据库服务器启动的第二步时读取。
    65、	Oracle的表格信息存储在哪个地方?
    SYSTEM表空间的数据字典文件中。
    66、如何根据字典创建一个表空间,并说明参数?
    66、	ORACLE中当一个用户正在操作一个执行过程,管理员此时取消了他的权限,会发生什么事情?
    
    68、谈谈你对角色的理解,常用的角色有哪些?
    角色就是一组权限的数据库实体,它不属于任何模式或用户但是可以被授予任何用户。常用的角色有CONNECT,DBA,RESOURCE,SELECT_CATALOG_ROLE(查询所有表视图权),DELETE_CATALOG_ROLE(删除权限)等。
    角色的创建和授权:和创建用户为用户授权差不多。Create role role_name identified …
    grant 权限to role_name。
    69、简述Oracle的归档与不归档工作模式,分别说明。
    Oracle归档模式是指在创建数据库时指定了ARCHIVELOG参数,这种模式下,当重做日志文件写满的时候会将该重做日志文件的内容保存到指定的位置(由初始化文件中的参数ARCHIVE_LOG_DEST_n来决定)。并不是数据库在归档模式下工作的时候就可以自动完成归档操作,在归档模式下可以有两种归档方式:自动归档(在初始化文件中的参数ARCHIVE_LOG_START被设置为TRUE)和手动归档。如果归档模式下没有启动自动归档的话,而且又没有实行手动归档那么当LGWR进程将重做日志信息写入已经写满的重做日志文件时数据库将会被挂起直到进行了归档。可见归档是对重做日志文件信息的一种保护措施。
    Oracle非归档模式下当重做日志文件写满以后若是有LGWR进行重做日志信息的写入操作时,以前保存在重做日志文件中的重做日志信息就会被覆盖掉。
    70、Oracle索引分为哪几类,说出唯一索引和位图索引的概念。
    Oracle索引有B树索引,位图索引,函数索引,簇索引等。
    唯一索引也是B树索引的一种,它要求被索引的字段值不可以重复。在创建的时候使用B树算法创建。
    位图索引并不是采用象唯一索引那样存储(索引字段值,记录ROWID)来创建索引段的,而是为每一个唯一的字段值创建一个位图,位图中使用位元来对应一个记录的ROWID。位元到ROWID是通过映射的到的。
    71、ORACLE的基本数据类型有哪些?
    Char()存储定长字符,定义的时候可以不为他指定长度但是如若往里插入值则会出错;varchar2()存储变长字符定义的时候必须指定长度,date存储时间日期;Number()数字类型,包括整型,浮点型等;clob()大容量字符串;blob()大二进制对象
    72、SQL中,执行四舍五入的是哪个函数?
    Round(value,保留的小数位数)与只对应的还有一个特别相似的函数trunc(value,保留的小数位数)它的作用是根据要保留的小数位数来截取原数。
    73、oracle数据库表存放到磁盘什么地方?数据文件
    ORACLE数据库的表存放在物理文件中的数据文件中。
    74、当执行insert语句并提交后,这些提交的数据存储到什么地方??
    存储到了数据库的数据文件中。
    75、Exits和in在ORALCE数据库中那个执行效率更高?
    EXITS执行效率要比使用IN要快。
    76、ORACLE自己提供的函数,想知道具体位置,如何操作?
    77、数据库的几种物理文件?
    1)	数据文件  2)控制文件  3)日志文件   
    78、	控制文件都含有哪些信息?
    控制文件存放有实例信息(实例名称创建时间等),数据文件和日志文件信息,还有系统运行时记录的系统变更码(SCN),检查点信息和归档的当前状态信息等。数据库在加载数据库的时候首先要读取控制文件获得和数据库有关的物理结构信息之后才能够正确加载数据文件和日志文件并打开数据库。
    79、	Decode函数的用法?
        DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。初看一下,DECODE 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使DECODE函数具备大于、小于或等于功能。 
    2.	如何用decode进行大于小于的比较?
    利用sign()函数和DECODE和在一起用
    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;
    
    decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
    该函数的含义如下:
    IF 条件=值1 THEN
        RETURN(翻译值1)
    ELSIF 条件=值2 THEN
        RETURN(翻译值2)
        ......
    ELSIF 条件=值n THEN
        RETURN(翻译值n)
    
    ELSE
        RETURN(缺省值)
    END IF
    ·        使用方法: 
    1、比较大小
    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
    
    例如:
    变量1=10,变量2=20
    则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
    
    
    2、表、视图结构转化
    现有一个商品销售表sale,表结构为:
    month    char(6)      --月份
    sell    number(10,2)   --月销售金额
    
    现有数据为:
    200001  1000
    200002  1100
    200003  1200
    200004  1300
    200005  1400
    200006  1500
    200007  1600
    200101  1100
    200202  1200
    200301  1300
    
    想要转化为以下结构的数据:
    year   char(4)      --年份
    month1  number(10,2)   --1月销售金额
    month2  number(10,2)   --2月销售金额
    month3  number(10,2)   --3月销售金额
    month4  number(10,2)   --4月销售金额
    month5  number(10,2)   --5月销售金额
    month6  number(10,2)   --6月销售金额
    month7  number(10,2)   --7月销售金额
    month8  number(10,2)   --8月销售金额
    month9  number(10,2)   --9月销售金额
    month10  number(10,2)   --10月销售金额
    month11  number(10,2)   --11月销售金额
    month12  number(10,2)   --12月销售金额
    
    结构转化的SQL语句为:
    create or replace view
    v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
    as
        select 
        substrb(month,1,4),
        sum(decode(substrb(month,5,2),'01',sell,0)),
        sum(decode(substrb(month,5,2),'02',sell,0)),
        sum(decode(substrb(month,5,2),'03',sell,0)),
        sum(decode(substrb(month,5,2),'04',sell,0)),
        sum(decode(substrb(month,5,2),'05',sell,0)),
        sum(decode(substrb(month,5,2),'06',sell,0)),
        sum(decode(substrb(month,5,2),'07',sell,0)),
        sum(decode(substrb(month,5,2),'08',sell,0)),
        sum(decode(substrb(month,5,2),'09',sell,0)),
        sum(decode(substrb(month,5,2),'10',sell,0)),
        sum(decode(substrb(month,5,2),'11',sell,0)),
        sum(decode(substrb(month,5,2),'12',sell,0))
        from sale
        group by substrb(month,1,4); 
    
    79、CASE语句的用法?
    Oracle用法很简单:
    SELECT last_name, job_id, salary
          CASE job_id 
               WHEN 'IT_PROG' THEN 1.10*salary
               WHEN 'ST_CLERK' THEN 1.15*salary
               WHEN 'SA_REP' THEN 1.20*salary
         ELSE salary END "REVISED_SALARY"
    FROM employees 
    
    80、	truncate和delete的区别?
        1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
      2、TRUNCATE是一个DDL语言而DELETE是DML语句,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
      3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
      4、TRUNCATE不能触发触发器,DELETE会触发触发器。
      5、不能授予任何人清空他人的表的权限。
      6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
      7、不能清空父表。
    81、	表空间如何扩展?并用语句写出?
    两种扩展方式:
    a)	增加数据文件
    alter tablespace tablespace_name add datafile ‘’ xxMB
    b)	扩展数据文件大小
    alter database datafile ‘’ resize newMB
    82、	表空间区管理方式?哪种方式现在是推荐使用的?
    a)	字典管理方式
    extent management dictionary;默认方式
    b)	本地管理方式
    extent management local[autoallocate/uniform xxmb];
    83、	用什么函数获得日期?和日期中的月,日,年
    to_char(sysdate,’year’):tow thsound six      to_char(sysdate,’yyyy’) :2006
    to_char(sysdate,’month’):8月				to_char(sysdate,’mm’):08
    to_char(sysdate,’day’):星期4       to_char(sysdate,’dd’):22
    84、	分区表的应用?
    
    a)	一个分区表有一个或多个分区,每个分区通过使用范围分区、散列分区、或组合分区分区的行
    b)	分区表中的每一个分区为一个段,可各自位于不同的表空间中
    c)	对于同时能够使用几个进程进行查询或操作的大型表分区非常有用
    
    85、	谈谈索引的用法及原理?
       索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据块的I/O次数,因此可以显著提高性能。
    86、	存储过程的应用,如何既有输入又有输出?
    Create procedure pro_name
    (xxxx in/out type;
    yyyy in/out/inout type;
    ) is/as
    zzzz type;
    begin
    	sqlpro;
    exception
    	exceptionxxxxx;
    commit;
    end;
    87、	常发生的异常有哪些?
    常用预定义例外 
    CURSOR_ALREADY_OPEN   -- ORA-06511 SQLCODE = -6511 游标已经打开 
    DUP_VAL_ON_INDEX        -- ORA-00001 SQLCODE = -1 违反唯一性约束
    INVALID_CURSOR           -- ORA-01001 SQLCODE = -1001 非法游标操作 
    INVALID_NUMBER           -- ORA-01722 SQLCODE = -1722 字符向数字转换失败 
    LOGIN_DENIED              -- ORA-01017 SQLCODE = -1017 
    NO_DATA_FOUND            -- ORA-01403 SQLCODE = +100 没有找到数据 
    NOT_LOGGED_ON            -- ORA-01012 SQLCODE = -1012 没有连接到数据库
    PROGRAM_ERROR            -- ORA-06501 SQLCODE = -6501 内部错误 
    STORAGE_ERROR             -- ORA-06500 SQLCODE = -6500 
    TIMEOUT_ON_RESOURCE      -- ORA-00051 SQLCODE = -51 
    TOO_MANY_ROWS            -- ORA-01422 SQLCODE = -1422 返回多行 
    TRANSACTION_BACKED_OUT  -- ORA-00061 SQLCODE = -61 
    VALUE_ERROR                -- ORA-06502 SQLCODE = -6502 数值转换错误 
    ACCESS_INTO_NULL试图为NULL对象的属性赋值
    ZERO_DIVIDE                 -- ORA-01476 SQLCODE = -1476 被零除 
    OTHERS                       -- 其它任何错误的处理 
    
    88、	如何使用异常?
    在oracle中有三种类型的异常。预定义的异常 非预定义的异常 用户定义的异常 第二种非预定义的异常是与特定的oracle错误关联。并且用PRAGM EXCEPTION_INIT(EXCEPTION_NAME,ERROR_NUMBER)关联一起的。但是到底有什么用啊?  例如:declare  dup_primary_key exception;  pragma exception_init(dup_primary_key,-1);  begin  insert into itemfile values('i201','washer','spares',100,50,250,12,30);  exception  when dup_primary_key then  dbms_output.put_line('重复项编号-主键冲突');  end
    第一种的使用方法:exception
    					when 异常名称 then
    						异常处理代码;
    第三种的用法:if 条件 then
    				raise_application_error(-20000```````-20999,提示信息);
    			  end if;
    89、优化的策略一般包括:
    •	内存优化 
    •	操作系统优化 
    •	数据存储的优化 
    •	网络优化等方法 
    具体到不同的数据库涉及到要调整不同的数据库配置文件、不同的操作系统参数、网络参数等等, 不同的数据库不同.
    
    

    展开全文
  • 数据库面试题目经典大全

    千次阅读 2016-09-20 20:47:00
    1、事务  事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统...(3)生成订单井且保存到数据库中。 (4)更新用户相关信息,如购物数量等 。  在正常的情况下,这些操作都将
  • 数据库面试题目2

    千次阅读 2013-06-11 19:47:21
    1 连接查询 等值连接  连接运算符为 = 时,称为等值连接。使用其他运算符称为非等值连接  Select Student.* , SC.*  From Student , SC  Where Student.Sno = SC.... 其结果中会有sno重复出现 ...
  • 数据库面试题目总结

    2012-02-20 20:48:02
    为管理岗位业务培训信息,建立3个表:  S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 ...  SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩  1....
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • Posted on 2009-06-08 17:38 漠北的天空 阅读(111) 评论(0) 编辑 收藏 1. 列举几种表连接方式 Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全) Or hash join/merge join/nest loop...
  • 数据库面试题目研究

    2010-08-21 02:18:00
    摘录自:... 一:SQL tuning类 1.列举几种表连接方式 Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全) Or hash join/merge join/nest loop(cluster join)/ind...
  • 数据库面试题目(mysql、nosql)

    千次阅读 2018-03-22 15:32:03
    一、索引聚集索引、非聚集索引都是B+树。前者B+树叶子节点包含数据,后者叶子节点包含数据地址聚集索引优点:提升IO密集负载性能;缺点:插入代价高索引缺点:维护索引耗时;占用空间大建索引须知:建在where,group...
  • 数据库面试题目研究

    千次阅读 2007-10-22 09:11:00
    一:SQL tuning 类1. 列举几种表连接方式Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全)Or hash join/merge join/nest loop(cluster join)/index join ?? ORACLE 8i,9i 表连接方法。...
  • A公司,B公司 T公司都伤透了我的心当然我也太水了..A公司:redo buffer 刷新的几种时机:1/3 1M 最多3s commit redo log change一个session的连接过程是怎么样的写出重点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,043
精华内容 817
关键字:

数据库面试题目