SQL面试题目汇总
SQL面试题目汇总 html
1.触发器的做用?
答:触发器是一中特殊的存储过程,主要是经过事件来触发而被执行的。它能够强化约束,来维护数据的
完整性和一致性,能够跟踪数据库内的操做从而不容许未经许可的更新和变化。能够联级运算。如,某表
上的触发器上包含对另外一个表的数据操做,而该操做又会致使该表触发器被触发。
2。什么是存储过程?用什么来调用?
答:存储过程是一个预编译的SQL语句,优势是容许模块化的设计,就是说只需建立一次,之后在该程序
中就能够调用屡次。若是某次操做须要执行屡次SQL,使用存储过程比单纯SQL语句执行要快。能够用
一个命令对象来调用存储过程。
3。索引的做用?和它的优势缺点是什么?
答:索引就一种特殊的查询表,数据库的搜索引擎能够利用它加速对数据的检索。它很相似与现实生活中
书的目录,不须要查询整本书内容就能够找到想要的数据。索引能够是惟一的,建立索引容许指定单个列
或者是多个列。缺点是它减慢了数据录入的速度,同时也增长了数据库的尺寸大小。
3。什么是内存泄漏?
答:通常咱们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用
完后要显示释放内存。当应用程序用关键字new等建立对象时,就从堆中为它分配一块内存,使用完后程
序调用free 或者delete释放该内存,不然就说该内存就不能被使用,咱们就说该内存被泄漏了。
4。维护数据库的完整性和一致性,你喜欢用触发器仍是自写业务逻辑?为何?
答:我是这样作的,尽量使用约束,如check,主键,外键,非空字段等来约束,这样作效率最高,也最
方便。其次是使用触发器,这种方法能够保证,不管什么业务系统访问数据库均可以保证数据的完整新和
一致性。最后考虑的是自写业务逻辑,但这样作麻烦,编程复杂,效率低下。
5。什么是事务?什么是锁?
答:事务就是被绑定在一块儿做为一个逻辑工做单元的SQL语句分组,若是任何一个语句操做失败那么整
个操做就被失败,之后操做就会回滚到操做前状态,或者是上有个节点。为了确保要么执行,要么不执行,
就可使用事务。要将有组语句做为事务考虑,就须要经过ACID测试,即原子性,一致性,隔离性和持
久性。
锁:在因此的DBMS中,锁是实现事务的关键,锁能够保证事务的完整性和并发性。与现实生活中锁一
样,它可使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。固然锁还分级别的。
6。什么叫视图?游标是什么?
答:视图是一种虚拟的表,具备和物理表相同的功能。能够对视图进行增,改,查,操做,试图一般是有
一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得咱们获取数据更容易,相比多表
查询。
游标:是对查询出来的结果集做为一个单元来有效的处理。游标能够定在该单元中的特定行,从结果集
的当前行检索一行或多行。能够对结果集当前行作修改。通常不使用游标,可是须要逐条处理数据的时候,
游标显得十分重要。
7。为管理业务培训信息,创建3个表:
S(S#,SN,SD,SA)S#,SN,SD,SA分别表明学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别表明课程编号,课程名称
SC(S#,C#,G)S#,C#,G分别表明学号,所选的课程编号,学习成绩
(1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?
答案:selects#,sn from swhereS#in(select S#from c,scwherec.c#=sc.c#andcn=’税收基础’)
(2) 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?
答:selectsn,sdfrom s,scwheres.s#=sc.s#andsc.c#=’c2’
(3) 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?
答:selectsn,sdfrom swheres#notin(select s#from scwherec#=’c5’)
(4)查询选修了课程的学员人数
答:select 学员人数=count(distincts#)from sc
(5) 查询选修课程超过5门的学员学号和所属单位?
答:selectsn,sdfrom swheres#in(select s#from scgroupbys#havingcount(distinctc#)>5)
目前在职场中很难找到很是合格的数据库开发人员。有人说:“SQL开发是一门语言,它很容易学,可是很
难掌握。”
华为http://sqlserver.365dev.net/sql-1981.html
在面试过程当中屡次碰到两道SQL查询的题目,一是查询A(ID,Name)表中第31至40条记录,ID 做为主键
多是不是连续增加的列,完整的查询语句以下:
selecttop 10*from AwhereID >(selectmax(ID)from (selecttop 30ID from AorderbyA)T)orderbyA
另一道题目的要求是查询表A中存在ID 重复三次以上的记录,完整的查询语句以下:
select*from(select count(ID)ascountfrom table groupbyID)T whereT.count>3
以上两道题目很是有表明意义,望各位把本身碰到的有表明的查询都贴上来。
createtable testtable1
(
id int IDENTITY,
departmentvarchar(12)
)
select*from testtable1
insert into testtable1 values('设计')
insert into testtable1 values('市场')
insert into testtable1 values('售后')
/*
结果
id department
1 设计
2 市场
3 售后
*/
createtable testtable2
(
id int IDENTITY,
dptIDint,
namevarchar(12)
)
insert into testtable2 values(1,'张三')
insert into testtable2 values(1,'李四')
insert into testtable2 values(2,'王五')
insert into testtable2 values(3,'彭六')
insert into testtable2 values(4,'陈七')
/*
用一条SQL语句,怎么显示以下结果
id dptIDdepartmentname
1 1 设计 张三
2 1 设计 李四
3 2 市场 王五
4 3 售后 彭六
5 4 黑人 陈七
*/
答案是:
SELECTtesttable2.* , ISNULL(department,'黑人')
FROMtesttable1 rightjoin testtable2 ontesttable2.dptID =testtable1.ID
在面试应聘的SQLServer数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉
得可以真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的
问题时,后面的问题都十分有难度,由于答案可能会更难解释和说明,尤为是在面试的情形下。
你能向我简要叙述一下SQLServer2000中使用的一些数据库对象吗?
你但愿听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;若是他们还可以提到像
触发器这样的对象就更好了。若是应聘者不能回答这个基本的问题,那么这不是一个好兆头。
NULL NULL是什么意思?
NULL(空)这个值是数据库世界里一个很是难缠的东西,因此有很多应聘者会在这个问题上跌跟头您也不要
以为意外。
NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQLServer数据库里有
ANSI_NULLS,固然在默认状况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任
何值与一个UNKNOWN值进行比较,并在逻辑上但愿得到一个答案。您必须使用IS NULL操做符。
什么是索引?SQLServer2000里有什么类型的索引?
任何有经验的数据库开发人员都应该可以很轻易地回答这个问题。一些经验不太多的开发人员可以回答这
个问题,可是有些地方会说不清楚。
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQLServer里,它们
有两种形式:汇集索引和非汇集索引。汇集索引在索引的叶级保存数据。这意味着不论汇集索引里有表格的
哪一个(或哪些)字段,这些字段都会按顺序被保存在表格。因为存在这种排序,因此每一个表格只会有一个聚
集索引。非汇集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它容许
每一个表格有多个非汇集索引。
什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值老是惟一的。外键是一个用来创建
两个表格之间关系的约束。这种关系通常都涉及一个表格里的主键字段与另一个表格(尽管多是同一个
表格)里的一系列相连的字段。那么这些相连的字段就是外键。
什么是触发器?SQLServer2000有什么不一样类型的触发器?
让将来的数据库开发人员知道可用的触发器类型以及如何实现它们是很是有益的。
触发器是一种专用类型的存储过程,它被捆绑到SQLServer2000的表格或者视图上。在SQLServer2000
里,有INSTEAD-OF 和AFTER两种触发器。INSTEAD-OF 触发器是替代数据操控语言(DataManipulation
Language,DML)语句对表格执行语句的存储过程。例如,若是我有一个用于TableA的
INSTEAD-OF-UPDATE 触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE 触发器
里的代码会执行,而不是我执行的更新语句则不会执行操做。
AFTER触发器要在DML语句在数据库里使用以后才执行。这些类型的触发器对于监视发生在数据库表格
里的数据变化十分好用。
您如何确一个带有名为Fld1字段的TableB表格里只具备Fld1字段里的那些值,而这些值同时在名为
TableA的表格的Fld1字段里?
这个与关系相关的问题有两个可能的答案。第一个答案(并且是您但愿听到的答案)是使用外键限制。外键
限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不一样的(或者相同的)表格里的另
一个字段里定义了的值。这个字段就是候选键(一般是另一个表格的主键)。
另一种答案是触发器。触发器能够被用来保证以另一种方式实现与限制相同的做用,可是它很是难设
置与维护,并且性能通常都很糟糕。因为这个缘由,微软建议开发人员使用外键限制而不是触发器来维护
引用的完整性。
对一个投入使用的在线事务处理表格有过多索引须要有什么样的性能考虑?
你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删
除数据所须要的时间就越多,由于在数据操控发生的时候索引也必需要维护。
你能够用什么来确保表格里的字段只接受特定范围里的值?
这个问题能够用多种方式来回答,可是只有一个答案是“好”答案。您但愿听到的回答是Check限制,它在
数据库表格里被定义,用来限制输入该列的值。
触发器也能够被用来限制数据库表格里的字段可以接受的值,可是这种办法要求触发器在表格里被定义,
这可能会在某些状况下影响到性能。所以,微软建议使用Check限制而不是其余的方式来限制域的完整性。
若是应聘者可以正确地回答这个问题,那么他的机会就很是大了,由于这代表他们具备使用存储过程的经
验。
返回参数老是由存储过程返回,它用来表示存储过程是成功仍是失败。返回参数老是INT数据类型。
OUTPUT参数明确要求由开发人员来指定,它能够返回其余类型的数据,例如字符型和数值型的值。(可
以用做输出参数的数据类型是有一些限制的。)您能够在一个存储过程里使用多个OUTPUT参数,而您只
可以使用一个返回参数。
什么是相关子查询?如何使用这些查询?
经验更加丰富的开发人员将可以准确地描述这种类型的查询。
相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形
成一个相似于循环的情况。
欢迎关注本站公众号,获取更多信息