IT笔试题全集数据库篇追雨制作版.docx
《IT笔试题全集数据库篇追雨制作版.docx》由会员分享,可在线阅读,更多相关《IT笔试题全集数据库篇追雨制作版.docx(94页珍藏版)》请在冰豆网上搜索。
IT笔试题全集数据库篇追雨制作版
IT笔试题全集_数据库篇_追雨制作_2011版
追雨QQ:
262300093
数据库面试要点基本概念
1.数据库与数据库管理系统的关系:
数据库系统包含数据管理系统。
2.数据经过加工就变成了信息。
3.数据库对象就是数据库表。
4.常见的数据库有哪些?
微软的SQLServer、甲骨文公司的Oracle、IBM的DB2。
5.DBMS的概念和几个阶段。
DBMS是指数据库管理系统;分为:
萌芽阶段——文件系统、初级阶段——第一代数据库、中级阶段——第二代数据库、高级阶段——新一代数据库。
6.数据库发展经典数据模型:
网状模型和关系模型。
SQLServer是关系模型。
7.数据库的超键、候选键、主键、外键的概念:
1)能唯一标识元组的属性集称为超键;2)候选键是超键的特例,不含有多余属性;3)用户正在使用的候选键称为主键;4)主表的外键=从表的候选键(主键)。
8.三类完整性规则:
1)实体完整性规则:
主键不为空;2)引用完整性规则:
引用不为空;3)用户定义的完整性规则:
不超过用户定义范围。
SQL数据库笔试题
问题描述:
为管理岗位业务培训信息,建立3个表:
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号、学员姓名、所属单位、学员年龄
C(C#,CN)C#,CN分别代表课程编号、课程名称
SC(S#,C#,G)S#,C#,G分别代表学号、所选修的课程编号、学习成绩
要求实现如下5个处理:
1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
5.查询选修了课程的学员人数
6.查询选修课程超过5门的学员学号和所属单位
1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
SELECTSN,SDFROMSWHERE[S#]IN(
SELECT[S#]FROMC,SCWHEREC.[C#]=SC.[C#]ANDCN=N
#8217;税收基础
#8217;)
2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
SELECTS.SN,S.SDFROMS,SCWHERES.[S#]=SC.[S#]ANDSC.[C#]=
#8217;C2
#8242;
3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
SELECTSN,SDFROMSWHERE[S#]NOTIN(
SELECT[S#]FROMSCWHERE[C#]=
#8217;C5
#8242;)
4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
SELECTSN,SDFROMSWHERE[S#]IN(
SELECT[S#]FROMSCRIGHTJOINCONSC.[C#]=C.[C#]
GROUPBY[S#]HAVINGCOUNT(*)=COUNT(DISTINCT[S#]))
5.查询选修了课程的学员人数
SELECT学员人数=COUNT(DISTINCT[S#])FROMSC
6.查询选修课程超过5门的学员学号和所属单位
SELECTSN,SDFROMSWHERE[S#]IN(
SELECT[S#]FROMSC
GROUPBY[S#]HAVINGCOUNT(DISTINCT[C#])>5)
题目2
问题描述:
已知关系模式:
S(SNO,SNAME)学生关系。
SNO为学号,SNAME为姓名
C(CNO,CNAME,CTEACHER)课程关系。
CNO为课程号,CNAME为课程名,CTEACHER为任课教师
SC(SNO,CNO,SCGRADE)选课关系。
SCGRADE为成绩
要求实现如下5个处理:
1.找出没有选修过“李明”老师讲授课程的所有学生姓名
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩1.找出没有选修过“李明”老师讲授课程的所有学生姓名
SELECTSNAMEFROMSWHERENOTEXISTS(
SELECT*FROMSC,CWHERESC.CNO=C.CNOANDC.CTEACHER=
#8217;李明
#8217;ANDSC.SNO=S.SNO)
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
SELECTS.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)FROMS,SC,(
SELECTSNOFROMSCWHERESCGRADE<60
GROUPBYSNOHAVINGCOUNT(DISTINCTCNO)>=2
)AWHERES.SNO=A.SNOANDSC.SNO=A.SNOGROUPBYS.SNO,S.SNAME
3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
SELECTS.SNO,S.SNAMEFROMS,(
SELECTSC.SNOFROMSC,CWHERESC.CNO=C.CNOANDC.CNAMEIN(
#8217;1
#8242;,
#8217;2
#8242;)
GROUPBYSNOHAVINGCOUNT(DISTINCTCNO)=2)SCWHERES.SNO=SC.SNO
4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
SELECTS.SNO,S.SNAMEFROMS,SCSC1,SCSC2WHERESC1.CNO=
#8217;1
#8242;ANDSC2.SNO=
#8217;2
#8242;ANDSC1.CNO=S.CNOANDSC1.SCGRADE>SC2.SCGRADE
5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
SELECTSC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADEFROMSCSC1,SCSC2WHERESC1.CNO=
#8217;1
#8242;ANDSC2.CNO=
#8217;2
#8242;ANDSC1.SNO=SC2.SNOANDSC1.SCGRADE>SC2.SCGRADE
题目3
问题描述:
本题用到下面三个关系表:
CARD借书卡。
CNO卡号,NAME姓名,CLASS班级
BOOKS图书。
BNO书号,BNAME书名,AUTHOR作者,PRICE单价,QUANTITY库存册数
BORROW借书记录。
CNO借书卡号,BNO书号,RDATE还书日期
备注:
限定每人每种书只能借一本;库存册数随借书、还书而改变。
要求实现如下15个处理:
1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。
2.找出借书超过5本的读者,输出借书卡号及所借图书册数。
3.查询借阅了
水浒
一书的读者,输出姓名及班级。
4.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
5.查询书名包括
网络
关键词的图书,输出书号、书名、作者。
6.查询现有图书中价格最高的图书,输出书名及作者。
7.查询当前借了
计算方法
但没有借
计算方法习题集
的读者,输出其借书卡号,并按卡号降序排序输出。
8.将
C01
#8243;班同学所借图书的还期都延长一周。
9.从BOOKS表中删除当前无人借阅的图书记录。
10.如果经常按书名查询图书信息,请建立合适的索引。
11.在BORROW表上建立一个触发器,完成如下功能:
如果读者借阅的书名是
数据库技术及应用
,就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。
12.建立一个视图,显示
力01
#8243;班学生的借书信息(只要求显示姓名和书名)。
13.查询当前同时借有
计算方法
和
组合数学
两本书的读者,输出其借书卡号,并按卡号升序排序输出。
14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。
15.对CARD表做如下修改:
a.将NAME最大列宽增加到10个字符(假定原为6个字符)。
b.为该表增加1列NAME(系名),可变长,最大20个字符。
1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束
CREATETABLEBORROW(
CNOintFOREIGNKEYREFERENCESCARD(CNO),
BNOintFOREIGNKEYREFERENCESBOOKS(BNO),
RDATEdatetime,
PRIMARYKEY(CNO,BNO))
2.找出借书超过5本的读者,输出借书卡号及所借图书册数
SELECTCNO,借图书册数=COUNT(*)FROMBORROW
GROUPBYCNOHAVINGCOUNT(*)>5
3.查询借阅了
水浒
一书的读者,输出姓名及班级
SELECT*FROMCARDcWHEREEXISTS(
SELECT*FROMBORROWa,BOOKSbWHEREa.BNO=b.BNOANDb.BNAME=N
#8217;水浒
#8217;ANDa.CNO=c.CNO)
4.查询过期未还图书,输出借阅者(卡号)、书号及还书日期
SELECT*FROMBORROWWHERERDATE5.查询书名包括"网络"关键词的图书,输出书号、书名、作者
SELECTBNO,BNAME,AUTHORFROMBOOKSWHEREBNAMELIKEN'%网络%'
6.查询现有图书中价格最高的图书,输出书名及作者
SELECTBNO,BNAME,AUTHORFROMBOOKSWHEREPRICE=(SELECTMAX(PRICE)FROMBOOKS)
7.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出
SELECTa.CNOFROMBORROWa,BOOKSb
WHEREa.BNO=b.BNOANDb.BNAME=N'计算方法'ANDNOTEXISTS(
SELECT*FROMBORROWaa,BOOKSbbWHEREaa.BNO=bb.BNOANDbb.BNAME=N'计算方法习题集'ANDaa.CNO=a.CNO)
ORDERBYa.CNODESC
8.将"C01"班同学所借图书的还期都延长一周
UPDATEbSETRDATE=DATEADD(Day,7,b.RDATE)FROMCARDa,BORROWbWHEREa.CNO=b.CNOANDa.CLASS=N'C01'
9.从BOOKS表中删除当前无人借阅的图书记录
DELETEAFROMBOOKSaWHERENOTEXISTS(
SELECT*FROMBORROWWHEREBNO=a.BNO)
10.如果经常按书名查询图书信息,请建立合适的索引
CREATECLUSTEREDINDEXIDX_BOOKS_BNAMEONBOOKS(BNAME)
11.在BORROW表上建立一个触发器,完成如下功能:
如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)
CREATETRIGGERTR_SAVEONBORROWFORINSERT,UPDATEAS
IF@@ROWCOUNT>0
INSERTBORROW_SAVESELECTi.*
FROMINSERTEDi,BOOKSb
WHEREi.BNO=b.BNOANDb.BNAME=N
#8217;数据库技术及应用
#8217;
12.建立一个视图,显示
力01
#8243;班学生的借书信息(只要求显示姓名和书名)
CREATEVIEWV_VIEWAS
SELECTa.NAME,b.BNAME
FROMBORROWab,CARDa,BOOKSb
WHEREab.CNO=a.CNOANDab.BNO=b.BNOANDa.CLASS=N
#8217;力01
#8242;
13.查询当前同时借有
计算方法
和
组合数学
两本书的读者,输出其借书卡号,并按卡号升序排序输出
SELECTa.CNOFROMBORROWa,BOOKSbWHEREa.BNO=b.BNOANDb.BNAMEIN(N
#8217;计算方法
#8217;,N
#8217;组合数学
#8217;)
GROUPBYa.CNOHAVINGCOUNT(*)=2ORDERBYa.CNODESC
14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句
ALTERTABLEBOOKSADDPRIMARYKEY(BNO)
15.1将NAME最大列宽增加到10个字符(假定原为6个字符)
ALTERTABLECARDALTERCOLUMNNAMEvarchar(10)
15.2为该表增加1列NAME(系名),可变长,最大20个字符
ALTERTABLECARDADD系名varchar(20)
其他sql:
#1
有学生和学生扩展两张表,在学生这张表中有学生密码这个字段,我想设置密码,是将学生扩展这张表的生日字段作为他的密码(例20060102)这两张表通过学号关联,我想实现两个查询,一是使所有学生初始化,二是是选中的学生初始化。
1)updatestudentssets.password=(selectt.brithdayfromstudent_exttwheres.id=t.id)
2)updatestudentssets.password=(selectt.brithdayfromstudent_exttwheres.id=t.id)wheres.id=?
#2
idsnamesmoneysprovince
1zhangsan2098A
2lisi3000B
3wangwu6789C
4liumazi4587C
5dongjiu3298B
6shiga4567Aid:
合同idsname:
姓名smoney:
业绩sprovince:
地区
第一道:
显示出业绩大于同一地区平均值的合同id姓名地区业绩
第二道:
把同一地区的平均业绩地区插入到新表中(新表只包含两个字段即:
平均业绩地区)
selectT1.*fromtestT1,(selectavg(smoney)s,sprovincefromtestgroupbysprovince)T2whereT1.smoney>T2.sandT1.sprovince=T2.sprovince;
createtabletable_name_2from(selectsprovince,avg(smoney)avgmoneyfromtable_name_1groupbysprovince);
#3
表内容
user(xvarchar(50),yvarchar(50))
火箭胜
火箭胜
火箭负
火箭负
湖人胜
湖人负
结果:
胜负
火箭22
湖人11
这样的sql语句怎么写?
selectxuser,sum(caseywhen
#8216;胜
#8217;then1else0end)胜,sum(caseywhen
#8216;负
#8217;then1else0end)负fromusergroupbyx
#4
表结构city
idnamemoney
1北京200
2上海100
3北京399
4广州300
5北京300
6上海100
7广州200
8上海500
求money的值小于money的平均值城市id
selecta.idfromtestawherea.money<(selectavg(money)fromtest)
#5
数据库中有这样的字段:
ids
1a
1b
2c
2d但是现在想通过sql语句查询出来,显示成为下面这样:
1ab
2cd有什么方法吗?
selectid,GROUP_CONCAT(sSEPARATOR'')fromtablenamegroupbyid;
#6
表stuinfo
idsubjectscore
1语文78
1数学60
1英语90
2语文50
2数学44
2英语55
3语文45
3数学44
3英语90现在要求如下查出每个编号的总成绩并且要大于200分
idscore→(总成绩要大于200分)
1228请写出sql语句?
selectid,sscorefrom(selectid,sum(score)sfromstuinfogroupbyid)twheret.s>200
selectid,sum(score)fromstuinfogroupbyidhavingsum(score)>=220;
#7
a表(人)b表(水果)
aidnamebidname
1a1苹果
2b2梨
3c3橙
4d4香蕉c表
cidaidbid
111
213
314
423
524
632
741
842
943
1044
问题:
根据bid求出aid(如:
bid=3andbid=4那么可以得到aid=1,aid=2,aid=4),就是说根据条件给出的水果类别.来求出买了这些水果的人.(求出买了橙子和香蕉的人的名字:
)
selectdistinct(aid)fromCwhereaidin(selectaidfromCwherebid=3)andaidin(selectaidfromCwherebid=4)
#8
数据库表A有个字段a是int类型
a中有数据有1到9任意(有重复的)
想取得a中,当a=1时a=2时a=3……各一条记录的列表
selecttop1*fromAwherea=1
union
selecttop1*fromAwherea=2
#8230;
union
selecttop1*fromAwherea=9
#9
一个表User,有字段id,name,message,现在要查出这个表中发消息(message)最多的人的名字,怎么表达啊?
selectnfrom(selectnamencount(id)cfromusergroupbyidorderbycdesclimit1)asa;#10
field1field2
A1
A2
A3用一条sql语句查询成:
field1all
A1,2,3,
selectfield1,group_concat(field2)asallfromtablegroupbyfield1
Sql面试题
1.有如下表GameResult:
2005-05-09胜
2005-05-09胜
2005-05-09负
2005-05-09负
2005-05-10胜
2005-05-10负
2005-05-10负
如果要生成下列结果,如何写sql语句?
日期胜负
2005-05-0922
2005-05-1012
Select日期,
sum(Casescore
When
#8216;胜
#8217;then1
Else0
End)as胜,
sum(casescore
When‘负’then1
Else0
end)as负
FromGameResult
Groupby日期
2.请取出tb_send表中日期(SendTime字段)为当天的所有记录。
(SendTime字段为datetime型,包含日期与时间)
select*fromtb_sendwheredatediff(day,SendTime,geate())=0;
3.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据
table1
月份mon部门dep业绩yj
一月份0110
一月份0210
一月份035
二月份028
二月份049
三月份038
table2
部门dep部门名称dname
01国内业务一部
02国内业务二部
03国内业务三部
04国际业务部
table3
部门一月份二月份三月份
0110nullnull
02108null
035null8
04null9null
SelectB.depId,
sum(
caseA.mon
when
#8216;一月
#8217;thenA.yeji
end)as
#8216;一月
#8217;,
sum(
caseA.mon
when
#8216;二月
#8217;thenA.yeji
end)as