谁有sql 笔试题,要多的?不要选择填空。
4个回答
展开全部
javaeye里面转的,十几个问题覆盖多个方面,含答案
目前在职场中很难找到非常合格的数据库开发人员。我的一个同事曾经说过:“SQL开发是一门语言,它很容易学,但是很难掌握。”
在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当您问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。
您能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?
您希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。
什么是索引?SQL Server 2000里有什么类型的索引?
任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。
NULL是什么意思?
NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。
NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。
什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。
什么是触发器?SQL Server 2000有什么不同类型的触发器?
让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。
AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。
您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?
这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。
另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?
您正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
您可以用什么来确保表格里的字段只接受特定范围里的值?
这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。
返回参数和OUTPUT参数之间的区别是什么?
如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
什么是相关子查询?如何使用这些查询?
经验更加丰富的开发人员将能够准确地描述这种类型的查询。
相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。
关于面试过程的思考
这些问题只不过是确定一个SQL Server数据库开发人员是否合格的起点。根据应聘者对上面这些问题的回答情况,我可能会要求他们参加我的TSQL编程考试,这一般是一套根据不同情况进行的10到12个数据库查询。
您需要自己决定将要雇用的开发人员具有什么样的专业技能。然后,需要通过自己的经验、判断以及在面试时对应聘者的感受(来做最终决定)。
您在面试数据库开发人员时一般会问哪些问题呢?让我们一起来讨论一下吧。
Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员,他有超过7年的行业经验。他还通过了微软SQL Server 2000和SQL Server 2005的认证。
目前在职场中很难找到非常合格的数据库开发人员。我的一个同事曾经说过:“SQL开发是一门语言,它很容易学,但是很难掌握。”
在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当您问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。
您能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?
您希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。
什么是索引?SQL Server 2000里有什么类型的索引?
任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。
NULL是什么意思?
NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。
NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。
什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。
什么是触发器?SQL Server 2000有什么不同类型的触发器?
让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。
AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。
您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?
这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。
另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?
您正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
您可以用什么来确保表格里的字段只接受特定范围里的值?
这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。
返回参数和OUTPUT参数之间的区别是什么?
如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
什么是相关子查询?如何使用这些查询?
经验更加丰富的开发人员将能够准确地描述这种类型的查询。
相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。
关于面试过程的思考
这些问题只不过是确定一个SQL Server数据库开发人员是否合格的起点。根据应聘者对上面这些问题的回答情况,我可能会要求他们参加我的TSQL编程考试,这一般是一套根据不同情况进行的10到12个数据库查询。
您需要自己决定将要雇用的开发人员具有什么样的专业技能。然后,需要通过自己的经验、判断以及在面试时对应聘者的感受(来做最终决定)。
您在面试数据库开发人员时一般会问哪些问题呢?让我们一起来讨论一下吧。
Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员,他有超过7年的行业经验。他还通过了微软SQL Server 2000和SQL Server 2005的认证。
展开全部
1、对于教学数据库的三个基本表(如下),试用SQL的查询语句表达下列查询:
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,C#,GRADE)
课程C(C#,CNAME,TEACHER)
(1)检索LIU老师所授课的课程号和课程名。
Select c#,cname
From c
Where teacher=’LIU’
(2)检索年龄大于23岁的男学生的学号和姓名。
Select s#,sname
From s
Where AGE>23 and sex=’男’
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。
方法一:
Select sname
From s,sc,c
Where s.sex=’女’and s.s#=sc.s# and sc.c#=c.c# and c.teacher=’liu’
方法二:
Select sname
From s
Where s# in (select s#
From sc
Where c# in (select c#
From c
Where teacher=’liu’))
and sex=’女’
(4)检索WANG同学未学的课程的课程号。
方法一:
Select c#
From C
Where c# not in (select c#
From sc,s
Where s.name=’wang’and s.s#=sc.s#)
方法二:
Select c#
From c
Where not exists(select *
From s,sc
Where s.s#=sc.s# and sc.c#=c.c# and sname=’wang’)
(5)检索至少选修两门课程的学生学号。
方法一:
Select distinct a.s#
From sc a,sc b
Where a.s#=B.s# and a.c#<>b.c#
方法二:
Select s#
From sc
Group by s#
Having count(*)>=2
(6)检索全部学生都选修的课程的课程号与课程名。
Select c#.cname
From c
Where not exists
(select *
From s
Where not exists
(select *
From sc
Where s.s#=sc.s# and sc.c#=c.c#))
(7)检索选修课程包含LIU老师所授课的学生学号。
Select distinct s#
From sc s1
Where not exists
(select *
From c where teacher=’liu’ and
Not exists(select * from sc s2
Where s1.s#=s2.s#
And c.c#=s2.c#))
(8)统计有学生选修的课程门数。
Select count(distinct c#)
From sc
(9)求选修C4课程的学生的平均年龄。
Select AVG(age)
From s,sc
Where s.s#=sc.s# and c#=’c4’
(10)求LIU老师所授课程的每门课程的学生平均成绩。
Select c#,avg(grade)
From sc
Where c# in (select c#
From C
Where teacher=’liu’)
Group by c#
(11)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,
Select c#,count(s#)
From sc
Group by c#
Having count(s#)>10
2、更新语句
Insert、update、delete
试用SQL更新语句对教学数据库中三个基本表S、SC、C进行更新操作。(参看作业3)
(1)在基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
Insert into s(s#,sname,age)
Values(‘S9’,’WU’,18)
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个新的基本表STUDENT(S#,SNAME,SEX)。
Create table student
(s# char(10),
Sname char(20),
Sex char(2))
Insert into stuent
Select S#,sname,sex
From s
Where not exists(select *
From sc
Where s.s#=sc.s# and grade<80)
或
Select S#,sname,sex into student
From s
Where not exists(select *
From sc
Where s.s#=sc.s# and grade<80)
(3)在基本表SC中删除尚无成绩的选课元组。
Delete from sc
Where grade is null
(4)把WANG同学的学习选课和成绩全部删除去。
方法一:
Delete from sc
Where ‘wang’=(select sname
From s
Where s.s#=sc.s#)
方法二:
Delete from sc
Where s# in (select s#
From s
Where sname=’wang’)
(5)把选修MATHS课不及格的成绩全改为空值。
方法一:
Update sc set grade=null
Where 60>(select grade
From sc,c
Where c.cname=’maths’ and sc.c#=c.c#)
方法二:update sc set grade=null
Where grade<60 and c#=(select c#
From c
Where cname=’maths’)
(6)把低于总平均成绩的女同学成绩提高5%。
Update sc set grade=grade*1.05
Where s# in (select s#
From s
Where sc.s#=s.s# and sex=
‘女’)
And grade>(select avg(grade) from sc)
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。(略)
若课程号为:C4
Update sc set grade=grade*1.05
Where c#=’C4’and grade<=75
Update sc set grade=grade*1.04
Where c#=’C4’and grade>75
若课程名为:C4
Update sc set grade=grade*1.05
Where C# in (select C#
From C
Where cname=’C4’)and grade <=75
Update sc set grade=grade*1.05
Where C# in (select C#
From C
Where cname=’C4’)and grade >75
注:查询每位学生的学号、姓名及总成绩。
select sc.sno,sname,sum(grade)
from student,sc
where student.sno=sc.sno
group by sc.sno,sname
若语句中含有group by子句,select 子句中的字段,除集聚函数外,都需在group by后出现才行。多表时,有重复字段名时,一定要标明所有的字段是哪个表的。
3、创建表create
实例二:设有如图所示的关系S,SC和C,试用关系代数表达式表示下列查询语句:
S SC
c
1、 创建实例二中的基本表,指出主键、外键。
Create table S(
S# int primary key,
Sname char(8),
AGE tinyint,
Sex char(2))
Create table SC(
S# int foreign key references s(S#),
C# char(3) foreign key references c(C#),
Grade int,
Primary key (S#,C#))
Create table C(
C# char(3) primary key,
cname char(10),
teacher char(8))
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,C#,GRADE)
课程C(C#,CNAME,TEACHER)
(1)检索LIU老师所授课的课程号和课程名。
Select c#,cname
From c
Where teacher=’LIU’
(2)检索年龄大于23岁的男学生的学号和姓名。
Select s#,sname
From s
Where AGE>23 and sex=’男’
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。
方法一:
Select sname
From s,sc,c
Where s.sex=’女’and s.s#=sc.s# and sc.c#=c.c# and c.teacher=’liu’
方法二:
Select sname
From s
Where s# in (select s#
From sc
Where c# in (select c#
From c
Where teacher=’liu’))
and sex=’女’
(4)检索WANG同学未学的课程的课程号。
方法一:
Select c#
From C
Where c# not in (select c#
From sc,s
Where s.name=’wang’and s.s#=sc.s#)
方法二:
Select c#
From c
Where not exists(select *
From s,sc
Where s.s#=sc.s# and sc.c#=c.c# and sname=’wang’)
(5)检索至少选修两门课程的学生学号。
方法一:
Select distinct a.s#
From sc a,sc b
Where a.s#=B.s# and a.c#<>b.c#
方法二:
Select s#
From sc
Group by s#
Having count(*)>=2
(6)检索全部学生都选修的课程的课程号与课程名。
Select c#.cname
From c
Where not exists
(select *
From s
Where not exists
(select *
From sc
Where s.s#=sc.s# and sc.c#=c.c#))
(7)检索选修课程包含LIU老师所授课的学生学号。
Select distinct s#
From sc s1
Where not exists
(select *
From c where teacher=’liu’ and
Not exists(select * from sc s2
Where s1.s#=s2.s#
And c.c#=s2.c#))
(8)统计有学生选修的课程门数。
Select count(distinct c#)
From sc
(9)求选修C4课程的学生的平均年龄。
Select AVG(age)
From s,sc
Where s.s#=sc.s# and c#=’c4’
(10)求LIU老师所授课程的每门课程的学生平均成绩。
Select c#,avg(grade)
From sc
Where c# in (select c#
From C
Where teacher=’liu’)
Group by c#
(11)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,
Select c#,count(s#)
From sc
Group by c#
Having count(s#)>10
2、更新语句
Insert、update、delete
试用SQL更新语句对教学数据库中三个基本表S、SC、C进行更新操作。(参看作业3)
(1)在基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
Insert into s(s#,sname,age)
Values(‘S9’,’WU’,18)
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个新的基本表STUDENT(S#,SNAME,SEX)。
Create table student
(s# char(10),
Sname char(20),
Sex char(2))
Insert into stuent
Select S#,sname,sex
From s
Where not exists(select *
From sc
Where s.s#=sc.s# and grade<80)
或
Select S#,sname,sex into student
From s
Where not exists(select *
From sc
Where s.s#=sc.s# and grade<80)
(3)在基本表SC中删除尚无成绩的选课元组。
Delete from sc
Where grade is null
(4)把WANG同学的学习选课和成绩全部删除去。
方法一:
Delete from sc
Where ‘wang’=(select sname
From s
Where s.s#=sc.s#)
方法二:
Delete from sc
Where s# in (select s#
From s
Where sname=’wang’)
(5)把选修MATHS课不及格的成绩全改为空值。
方法一:
Update sc set grade=null
Where 60>(select grade
From sc,c
Where c.cname=’maths’ and sc.c#=c.c#)
方法二:update sc set grade=null
Where grade<60 and c#=(select c#
From c
Where cname=’maths’)
(6)把低于总平均成绩的女同学成绩提高5%。
Update sc set grade=grade*1.05
Where s# in (select s#
From s
Where sc.s#=s.s# and sex=
‘女’)
And grade>(select avg(grade) from sc)
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。(略)
若课程号为:C4
Update sc set grade=grade*1.05
Where c#=’C4’and grade<=75
Update sc set grade=grade*1.04
Where c#=’C4’and grade>75
若课程名为:C4
Update sc set grade=grade*1.05
Where C# in (select C#
From C
Where cname=’C4’)and grade <=75
Update sc set grade=grade*1.05
Where C# in (select C#
From C
Where cname=’C4’)and grade >75
注:查询每位学生的学号、姓名及总成绩。
select sc.sno,sname,sum(grade)
from student,sc
where student.sno=sc.sno
group by sc.sno,sname
若语句中含有group by子句,select 子句中的字段,除集聚函数外,都需在group by后出现才行。多表时,有重复字段名时,一定要标明所有的字段是哪个表的。
3、创建表create
实例二:设有如图所示的关系S,SC和C,试用关系代数表达式表示下列查询语句:
S SC
c
1、 创建实例二中的基本表,指出主键、外键。
Create table S(
S# int primary key,
Sname char(8),
AGE tinyint,
Sex char(2))
Create table SC(
S# int foreign key references s(S#),
C# char(3) foreign key references c(C#),
Grade int,
Primary key (S#,C#))
Create table C(
C# char(3) primary key,
cname char(10),
teacher char(8))
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://blog.163.com/xuxiaoni2007@126/blog/static/2512677320096111036798/
这个里面什么 题都有了。有选择天空判断,还有大题
这个里面什么 题都有了。有选择天空判断,还有大题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
留上电子邮件~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询