SQL查询面试问题和答案
SQL语言是一种数据库查询和编程语言,用于访问数据和查询、更新和管理关系数据库系统。它也是数据库脚本文件的扩展。以下是我收集的SQL查询面试问答。欢迎阅读。
SQL查询面试及回答1 1。一个SQL语句面试,关于group by表的内容:
赢得2005年5月9日
赢得2005年5月9日
2005年5月9日失踪
2005年5月9日失踪
2005-05-10获胜
否定的
否定的
如果要生成以下结果,如何写sql语句?
胜利和失败
2005-05-09 2 2
2005-05-10 1 2
-
创建表#tmp(rq varchar(10),傅生nchar(1))
插入到# tmpvalues ('2005-05-09 ','盛')
插入到# tmpvalues ('2005-05-09 ','盛')
插入到# tmpvalues ('2005-05-09 ','负')
插入到# tmpvalues ('2005-05-09 ','负')
插入到# tmpvalues ('2005-05-10 ','盛')
插入到# tmpvalues ('2005-05-10 ','负数')
插入到# tmpvalues ('2005-05-10 ','负数')
1) Select rq,sum(傅生=' win '然后1 else 0 end ' win '的情况),sum(傅生=' negative '然后1 else 0 end ' negative '的情况)from #tmp group by rq。
2)选择n.rq,n.win,m.negative from(
Select rq,win =count(*) from #tmp where傅生=' win' group by rq)N内部联接。
(select rq,negative =count(*) from #tmp其中傅生= ' negative ' group by rq)m on n . rq = m . rq
3)选择a.col001,a.a1胜,b.b1负从。
(select col 001,count(col 001)a 1 from temp 1其中col 002 = ' win ' group by col 001)a,
(select col001,count(col 001)b 1 from temp 1 where col 002 = ' negative ' group by col 001)b
其中a.col001=b.col001
2.就面试中遇到的SQL语句提出疑问。
表中有三列,用SQL语句实现:当A列大于B列时,选择A列或B列,当B列大于C列时,选择B列或C列..
-
选择(当a & gtb然后a否则b结束),
(b & gtc然后b esle c结束)
来自表名
3.面试问题:日期判断的sql语句?
请取出tb_send表中日期(发送时间字段)是今天的所有记录?(发送时间字段是日期时间,包括日期和时间)。
-
select * from tb其中datediff(dd,SendTime,getdate())=0
4.有一张表,上面有三个字段:语文、数学、英语。有三个记录分别代表语文70分,数学80分,英语58分。请用一条sql语句找出这三条记录,并根据以下条件显示出来(并写出你的想法):
大于等于80分代表优秀,大于等于60分代表及格,小于60分代表不及格。
显示格式:
中国数学英语
通过,通过,失败。
-
挑选
(当语言> =80时,则为“优秀”
当中文> =60时,则“通过”
else‘fail’)作为语言,
(当数学> =80时,则为“优秀”
当数学> =60时,则“通过”
否则“失败”)作为数学,
(如果英语> =80,则为“优秀”
当英语> =60时,则“通过”
else‘fail’)作为英语,
来自表格
5.在sqlserver2000中,请用sql创建一个用户临时表和一个系统临时表,包含两个字段id和IDValues,都是int类型,并说明两者的区别。
-
用户临时表:createtable # xx (id int,idvalues int)
系统临时表:创建表# # xx (id int,idvalues int)
差异:
用户临时表仅对创建它的用户的会话可见,对其他进程不可见。
当创建这个临时表的进程消失时,它会被自动删除。
全局临时表对整个SQL Server实例是可见的,但是当所有访问它的会话消失时,它会被自动删除。
6.sqlserver2000是一个大型数据库,其存储容量只受存储介质的限制。它是如何实现这种无限容量机制的?
-
它的所有数据都存储在数据文件(*。dbf),所以只要文件足够大,就可以扩展SQL Server的存储容量。
SQL Server 2000数据库中有三种类型的文件:
主数据文件
主数据文件是数据库的起点,指向数据库中文件的其他部分。每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是。中纤板。
辅助数据文件
辅助数据文件包含除主数据文件之外的所有数据文件。一些数据库可能没有辅助数据文件,而另一些数据库有多个辅助数据文件。辅助数据文件的推荐文件扩展名是。ndf。
日志文件
日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但也可以有多个。日志文件的推荐文件扩展名是。ldf。
7.请使用sql语句获得结果。
从表1和表2中取出表3所列格式的数据。注意提供的数据和结果不准确,就当格式咨询你。
例如使用存储过程。
表1
月度部门绩效yj
-
一月01 10
1月2日10
1月3日5日
2月2日8日
04年2月9日
3月3日8日
表2
部门名称
-
01国内业务一部
02国内业务部2
03国内业务部3
04国际业务部
表3(结果)
部门副一月二月三月
-
01 10空空
02 10 8空
03空5 8
04空空9
-
1)
选择a .部门名称dname,b .绩效yj为'一月',c .绩效yj为'二月',d .绩效yj为'三月'
来自表1 a、表2 b、表2 c、表2 d
其中a. Dep = B. Dep,B. Month mon =' January '和
A.dep = C和C. month mon = '二月'和
A.Dep = D. Dep和D. Month mon =' March '和
2)
选择a.dep,
sum(b . mon = 1 then b . yjelse 0 end时的情况)为“一月”,
sum(b . mon = 2 then b . yjelse 0 end时的情况)为“二月”,
sum(b . mon = 3 then b . yjelse 0 end时的情况)为‘March’,
sum(b . mon = 4 then b . yjelse 0 end时的情况)为“April”,
sum(b . mon = 5 then b . yjelse 0 end时的情况)为‘May’,
sum(b . mon = 6 then b . yjelse 0 end时的情况)为“June”,
sum(b . mon = 7 then b . yjelse 0 end时的情况)为‘July’,
sum(b . mon = 8 then b . yjelse 0 end时的情况)为“August”,
sum(b . mon = 9 then b . yjelse 0 end时的情况)为“九月”,
Sum(当b.mon = 10 then b.yjelse0end时的情况)为“十月”,
sum(b . mon = 11 then b . yjelse 0 end时的情况)为“11月”,
sum(b . mon = 12 then b . yjelse 0 end时的情况)为“十二月”,
从表2 a左连接表1 b on a.dep=b.dep
8.华为的一个采访问题
一个表中的一个Id有多条记录。找出该id的所有记录,并显示* * * *中有多少条记录。
-
select id,Count(*)from TB group by id having Count(*)& gt;1
select * from(select count(ID)as count from table group by ID)T其中T.count & gt1
SQL查询面试问答II 1。从高到低查询不同老师所教的不同课程的平均成绩。
选择max(Z.T#)作为教师ID,MAX(Z.Tname)作为教师姓名,C.C#作为课程ID,MAX(C.Cname)作为课程名称,AVG(Score)作为平均分。
从SC当T,课程当C,老师当Z
其中T.C#=C.C#,C.T#=Z.T#
按C.C#分组
由AVG(配乐)DESC订购
2.查询以下课程第3-6名学生的成绩单:企业管理(001)、马克思(002)、UML (003)、数据库(004)。
[学号],[学生姓名],企业管理,马克思,UML,数据库,平均成绩。
选择不同的前3名
即S#作为学号,
学生。snamea学生姓名,
T1.score作为企业管理、
T2 .得分为马克思,
T3 .评分为UML,
T4 .得分作为数据库,
Isnull (t1.score,0)+isnull (t2.score,0)+isnull (t3.score,0)+isnull (t4.score,0)作为总分。
从学生,SC左加入SC为T1
在SC上。S# = T1。S#和T1。C# = '001 '
以T2的身份加入SC
在SC上。T2。S#和T2。C# = '002 '
左连接SC作为T3
在SC上。S# = T3。S#和T3。C# = '003 '
以T4的身份加入SC
在SC上。T4。S#和T4。C# = '004 '
学生在哪里?S#=SC。S#和
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
不在
(选择
明显的
带领带的TOP 15
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
来自sc
左连接sc为T1
在sc上。S# = T1。S#和T1。C# = 'k1 '
以T2的身份加入sc
在sc上。T2。S#和T2。C# = 'k2 '
左连接sc作为T3
在sc上。S# = T3。S#和T3。C# = 'k3 '
以T4的身份加入sc
在sc上。T4。S#和T4。C# = 'k4 '
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)desc);
3.打印所有科目的成绩和每个成绩的人数:课程ID,课程名称,[100-85],[85-70],[70-60],[
选择SC。C#作为课程id,cname作为课程名称。
,SUM(EN 85和100 THEN 1 ELSE 0 END之间的分数的情况)为[100 - 85]
,SUM(EN 70和85 THEN 65438之间的分数+0 ELSE 0 END的情况)为[85 - 70]
,SUM(EN 60和70 THEN 65438之间的分数+0 ELSE 0 END的情况)为[70 - 60]
,SUM(分数& lt60 THEN 1 ELSE 0 END)作为[60 -]
当然是来自SC
其中SC。c# =课程。C#
按SC分组。C#,Cname
4、查询学生的平均分及其排名。
选择1+(选择计数)。
从(选择S#,AVG(得分)作为平均分。
来自SC
按S#分组
)作为T1
其中平均成绩> T2。平均成绩)作为排名,
S#表示学生编号,平均成绩
从(选择S#,AVG(得分)平均分。
来自SC
按S#分组
)作为T2
按平均desc排序;
5.查询各科成绩前三名的记录:(不考虑并列成绩)
选择t1。S#作为学号,t1。C#作为课程ID,分数为。
来自SC t1
得分在哪里(选择前3名得分
来自SC
其中t1。C#= C#
按分数排序DESC
)
按t1排序。c#;
6.查询每门课程被选上的学生人数。
通过C#从sc组中选择c#,count(S #);
7.找出只上过一门课的所有学生的学号和姓名。
选择sc.s #,student.sname,count (c #)作为课程数。
来自SC,学生
其中SC。S # =学生。S#按SC分组。S#,学生。Sname有count(c#)= 1;
8.查询课程号?002?分数比课程号好吗?001?所有低年级学生的学号和姓名;
Select S#,Sname from(选择学生。S#,学生。Sname,score,(从SC SC_2中选择分数,其中SC_2。S # =学生。S#和SC_2。C#='002 ')得分2
from Student,SC where Student。S#=SC。S#和C#='001') S_2,其中score2
9.查询所有课程成绩低于60分的学生的学号和姓名;
选择S#,Sname
来自学生
其中S#不在(选择学生。S# from Student,SC其中S#=SCS#和score & gt60);
10,查询未学完所有课程的学生的学号和姓名;
选择学生。S#,学生。Sname
来自学生,SC
学生在哪里?S#=SC。S#按学生分组。S#,学生。Sname有计数(c#)& lt;(从课程中选择count(c#));
11,查询至少一门课程和学号?1001?学生的学号和同一学生的姓名;
select S#,Sname from Student,SC where Student。S#=SC。select C# from SC中的S#和C#,其中S # = ' 1001 ';
12.你至少学过的学号是多少?001?所有课程中学生的学号和其他学生的姓名;
选择不同的SC。S#,Sname
来自学生,SC
学生在哪里?S#=SC。S#和C# in(从SC中选择C#,其中S # = ' 001 ');
13,放?SC?在桌子里?叶平?教师所教课程的成绩改为本课程的平均成绩;
更新SC集合分数=(选择平均值(SC_2.score)
来自SC SC_2
其中sc _ 2.c # = sc.c #) from course,teacher where course . c# = sc . c # and course . t # = teacher . t # and teacher . tname = '叶平');
14,查询和?1002?6号学生选修的课程与其他学生的学号和姓名完全一样;
select S # from SC where c# in(select c# from SC where S # = ' 1002 ')
group by S # having count(*)=(select count(*)from SC where S # = ' 1002 ');
15,删除学习?叶平?老师上课的SC表记录;
删除SC
当然,老师
其中course.c # = sc.c #和course.t # = teacher.t #和tname = '叶平';
16.在SC表中插入一些记录。这些记录必须满足以下条件:未编号?003?学生证,2,
#班平均成绩;
插入SC选择S#,' 002 ',(选择平均值(分数)
from SC where c# = ' 002 ')from Student where S # not in(Select S # from SC where c# = ' 002 ');
17,按平均分从高到低显示所有学生?数据库?、?企业管理?、?英语?三门课程的课程成绩以如下形式展示:学号、数据库、企业管理、英语、有效课程数、有效平均分。
选择S#作为学生ID
,(从其中选择分数sc.s # = t.s #,c # =' 004 ')作为数据库。
、(选择分数from其中sc.s # = t.s #,c # =' 001 ')作为企业管理。
,(选择分数,其中sc.s # = t.s #,c # =' 006 ')为英语。
,COUNT(*)为有效课程数,AVG(t.score)为平均分。
从SC到t
按S#分组
按平均值排序(t.score)
18,查询各科最高分和最低分:以如下形式显示:课程ID,最高分,最低分。
选择L.C. # as的课程id,最高分L.Scoreas,最低分R.Scoreas。
从SC L,SC AS R
其中L.C# = R.C#和
L.score =(选择最大(IL.score)
从SC到IL,从学生到IM
其中L.C# = IL。C#和IM。S#=IL。S#
按IL分组。C#)
和
R.分数=(选择最低分数)
从SC到IR
其中R.C# = IR。C#
按IR分组。C#
);
19,按各科平均分由低到高和通过率百分比由高到低排序。
选择t.C#作为课程编号,最大(课程。Cname)作为课程名称,isnull(AVG(分数),0)作为平均分。
,100 * SUM(is null(score,0)时的情况)>= 60然后1 else 0 end)/count (*)作为通过百分比
当然是从SC T
其中t . C # =课程。C#
按条款编号分组
ORDER BY 100 * SUM(is null(score,0)时的情况)>= 60 th EN 1 ELSE 0 END)/COUNT(*)desc
20、查询以下课程的平均分和通过率的百分比(以“1线”显示):企业管理(001)、马克思(002)、OO &;UML (003),数据库(004)
选择sum (case当c # =' 001 '则得分else 0 end)/sum (case c #当' 001 '则1 else 0 end)作为企业管理的平均得分。
,100 * SUM(c# = ' 001 '且score & gt= 60然后1 else 0 end)/sum(c# = ' 001 '然后1 else 0 end时的情况)作为企业管理通过百分比。
,sum(case when c# = ' 002 ' then score else 0 end)/sum(case c# ' when ' 002 ' then 1 else 0 end)作为马克思的平均得分。
,100 * SUM(c# = ' 002 '且score & gt= 60 then 1 else 0 end)/sum(c# = ' 002 ' then 1 else 0 end时的情况)作为马克思传球百分比。
,sum(c# = ' 003 '时的情况,然后score else 0 end)/sum(c# ' 003 '时的情况,然后1 else 0 end)作为UML平均分数。
,100 * SUM(c# = ' 003 '且score & gt= 60 then 1 else 0 end)/sum(c# = ' 003 ' then 1 else 0 end时的情况)作为UML通过百分比。
的平均分数,sum(c# = ' 004 '时的情况,然后score else 0 end)/sum(c# ' 004 '时的情况,然后1 else 0 end)作为数据库。
,100 * SUM(c# = ' 004 '且score & gt= 60 then 1 else 0 end)/sum(c# = ' 004 ' then 1 else 0 end时的情况)作为数据库通过百分比。
来自SC
;