SQL语句简单面试题.docx
- 文档编号:7079526
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:14
- 大小:20.95KB
SQL语句简单面试题.docx
《SQL语句简单面试题.docx》由会员分享,可在线阅读,更多相关《SQL语句简单面试题.docx(14页珍藏版)》请在冰豆网上搜索。
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(casewhenshengfu=负then1else0end)负from#tmp
groupbyrq
2)selectn.rq,n.勝,m.負from(
selectrq,勝=count(*)from#tmpwhereshengfu=胜groupbyrq)ninnerjoin(selectrq,負=count(*)from#tmpwhereshengfu=负groupbyrq)monn.rq=m.rq
3)selecta.rq,a.a1胜,b.b1负from(selectrq,count(rq)a1from#tmpwhere
shengfu=胜groupbyrq)a,
(selectrq,count(rq)b1from#tmpwhereshengfu=负groupbyrq)bwherea.rq=b.rq
2.请教一个面试中遇到的sql语句的查询问题
表中有abc三列,用sql语句实现:
当a列大于b列时选择a列否则选择b列,当b列大于c列时选择b列否则选择c列。
------------------------------------------
createtable#tmp(aint,bint,cint)
insertinto#tmpvalues(10,20,30)
--insertinto#tmpvalues(10,30,20)
--insertinto#tmpvalues(40,10,20)
select*from#tmp
select(casewhena>bthenaelsebend),(casewhenb>cthenbelsecend)from#tmp
3.面试题:
一个日期判断的sql语句?
请取出tb_send表中日期(sendtime字段)为当天的所有记录?
(sendtime字段为datetime型,包含日期与时间)
------------------------------------------
select*from#tmpwheredatediff(dd,rq,getdate())=0
select*from#tmpwhererq=rtrim(convert(varchar,getdate(),23))
4.有一张表,里面有3个字段:
语文,数学,英语。
其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记
录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文数学英语
及格优秀不及格
------------------------------------------
createtable#tmp(语文int,数学int,英语int)
insertinto#tmpvalues(70,80,58)
--insertinto#tmpvalues(100,50,60)
select*from#tmp
select(casewhen语文>=80then优秀
when语文>=60then及格
else不及格end)语文,
(casewhen数学>=80then优秀
when数学>=60then及格
else不及格end)数学,
(casewhen英语>=80then优秀
when英语>=60then及格
else不及格end)英语
from#tmp
5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段id和idvalues,类型都是int型,并解释下两者的区别?
------------------------------------------
用户临时表:
createtable#xx(idint,idvaluesint)
系统临时表:
createtable##xx(idint,idvaluesint)
区别:
用户临时表只对创建这个表的用户的session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.
全局临时表对整个sqlserver实例都可见,但是所有访问它的session都消失的时候,它也自动删除.
6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。
------------------------------------------
它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,sqlserver的存储容量是可以扩大的.
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
------------------------------------------
createtable#a(monvarchar(10),depvarchar(10),yjint)
insertinto#avalues(一月份,01,10)
insertinto#avalues(一月份,02,10)
insertinto#avalues(一月份,03,5)
insertinto#avalues(二月份,02,8)
insertinto#avalues(二月份,04,9)
insertinto#avalues(三月份,03,8)
select*from#a
createtable#b(depvarchar(10),dnamevarchar(20))
insertinto#bvalues(01,国内业务一部)
insertinto#bvalues(02,国内业务二部)
insertinto#bvalues(03,国内业务三部)
insertinto#bvalues(04,国际业务部)
select*from#b
---------------------------------------------------------------
1)selectdep,(selectsum(yj)from#awheremon=一月份and#a.dep=#b.dep)一月份,
(selectsum(yj)from#awheremon=二月份and#a.dep=#b.dep)二月份,(selectsum(yj)from#awheremon=三月份and#a.dep=#b.dep)三月份from#b
2)selectb.dep,dname,
sum(casewhena.mon=一月份thena.yjelse0end)as一月份,篇二:
十几道sql语句面试题
十几道sql语句面试题
第1部分:
题目:
student(s#,sname,sage,ssex)学生表
course(c#,cname,t#)课程表
sc(s#,c#,score)成绩表
teacher(t#,tname)教师表
问题:
1、查询"001"课程比"002"课程成绩高的所有学生的学号;
selecta.s#
from(selects#,scorefromscwherec#='001′)a,
(selects#,scorefromscwherec#='002′)b
wherea.score>b.scoreanda.s#=b.s#;
2、查询平均成绩大于60分的同学的学号和平均成绩;
selects#,avg(score)
fromsc
groupbys#havingavg(score)>60;
3、查询所有同学的学号、姓名、选课数、总成绩;
selectstudent.s#,student.sname,count(sc.c#),sum(score)
fromstudentleftouterjoinsconstudent.s#=sc.s#
groupbystudent.s#,sname
4、查询姓"李"的老师的个数;
selectcount(distinct(tname))
fromteacher
wheretnamelike'李%';
5、查询没学过"叶平"老师课的同学的学号、姓名;
selectstudent.s#,student.sname
fromstudent
wheres#notin(selectdistinct(sc.s#)fromsc,course,teacherwheresc.c#=course.c#andteacher.t#=course.t#andteacher.tname='叶平');
6、查询学过"001"并且也学过编号"002"课程的同学的学号、姓名;
selectstudent.s#,student.sname
fromstudent,sc
wherestudent.s#=sc.s#andsc.c#='001′andexists(select*fromscassc_2wheresc_2.s#=sc.s#andsc_2.c#='002′);
7、查询学过"叶平"老师所教的所有课的同学的学号、姓名;
selects#,sname
fromstudent
wheres#in
(selects#
fromsc,course,teacher
wheresc.c#=course.c#andteacher.t#=course.t#andteacher.tname='叶平'groupbys#havingcount(sc.c#)=(selectcount(c#)fromcourse,teacherwhereteacher.t#=course.t#andtname='叶平'));
8、查询所有课程成绩小于60分的同学的学号、姓名;
selects#,sname
fromstudent
wheres#notin(selectstudent.s#fromstudent,scwheres.s#=sc.s#andscore>60);
9、查询没有学全所有课的同学的学号、姓名;
selectstudent.s#,student.sname
fromstudent,sc
wherestudent.s#=sc.s#
groupbystudent.s#,student.snamehavingcount(c#)<(selectcount(c#)fromcourse);
10、查询至少有一门课与学号为"1001"的同学所学相同的同学的学号和姓名;selects#,sname
fromstudent,sc
wherestudent.s#=sc.s#andc#in(selectc#fromscwheres#=1001);
11、删除学习"叶平"老师课的sc表记录;
delectsc
fromcourse,teacher
wherecourse.c#=sc.c#andcourse.t#=teacher.t#andtname=叶平;
fromscl,scr
wherel.c#=r.c#
and
l.score=(selectmax(il.score)
fromscil,studentim
whereil.c#=l.c#andim.s#=il.s#
groupbyil.c#)
and
r.score=(selectmin(ir.score)
fromscir
whereir.c#=r.c#
groupbyir.c#);
13、查询学生平均成绩及其名次
select1+(selectcount(distinct平均成绩)
from(selects#,avg(score)平均成绩
fromsc
groupbys#)t1
where平均成绩>t2.平均成绩)名次,s#学生学号,平均成绩
from(selects#,avg(score)平均成绩fromscgroupbys#)t2
orderby平均成绩desc;
14、查询各科成绩前三名的记录:
(不考虑成绩并列情况)
selectt1.s#as学生id,t1.c#as课程id,scoreas分数
fromsct1
wherescorein(selecttop3score
fromsc
wheret1.c#=c#
orderbyscoredesc)
orderbyt1.c#;
15、查询每门功成绩最好的前两名
selectt1.s#as学生id,t1.c#as课程id,scoreas分数
fromsct1
wherescorein(selecttop2score
fromsc
wheret1.c#=c#
orderbyscoredesc)
orderbyt1.c#;
补充:
已经知道原表
yearsalary
------
20001000
20012000
20023000
20034000
解:
selectb.year,sum(a.salary)
fromsalarya,salaryb
wherea.year<=b.year
groupbyb.year
orderbyb.year;
在面试过程中多次碰到一道sql查询的题目,查询a(id,name)表中第31至40条记录,id作为主键可能是不是连续增长的列,完整的查询语句如下:
方法一:
selecttop10*
froma
whereid>(selectmax(id)from(selecttop30idfromaorderbyid)t)orderbyid
方法二:
selecttop10*
froma
whereidnotin(selecttop30idfromaorderbyid)
orderbyid
第2部分:
数据库及sql部分:
(共4题:
基础3道,中等难度1道)
106、有3个表(15分钟):
【基础】
student学生表(学号,姓名,性别,年龄,组织部门)
course课程表(编号,课程名称)
sc选课表(学号,课程编号,成绩)
表结构如下:
1)写一个sql语句,查询选修了'计算机原理'的学生学号和姓名(3分钟)
2)写一个sql语句,查询'周星驰'同学选修了的课程名字(3分钟)
3)写一个sql语句,查询选修了5门课程的学生学号和姓名(9分钟)
答:
1)sql语句如下:
selectstu.sno,stu.snamefromstudentstu
where(selectcount(*)fromscwheresno=stu.snoandcno=
(selectcnofromcoursewherecname=计算机原理))!
=0;
2)sql语句如下:
selectcnamefromcourse
wherecnoin(selectcnofromscwheresno=
(selectsnofromstudentwheresname=周星驰));
3)sql语句如下:
selectstu.sno,stu.snamefromstudentstu
where(selectcount(*)fromscwheresno=stu.sno)=5;
107、有三张表,学生表s,课程c,学生课程表sc,学生可以选修多门课程,一门课程可以被多个学生选修,通过sc表关联。
【基础】
1)写出建表语句;
2)写出sql语句,查询选修了所有选修课程的学生;
3)写出sql语句,查询选修了至少5门以上的课程的学生。
答:
1)建表语句如下(mysql数据库):
createtables(idintegerprimarykey,namevarchar(20));
createtablec(idintegerprimarykey,namevarchar(20));
createtablesc(
sidintegerreferencess(id),
cidintegerreferencesc(id),
primarykey(sid,cid)
);
2)sql语句如下:
selectstu.id,stu.namefromsstu
where(selectcount(*)fromscwheresid=stu.id)=(selectcount(*)fromc);
3)sql语句如下:
selectstu.id,stu.namefromsstu
where(selectcount(*)fromscwheresid=stu.id)>=5;108、数据库表(test)结构如下:
【基础】
idnameagemanager(所属主管人id)
106a30104
109b19104
104c20111
107d35109
112e25120
119f45null
要求:
列出所有年龄比所属主管年龄大的人的id和名字?
答:
sql语句如下:
selectemployee.namefromtestemployee
whereemployee.age>(selectmanager.agefromtestmanagerwheremanager.id=employee.manager);
109、有如下两张表:
【中等难度】
表city:
表state:
citynocitynamestateno
bj北京(null)
sh上海(null)
gzgd广州
dlln大连
statenostatename
gd广东
ln辽宁
sd山东
nmg内蒙古
欲得到如下结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语句 简单 试题