SQL查询面试问题和答案

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