《计算机SQL面试题目汇总.docx》由会员分享,可在线阅读,更多相关《计算机SQL面试题目汇总.docx(7页珍藏版)》请在第一文库网上搜索。
1、SQL面试题目汇总1 ,触发器的作用?答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的C它可以 强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许 未经许可的更新和变化。可以联级运算,如,某表上的触发器上包含对另一个表 的数据操作,而该操作又会导致该表触发器被触发。2 .什么是存储过程?用什么来调用?答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需 创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL, 使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。3 .索引的作用?和它的优点缺点是什么?答:
2、索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数 据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢 了数据录入的速度,同时也增加了数据库的尺寸大小。4 .什么是内存泄漏?答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分 配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建 对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放 该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。5 .维护数据库的完整性和一致性
3、,你喜欢用触发器还是自写业务逻辑?为什 么?答:我是这样做的,尽可能使用约束,如CheCk,主键,外键,非空字段等来约 束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论 什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写 业务逻辑,但这样做麻烦,编程复杂,效率低下。6 .什么是事务?什么是锁?答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一 个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者 是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语 句作为事务考虑,就需要通过AClD测试,即原子
4、性,一致性,隔离性和持久性。锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发 性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用 某些数据或数据结构。当然锁还分级别的。7 .什么叫视图?游标是什么?答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改, 查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影 响基本表。它使得我们获取数据更容易,相比多表查询。游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单 元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。 一般不使用游标,但是
5、需要逐条处理数据的时候,游标显得十分重要。8 .为管理业务培训信息,建立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=f税收基础)(2)使用标准SQL嵌套
6、语句查询选修课程编号为C2,的学员姓名和所属单位?答:select sn, sd from s, sc where s. sft-sc. s# and SC.c#= c2,(3)使用标准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(5)查询选修课程超过5门的学员学号和所属单位?答:select sn, sd from s whe
7、re s# in(select s# from sc group by s# having count(distinct c#)5)目前在职场中很难找到非常合格的数据库开发人员。有人说:“SQL开发是一门 语言,它很容易学,但是很难掌握在面试过程中多次碰到两道SQL查询的题目,一是查询(ID, Name)表中第31至 40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:select top 10 * from A where ID (select max(ID) from (select top 30 ID from A order by A ) T) order by A另外
8、一道题目的要求是查询表A中存在ID重复三次以上的记录,完整的查询语句 如下:select * from(select count(ID) as count from table group by ID)T where T. count3以上两道题目非常有代表意义,望各位把自己碰到的有代表的查询都贴上来。create table testtablei (id int IDENTITY, department varchar(12) )select * from testtablelinsert into testtablel values (, vf,)insert into testtable
9、l VaIUeS (市场) insert into testtablel VaIUeS (售后) * 结果id department1 设计2 市场3 售后*/create table testtable2 id int IDENTITY, dptID int, name varchar(12)insertinsertinto testtable2 ValUeS (1,张三) into testtable2 VaIUeS(1,李四) insert into testtable2 values (2, 3ESl,) insert into testtable2 ValUeS (3,彭六) ins
10、ert into testtable2 ValUeS (4,陈七)* 用一条SQL语句,怎么显示如下结果iddptIDdepartmentname11设计张三21设计李四32市场王五43售后彭六54黑人陈七*/答案是:SELECT testtable2. * , ISNULL(department,黑人)FROM testtablel right join testtable2 on testtable2. dptID = testtablel. ID在面试应聘的SQL SerVer数据库开发人员时,我运用了一套标准的基准技 术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它
11、们 按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十 分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。你能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及 存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能 回答这个基本的问题,那么这不是一个好兆头。NULL是什么意思?NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会 在这个问题上跌跟头您也不要觉得意外。NULL这个值表示UNKNoWN(未知):它不表示“ ”(空字符串)。假设
12、您的SQL SerVer数据库里有ANSLNULLS,当然在默认情况下会有,对NULL这个值的任何 比较都会生产一个NULL值。您不能把任何值与一个UNKNOWN值进行比较,并在 逻辑上希望获得一个答案。您必须使用IS NULL操作符。什么是索引?SQL Server 2000里有什么类型的索引?任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验 不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数 据。在SQLSerVer里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索 引的叶级保存数据。这意味着不
13、论聚集索引里有表格的哪个(或哪些)字段,这些 字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚 集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁 盘上数据的指针。它允许每个表格有多个非聚集索引。什么是主键?什么是外键?主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总 是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及 一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相 连的字段。那么这些相连的字段就是外键。什么是触发器?SQL Server 2000有什么不同类型的触发器?让未来的数据库开发
14、人员知道可用的触发器类型以及如何实现它们是非常 有益的。触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或 者视图上。在SQL Server 2000里,有INSTEAD-0F和AFTER两种触发器。INSTEAD-OF 触发器是替代数据操控语言(Data Manipulation Language, DML)语 句对表格执行语句的存储过程。例如,如果我有一个用于TableA的 INSTEADT)F-UPDATE触发器,同时对这个表格执行一个更新语句,那么 Instead-OF-Update触发器里的代码会执行,而不是我执行的更新语句则不会执 行操作。AFTER触
15、发器要在DML语句在数据库里使用之后才执行。这些类型的触发器 对于监视发生在数据库表格里的数据变化十分好用。您如何确一个带有名为Fldl字段的TableB表格里只具有FldI字段里的那些值, 而这些值同时在名为TableA的表格的Fldl字段里?这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到 的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格 里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的 值。这个字段就是候选键(通常是另外一个表格的主键)。另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制 相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因, 微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据 库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生 的时候索引也必须要维护。你可以用什么来确保表格里的字段只接受特定范围里的值?这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望 听到的回答是CheCk限制,它在数据库表格里被定义,用来限制输入