数据库概念名词及常用SQL_第1页
数据库概念名词及常用SQL_第2页
数据库概念名词及常用SQL_第3页
数据库概念名词及常用SQL_第4页
数据库概念名词及常用SQL_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库笔试面试11、事务是什么?A:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。一视图视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,有些则不能(仅仅能查询)。视图的作用*简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。*安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。*逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。如:如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。三、数据库索引索引的通俗理解:为表中的数据的一列或者几列建一个目录,目录会告诉数据库你要找的记录在哪里。这样就避免了全表查询。提高数据库表数据访问速度。例如索引:CREATEINDEXIDX_CITY_CITYNAMEONCITY(CITYNAME);对表CITY按CITYNAME建一个目录,当你要查找CITYNAME为深圳的记录时,数据库就去目录中查找‘深圳’,找到深圳后,目录会告诉数据库,CITYNAME为深圳的记录在哪里!从而避免全表查询。可以基于数据库表中的单列或多列创建索引。多列索引可以区分其中一列可能有相同值的行。索引是消耗表空间大小的,当你执行建立索引的sql时,数据库会消耗一定的表空间来建立一个目录(这个目录对我们来说是不可见的),当你使用到索引进行查询时,数据库将在索引(目录)中查找对应记录在磁盘上的物理位置,从而找到对应记录。以新华字典作比喻。按部首查询的目录就类似于数据库中的非聚类索引。该目录需要占据字典十几页版面(就象索引需要占据数据库表空间),当我们要找‘唐’字时,我们到目录中找到‘广’字部首下的‘唐’字,目录就告诉我们去字典的555页找‘唐’的释义。(当数据库要查找某条记录时,使用了索引后,索引会告诉计算机对应的记录在磁盘的具体位置。)如果没有任何索引,则需要去数据表中查找记录时,数据库会从第1条记录开始查找符合条件的记录,直到最后1条。(就象字典中没有目录,则我们需要在字典中,从第1页开始找,直到找到为止)当然,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。创建索引最普通的情况,是为出现在where子句的字段建一个索引。如在查询时常用类似以下的语句:SELECT*FROMmytableWHEREcategory_id=1;最直接的应对之道,是为category_id建立一个简单的索引:CREATEINDEXmytable_categoryidONmytable(category_id);如果有不止一个选择条件呢?例如:SELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2;可以建立多重的索引:CREATEINDEXmytable_categoryid_useridONmytable(category_id,user_id);注意到在命名时的习惯了吗?使用''表名—字段1名—字段2名''的方式。索引的类型A) 聚集索引(clusteredindex),表数据行的存储顺序与索引的存储顺序一致。一个表只能包含一个聚集索引。因为数据表的物理存储顺序只有一种。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。B) 非聚集索引(nonclusteredindex),表数据存储顺序与索引顺序无关。一个数据表可以有多种非聚集索引。聚集索引和非聚集索引的区别?聚集索引中的顺序也就是数据行的实际排列顺序,每次增删改等都可能进行数据行移动,对于聚集索引请不要建在将会频繁修改的列上,因为数据行是按列值大小排序的,因此可能会引起数据行整行移动.所谓聚集也就是按顺序的意思,索引列值大小相近的物理数据行排在一起.如字典里的拼音检索。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部;同样的,如果查“张”字,那您也会将您的字典翻到最后部分。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。非聚集则没有这些特点,它和数据行的物理排列顺序不相干,它只不过是物理数据的另一种"目录"罢了,就象字典除了拼音检索还是有其它好几种检索方式如果您认识某个字,您可以快速地从自动中查到这个字。但您不认识某个字也不知道它的发音,这时候,需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如检字表中看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,但在字典正文中的字分别在99、522、345页,是在非聚集索引中的映射。它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。为什么一个表只能有一个聚集索引,因为数据行的物理排序只能有一种.但是逻辑排序却可以很多,在其它地方搞几个"目录''这就是逻辑排序,所以从这点上看我想连初中生都可以知道聚集索引大部分情况是比非聚集索引快的,因为有先天优势呢。索引的存储一条索引记录中包含的基本信息包括:键值(即索引指定的字段的值)+逻辑指针(指向数据页或者另一索引页)。常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。B-Tree不同于BinaryTree(二叉树,最多有两个子树),一棵M阶的B-Tree满足以下条件:1) 每个结点至多有M个孩子;2) 除根结点和叶结点外,其它每个结点至少有M/2个孩子;3) 根结点至少有两个孩子(除非该树仅包含一个结点);4) 所有叶结点在同一层,叶结点不包含任何关键字信息;5) 有K个关键字的非叶结点恰好包含K+1个孩子;另外,对于一个结点,其内部的关键字是从小到大排序的。以下是B-Tree(M=4)的样例:2、oracle中truncate和delete命令有何区别?(1) delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,truncate执行都很快。(2) truncate是DDL,执行隐含的commit,truncate不能回滚。任何没有提交的DML改变也将会和truncate一起提交。

truncate重置表及其索引高水位标志。全表扫描和索引快速全扫描读高水位标志下的所有数据块,因此在delete后全扫描性能没有提高,但truncate后将会变快。truncate不触发delete触发器。没有对象权限允许一个用户truncate另一个用户的表。这样做需要DROPANYTABLE系统权限。当一个表被truncate,表及其索引的存储将被重置回初始大小。而delete不收缩表及其索引的大小。当父表有一个可用的引用完整性约束时不能被truncate。必须先disable引用父表的外键约束,再truncate。3、Oracle中char和varchar2数据类型有什么区别?有数据"test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?A:char是定长字符类型,varchar2是变长字符类型。“test”在char(10)中被补齐空格,存储长度是10字节,在varchar2(10)中存储长度是4字节。4、参见如下表结构作者:4作者代号作者:4作者代号charj4r作者名称,varcha.E2I性别char^l),1年龄number(3),i文学方向varcharZ.t64)4荻奖名单:』获奖日期date^4获奖人员char(4).:4r出版社代码char(2)>出版社名称varchar2(32)^图书4图书编号char(S)J图书名称varchar2(12E)>出版社代码char(2)J作者代号char(4)J/图书简介E1二编写SQL语句,找出“作者”库中没有出现在“获奖名单”库中所有作者信息的SQL语句(提示:使用notin、notexists以及外关联三种方法,并说明哪种方法最优)。select*from作者where作者代号notin(select获奖人员from获奖名单);select*from作者wherenotexists(select1from获奖名单where作者.作者代号=获奖名单.获奖人员);select*from作者leftjoin获奖名单on作者.作者代号=获奖名单.获奖人员where获奖名单.获奖人员isnull;外关联的性能好于notexists,notexists好于notin。5、 Oracle数据库表存在伪列rowid,请利用rowid编写一个SQL语句,从以下记录中找到唯一记录,并将其flag列更新为YNonamesexflag1张三1N1张三1N1张三1Nupdatetsetflag='Y'whererowid=(selectmin(rowid)fromtt2wheret.no==andt.sex=t2.sex);6、Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理?A:selectnvl(c1,0)fromt1;7、 见第四题“获奖名单”表,写出SQL语句,查询出在上一个月获奖的人员。A:select*from作者join获奖名单on作者.作者代号=获奖名单.获奖人员whereto_char(获奖名单.获奖日期,’yyyy-mm')=to_char(add_months(sysdate,-1),'yyyy-mm');8、见第四题“图书”表,在表上对图书名称、出版社代码、作者代号创建了组合索引,请问在执行如下语句时会不会利用到索引。

Select*from图书Select*fromSelect*from图书Select*from图书Select*from图书Select*from图书where图书名称=’xxxx’where图书名称=’xxxx’where图书名称=’xxxx’where出版社代码=’yyy’and出版社代码=’bb’and作者代号=’ddd’A:根据索引的“最左前缀”原理,前三个查询会利用索引,最后一个不会。9、编写一个简单的Oracle存储过程,输出参数必须有一个是结果集。A:CREATEORREPLACEpackagepkg_getrecordisTYPEmyrctypeISREFCURSOR;endpkg_getrecord;/CREATEORREPLACEPROCEDUREp_ret_rs(r_cursorOUTpkg_getrecord.myrctype)ISBEGINOPENr_cursorFORSELECT*FROMt;EXCEPTIONWHENOTHERSTHENROLLBACK;RAISE;ENDp_ret_rs;/oralce数据库一、选择题1、 在sql的查询语句中,用于分组查询的语句是(c)。orderbyb)wherec)groupby d)having2、在“学生情况.dbf”表中,查询计算机专业、助学金大于40元的学生的姓名,正确的语句是(c)。select姓名from学生情况where计算机.and.助学金<40select姓名from学生情况where专业=“计算机”.or.助学金>40select姓名from学生情况where专业=“计算机”.and.助学金>40select姓名from学生情况where专业=“计算机”.and.助学金<403、 下列sql语句中,修改表结构的是(a)。a)alter b)createc)desc d)rename4、 已知职工表emp有工号e_no和工资e_sal两个字段。从职工关系中检索所有工资值,要求在输出结果中没有重复的工资值,则sql的命令语句能实现上述功能的是(b)。a)selectalle_salfromempb)selectdistincte_salfromempc)selecte_salfromempd)selecte_salwhereemp5、 请选出属于dml的选项(c)a)truncateb)creatc)delete d)drop6、 视图存放在哪里(b)a.数据库的表中 b.数据字典的select语句中c.from列表的第一个表格的select语句中d.列表的第二个表格的select语句中7、 当fetch执行失败时,哪种游标的属性值为true(c)%isopen b.%foundc.%notfound d.%rowcount8、 下列那些说法是正确的(b)一个事务中的某条sql命令提交时,其它sql命令可以不提交。在一个关系表中,主键可唯一标识一行记录。一个关系表中的外键必定是另一表中的主键。回滚可以在事务失败时,回到操作事务前的数据状态。9、假如一个变量的值为null,有一条if语句,if变量=null分支1else分支2请问最终执行的结果是(b)a)分支1b)分支2c)系统错误提示d)都没有执行10、 关于主键(primarykey)和唯一索引(uniqueindex)的说法哪些是错误的?(a)a、 唯一索引的列允许为null值b、 主键的列不允许为null值c、 一个表只能有一个唯一索引11、 教师信息表teacher包含以下字段:last_namevarchar2(25)first_namevarchar2(25)email varchar2(25)下面哪个语句可以显示无email地址的教师的姓名(c)selectlast_name,fist_namefromteacherwhereemail=nullselectlast_name,first_namefromteacherwhereemail<>nullselectlast_name,first_namefromteacherwhereemailisnullselectlast_name,first_namefromteacherwhereemailisnotnull12、 在执行一个查询时哪个是正确的顺序?(c)a、解析、执行 b、执行、解析、获取c、解析、执行、获取 d、解析、获取二、判断对错1、 一个表空间可以含有多个数据文件,一个数据文件也可以跨多个表空间。一个表不可以跨表空间(错误)2、 一个表test有字段id,name,age,address,email,salary删除age大于平均年龄的记录。这样写可以吗?deletefromtestwhereage>avg(age);(错误)3、betweenand运算符是否既可以用于数值表达式,又可以用于字符表达式?(正确)二、简答题:1、 用sql语句写出以下操作a、 建一张数据表emp(职工信息表),包含工号、姓名、性别、部门、年龄、工资等字段。createtableemp(idnumber,namevarchar2(20),sexchar(4),departmentvarchar2(20),agenumber,salarynumber(6,2));b、 往该数据表中添加一条记录。insertintoempvalues(1,’xiaozhang’,’男’,’销售部’,23,1200.0);c、 假设该表中存在3000条员工的相关信息,要求显示所有年龄在20到30岁之间的人员记录select*fromempwhereagebetween20and30;d、 假设有一个销售部,请给出销售部门所有女职员的工资总数selectsum(salary)fromempwheredepartment=’销售部’andsex=’女’;2、 什么是ddl、什么是dml,请分别列举一些。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论