SQL经典面试题及答案.docx
- 文档编号:16661301
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:11
- 大小:17.97KB
SQL经典面试题及答案.docx
《SQL经典面试题及答案.docx》由会员分享,可在线阅读,更多相关《SQL经典面试题及答案.docx(11页珍藏版)》请在冰点文库上搜索。
SQL经典面试题及答案
SQL经典面试题及答案
1.一道SQL语句面试题,关于groupby表内容:
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
------------------------------------------
createtable#tmp(rqvarchar(10),shengfunchar
(1))
insertinto#tmpvalues('2005-05-09','胜')insertinto#tmpvalues('2005-05-09','胜')insertinto#tmpvalues('2005-05-09','负')
insertinto#tmpvalues('2005-05-09','负')
insertinto#tmpvalues('2005-05-10','胜')
'负')insertinto#tmpvalues('2005-05-10',insertinto#tmpvalues('2005-05-10','负')
1)selectrq,sum(casewhenshengfu='胜'then1else0end)'胜',sum
'then1else0end)'负'from#tmpgroup(casewhenshengfu='负
by
rq
2)selectN.rq,N.勝,M.負from(
selectrq,勝=count(*)from#tmpwhereshengfu='胜'groupbyrq)N
innerjoin
(selectrq,負=count(*)from#tmpwhereshengfu='负'groupbyrq)Mon
N.rq=M.rq
3)selecta.col001,a.a1胜,b.b1负from
(selectcol001,count(col001)a1fromtemp1wherecol002='胜'
group
bycol001)a,
(selectcol001,count(col001)b1fromtemp1wherecol002='负'group
bycol001)b
wherea.col001=b.col001
2.请教一个面试中遇到的SQL语句的查询问题
表中有ABC三列,用SQL语句实现:
当A列大于B列时选择A列否则选择B列,当
B列大于C列时选择B列否则选择C列。
------------------------------------------
select(casewhena>bthenaelsebend),
(casewhenb>cthenbeslecend)fromtable_name
3.面试题:
一个日期判断的sql语句,
请取出tb_send表中日期(SendTime字段)为当天的所有记录?
(SendTime字段为
datetime型,包含日期与时间)
------------------------------------------
elect*fromtbwheredatediff(dd,SendTime,getdate())=0s
4.有一张表,里面有3个字段:
语文,数学,英语。
其中有3条记录分别表示
语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以
下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文数学英语
及格优秀不及格------------------------------------------
select
(casewhen语文>=80then'优秀'
when语文>=60then'及格'
else'不及格')as语文,
(casewhen数学>=80then'优秀'
when数学>=60then'及格'
else'不及格')as数学,
(casewhen英语>=80then'优秀'
when英语>=60then'及格'
else'不及格')as英语,
fromtable
5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含
两个字段ID和IDValues,类型都是int型,并解释下两者的区别?
------------------------------------------用户临时表:
createtable#xx(IDint,IDValuesint)
系统临时表:
createtable##xx(IDint,IDValuesint)
区别:
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.
全局临时表对整个SQLServer实例都可见,但是所有访问它的Session都消失
它也自动删除.的时候,
6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请
问它是通过什么方式实现这种无限容量机制的。
------------------------------------------
它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL
Server的存储容量是可以扩大的.
SQLServer2000数据库有三种类型的文件:
主要数据文件
主要数据文件是数据库的起点,指向数据库中文件的其它部分。
每个数据库
都有一个主要数据文件。
主要数据文件的推荐文件扩展名是.mdf。
次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件。
有些数据库可能没有
次要数据文件,而有些数据库则有多个次要数据文件。
次要数据文件的推荐
文件扩展名是.ndf。
日志文件
日志文件包含恢复数据库所需的所有日志信息。
每个数据库必须至少有一个
日志文件,但可以不止一个。
日志文件的推荐文件扩展名是.ldf。
7.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准
确,只是作为一个格式向大家请教。
如使用存储过程也可以。
table1
月份mon部门dep业绩yj
-------------------------------
一月份0110一月份0210一月份035二月份028二月份049三月份038
table2
部门dep部门名称dname--------------------------------
01国内业务一部
02国内业务二部
03国内业务三部
04国际业务部
table3(result)
部门dep一月份二月份三月份
--------------------------------------
0110nullnull
02108null
03null58
04nullnull9
------------------------------------------1)
selecta.部门名称dname,b.业绩yjas'一月份',c.业绩yjas'二
月份',d.
业绩yjas'三月份'
fromtable1a,table2b,table2c,table2dwherea.部门dep=b.部门depandb.月份mon='一月份'anda.部门dep=c.部门depandc.月份mon='二月份'and
a.部门dep=d.部门depandd.月份mon='三月份'and
2)
selecta.dep,
sum(casewhenb.mon=1thenb.yjelse0end)as'一月份',
sum(casewhenb.mon=2thenb.yjelse0end)as'二月份',
sum(casewhenb.mon=3thenb.yjelse0end)as'三月份',
sum(casewhenb.mon=4thenb.yjelse0end)as'四月份',
sum(casewhenb.mon=5thenb.yjelse0end)as'五月份',
sum(casewhenb.mon=6thenb.yjelse0end)as'六月份',
sum(casewhenb.mon=7thenb.yjelse0end)as'七月份',
sum(casewhenb.mon=8thenb.yjelse0end)as'八月份',
sum(casewhenb.mon=9thenb.yjelse0end)as'九月份',
sum(casewhenb.mon=10thenb.yjelse0end)as'十月份',
sum(casewhenb.mon=11thenb.yjelse0end)as'十一月份',
sum(casewhenb.mon=12thenb.yjelse0end)as'十二月份',
fromtable2aleftjointable1bona.dep=b.dep
8.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有
多少条
记录数。
------------------------------------------selectid,Count(*)fromtbgroupbyidhavingcount(*)>1select*from(selectcount(ID)ascountfromtablegroupbyID)T
whereT.count>1
9、说明:
日程安排提前五分钟提醒
SQL:
select*from日程安排wheredatediff('minute',f开始时
间,getdate())>5
10、说明:
一条sql语句搞定数据库分页
selecttop10b.*from(selecttop20主键字段,排序字段from表名
orderby排序字段desc)a,表名bwhereb.主键字段=a.主键字段
orderbya.排序字段
11、说明:
两张关联表,删除主表中已经在副表中没有的信息
deletefromtable1wherenotexists(select*fromtable2where
table1.field1=table2.field1)
12、说明:
四表联查问题:
select*fromaleftinnerjoinbona.a=b.brightinnerjoincon
a.a=c.cinnerjoindona.a=d.dwhere.....
SQLServer日期计算
a.一个月的第一天
SELECTDATEADD(mm,DATEDIFF(mm,0,getdate()),0)
b.本周的星期一
SELECTDATEADD(wk,DATEDIFF(wk,0,getdate()),0)
c.一年的第一天
SELECTDATEADD(yy,DATEDIFF(yy,0,getdate()),0)
d.季度的第一天
SELECTDATEADD(qq,DATEDIFF(qq,0,getdate()),0)
e.上个月的最后一天
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
f.去年的最后一天
SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
g.本月的最后一天
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
h.本月的第一个星期一
selectDATEADD(wk,DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())
),0)
i.本年的最后一天
SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,
0))。
获取表结构[把'sysobjects'替换成'tablename'即可]
SELECTCASEIsNull(I.name,'')
When''Then''
Else'*'
EndasIsPK,
Object_Name(A.id)ast_name,
A.nameasc_name,
IsNull(SubString(M.text,1,254),'')aspbc_init,
T.nameasF_DataType,
CASEIsNull(TYPEPROPERTY(T.name,'Scale'),'')
WHEN''ThenCast(A.precasvarchar)
ELSECast(A.precasvarchar)+','+Cast(A.scaleasvarchar)
ENDasF_Scale,
A.isnullableasF_isNullAble
FROMSyscolumnsasA
JOINSystypesasT
ON(A.xType=T.xUserTypeANDA.Id=Object_id('sysobjects'))
LEFTJOIN(SysIndexesasI
JOINSyscolumnsasA1
ON(I.id=A1.idandA1.id=object_id('sysobjects')and(I.status
&0x800)=0x800ANDA1.colid<=I.keycnt))
ON(A.id=I.idANDA.name=index_col('sysobjects',I.indid,
A1.colid))
LEFTJOINSysCommentsasM
ON(M.id=A.cdefaultandObjectProperty(A.cdefault,
'IsConstraint')=1)
ORDERBYA.ColidASC
13。
为管理业务培训信息,建立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#,snfromswhereS#in(selectS#fromc,sc
wherec.c#=sc.c#andcn=’税收基础’)
(2)使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和
所属单
位?
答:
selectsn,sdfroms,scwheres.s#=sc.s#andsc.c#=’c2’
(3)使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和
所属单
位?
答:
selectsn,sdfromswheres#notin(selects#fromscwhere
c#=
’c5’)
(4)查询选修了课程的学员人数
答:
select学员人数=count(distincts#)fromsc
(5)查询选修课程超过5门的学员学号和所属单位?
答:
selectsn,sdfromswheres#in(selects#fromscgroupby
s#
havingcount(distinctc#)>5)
是查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连
续增长的
列,完整的查询语句如下:
selecttop10*fromAwhereID>(selectmax(ID)from(select
top
30IDfromAorderbyA
T)orderbyA)
要求是查询表A中存在ID重复三次以上的记录,完整的查询语句如下:
select*from(selectcount(ID)ascountfromtablegroupbyID)T
whereT.count>3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 经典 试题 答案