现在的位置: 首页 > 综合 > 正文

数据库面试题目2

2013年09月22日 ⁄ 综合 ⁄ 共 3241字 ⁄ 字号 评论关闭

1       连接查询

等值连接

 连接运算符为 = 时,称为等值连接。使用其他运算符称为非等值连接

   Select Student.* , SC.*

   From Student , SC

   Where Student.Sno = SC. Sno

 其结果中会有sno重复出现

   自然连接

     若在等值连接中把重复的属性列去掉则为自然连接

     Select Student.Sno , Sname , Ssex , Sage ,Sdept , Cno , Grade

     From Student , SC

     Where Student.Sno = SC. Sno

 

2    外连接

  在通常的连接操作中,只有满足连接条件的元组才能作为结果输出。在例33中结果表中没有200215123和200215125两个学生的信息,原因在于他们没有选课,在SC中表没有相应的元组,造成Student中这些元组在连接时被舍弃了。

  有时想以Student表为主体列出每个学生的基本情况及其选课情况。若某个学生没有选课,仍把舍弃的Student元组保存在结果关系中,而在SC表的属性上填空NULL,这时就需要使用外连接。

   Select Student.Sno , Sname , Ssex , Sage , Sdept , Cno , Grade

     From Student LEFT OUT JOIN SC ON(Student.Sno = SC.sno)

  左外连接列出左边关系(本例Student)中所有的元组,右外连接列出右边关系中所有的元组。

 

3  

连接类型节点对应于关系代数中的连接操作,PostgreSQL中定义了如下几种连接类型(以T1 JOIN T2 为例):

1)             InnerJoin: 内连接,将T1的所有元组与T2中所有满足连接条件的元组进行连接操作。

2)             LeftOuter Join: 左连接,在内连接的基础上,对于那些找不到可连接T2元组的T1元组,用一个空值元组与之连接。

3)             RightOuter Join: 右连接,在内连接的基础上,对于那些找不到可连接T1元组的T2元组,用一个空值元组与之连接。

4)             FullOuter Join: 全外连接,在内连接的基础上,对于那些找不到可连接T2元组的T1元组,以及那些找不到可连接T1元组的T2元组,都要用一个空值元组与之连接。

5)             SemiJoin: 类似IN操作,当T1的一个元组在T2中能够找到一个满足连接条件的元组时,返回该T1元组,但并不与匹配的T2元组连接。

6)             AntiJoin: 类型NOT IN操作,当T1的一个元组在T2中未找到满足连接条件的元组时,返回该T1元组与空元组的连接。

PostgreSQL实现了三种连接操作,嵌套循环连接(Nest Loop)、归并连接(Merge Join)和Hash连接(Hash Join)。归并连接算法可以实现上述六种连接,而嵌套循环连接和Hash连接只能实现Inner Join、Left Outer Join、Semi Join和Anti Join四种连接。

 

 

 

4  PostgreSQL有三种连接算法,各自应用场景是什么,代价估计的公式是什么?

 

嵌套循环连接(Nested Loops),
合并联接(Merge),
哈希联接(Hash)的适用情况

1.嵌套循环连接(Nested Loops)适用范围
两个表, 一个叫外部表, 一个叫内部表.

如果外部输入非常小,而内部输入非常大并且已预先建立索引,那么嵌套循环联接将特别有效率。

关于连接时哪个表为outer表,哪个为inner表,我发现sql server会自动给你安排,和你写的位置无关,它自动选择数据量小的表为outer表,数据量大的表为inner表。

2.合并联接(Merge)
指两个表在on的过滤条件上都有索引, 都是有序的, 这样, join时, sql server就会使用Merge join, 这样性能更好.

如果一个有索引,一个没索引,则会选择Nested Loops join.
 

3.哈希联接(Hash)
如果两个表在on的过滤条件上都没有索引, 则就会使用Hash join.

也就是说, 使用Hash join算法是由于缺少现成的索引.

哈希连接是大数据集连接时常用的方式,优化器使用两个表中较小的表,利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。

这种方式适用于较小的表完全可以放入内存的情况,这样成本就是访问两个表的成本之和。但是在表很大的情况下并不能完全放入内存,这时优化器将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段。

哈希连接只能应用于等值连接(如WHERE A.COL3 = B.COL4)、非等值连接(WHERE A.COL3 > B.COL4)、外连接(WHERE A.COL3 = B.COL4(+))。

 

连接方式应用场景:

1. 哈希连接只适用于等值连接。

2. 嵌套循环是行源连接方式,只适合小量数据连接。

    哈希连接和排序合并连接是集合连接方式,适合大量数据连接。

3. 在等值连接方式下,返回少量记录(<10000)且内部表在连接列上存在索引,适合嵌套循环连接。若返回大量记录则适合哈希连接。

4. 在等值连接方式下,两个行源集合都很大,若连接列是高基数列,则适合哈希连接,否则适合排序合并连接。

5. 嵌套循环连接可以先返回已经连接的行,而不必等待所有的连接操作处理完才返回数据。而其它两种连接方式则不行。

6.   排序合并连接的两个数据集可以并行处理,而嵌套循环和哈希连接不能.

 

 

5  模式 外模式 内模式

模式:

外模式:也成子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。外模式通常是模式的子集。一个数据库可以有多个外模式。由于它是各个用户的数据视图,如果不同的用户在应用需求、看待数据的方式、对数据保密的要求等方面存在差异,则其外模式描述就是不同的。外模式是保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。

 

模式:也称逻辑模式,是数据库中全体数据库的逻辑结构和特征的描述。它是数据库系统模式结构的中间层,即不涉及数据的物理存储希捷和硬件环境,也与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关。。

一个数据库只有一个模式。数据库模式以某一种数据模型为基础,统一综合地考虑了所有用户的需求,并将这些需求有机地结合成一个逻辑整体。定义模式时不仅要定义数据的逻辑结构,例如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等,而且要定义数据之间的联系,定义与数据有关的安全性、完整性要求。

 

内模式: 也成存储模式。一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表达方式。例如,记录的存储方式是堆存储,还是按照某个/些属性值的升降序存储,还是按照属性值聚簇存储;索引按照什么方式组织,是B+树索引,还是hash索引;数据是否压缩存储,是否加密;数据的存储记录结构有何规定,如定长结构或变成结构,一个记录不能跨物理页存储;等等

 

二级映像功能

1 外模式/模式映像

2 模式/内模式映像

这两个映像提高了数据库系统的逻辑独立性和物理独立性

 

1       外模式/模式映像:当模式改变时(例如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变。应用程序是根据数据的外模式编写的,从而程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。

2       模式/内模式映像:当数据库的存储结构改变了(例如选用了另外一种存储结构),由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性。

【上篇】
【下篇】

抱歉!评论已关闭.