SQL面试必备:常见查询问题及解答汇总

创始人
2024-12-27 19:57:37
0 次浏览
0 评论

SQL查询面试题与答案

SQL查询面试问答

SQL是一种数据库查询语言和编程语言,用于访问数据以及查询、更新和管理关系数据库系统。
它也是数据库脚本文件的扩展名;。
以下是SQL查询面试问题和答案。
你可以阅读它们。

​SQL查询面试问答1

​1.关于分组表内容的SQL查询面试题:

​2005年5月9日胜利

2005-胜利05–09

失败2005年5月9日

2005年5月9日亏损

2005年5月10日胜利

2005-05-10亏损

【2005年5月10日亏损

2005年5月10日亏损

2005年5月10日亏损

如果你想要下面的结果,SQL语句应该怎么写?

赢还是输

2005-05-0922

2005-05-1012

------------------------------------------

createtable#tmp(rqvarchar(10),shengfunchar(1))

insertinto#tmpvalues('2005-05-09','win')

insertinto#tmpvalues('2005)-05-09','win')

insertinto#tmpvalues('2005-05-09','负数')

insertinto#tmpvalues('2005-05-09','负数')

insertinto#tmpvalues('2005-05-10','win')

insertinto#tmpvalues('2005-05-10','负')

​insertinto#tmpvalues('2005-05-10','负数')

<1 selectrq,sum(casewhenshengfu='win' sum(casewhenshengfu='负数'>

2)selectN.rq,N.win,M.Negativefrom(

​selectrq,win=count(*)from#tmpwhereshengfu='win'groupbyrq)Ninnerjoin

<(selectrq,负=count(*)from#tmpwhereshengfu='负'groupbyrq)MonN.rq=M.rq

<3>

<(selectcol001,count(col001)a1fromtemp1wherecol002='win'groupbycol001)a,

<(selectcol001,count(col001)b1fromtemp1wherecol002='negative'groupbycol001)b

【wherea.col001=b.col001

【2.问一个关于面试时出现的SQL语句查询的问题

一个表中有三列ABC,使用SQL语句实现:当A列大于B列时,选择A列,否则选择A列B列,当B列大于C列时,选择B列,否则选择C列。

-------------------------------------------------------------

bthenaelsebend),

cthenbeslecend)

【fromtable_name

【3.面试问题:日期决策应用的SQL?

请删除tb_send表中所有日期(SendTime字段)是否与这一天相关(SendTime字段为datetime类型,包括日期和时间)

------------------------------------------

:select*fromtbwheredatediff(dd,SendTime,getdate())=0

4.有一个表,有3个字段:中文,数学和英语。
共有三份参赛作品,语文70分,数学80分,英语58分。
使用SQL语句查询这3条记录,并按照以下条件显示(并写下你的想法):

分数大于或等于80分表示“优秀”,分数大于或等于60分表示“满意”,分数小于60分表示“不及格”。

显示格式:

语文数学、英语

优秀、不满意

-------------------------------------------

选择

=80,则“优秀”

=60,则“及格”

否则“不及格”)如中文

=80的情况,则“优秀”

=60数学中,则“通过”

否则“失败”),

=80then“excellent”

=60then'pass'

otherwise'failed')asEnglish,

fromtable

5.在sqlserver2000中,使用sql创建自定义临时表和系统临时表,包含两个字段ID和IDValues。
,这两种类型都是int,请解释一下它们之间的区别?

:-------------------------------------------------------

用户临时表:createtable#xx(IDint,IDValuesint)

系统临时表:createtable##xx(IDint,IDValuesint)

区别:

用户的临时表仅对创建者的会话可见临时表,对其他进程不可见。

当创建它的进程消失时,该临时表会自动删除。

全局临时表该表对整个SQLServer实例可见,但当访问它的所有会话都消失后,它会被自动删除。

6、sqlserver2000是一个大型数据库,其存储容量仅受存储介质的限制。
限制,请告诉我这个无限权力的机制是如何实现的。

-------------------------------------------------------------

所有的数据都存储在数据文件(*.dbf)中,所以只要文件足够大,SQLServer的容量就可以扩展。

共有三种SQLServer2000数据库类型。
文件:

主数据文件

主数据文件是数据库的起点,指向数据库中文件的其他部分。

每个数据库都有主要数据文件。
主数据文件的推荐扩展名为.mdf。

次要数据文件

次要数据文件包含除主数据文件之外的所有数据文件。
有些数据库可能没有辅助数据文件,而其他数据库可能有多个辅助数据文件。
辅助数据文件的建议扩展名是.ndf。

日志文件

日志文件包含恢复数据库所需的所有日志信息。
每个数据库必须至少有一个日志文件,但可以有多个。
建议的日志文件扩展名为.ldf。

7.使用sql语句获取结果。

从表1和表2中删除表3列出的格式数据。
请注意,提供的数据和结果并不准确或精确。
仅用作一种格式。
向大家请教。

您还可以使用存储过程。

【表1

【yj月部门绩效

】------------------------------

1月01:10

1月0210

1月35日

2月28日

>

2月49日

3月38日

表2

部门dep部门名称dname

 --------------------------------------------

01国内业务一部

02国内业务二部

03国内业务三部

04国际业务部

表3(结果)

部门部门一月、二月、三月

------------------------------------------

0110nullnull

02108null

03null58

04nullnull9

--------------------------------------------------------------------------

 1)

 选择a.部门名称dname,b.业绩yjas'一月',c.业绩yjas'二月',d.业绩yjas'三月'

fromtable1a,table2b,table2c,table2d

wherea.Departmentdep=b.Departmentdepandb.Monthmon='一月'and

A.部门dep=c.部门depandc.月份mon='二月'and

<2>

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.yjelse0en)d)as“五月”,

sum(casewhenb.mon=6thenb.yjelse0end)作为“六月”,

sum(casewhenb.mon=7thenb.yjelse0end)作为“七月”,

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"十二月",

fromtable2alefjointable1bona.dep=b.dep

8.华为面试题

表中有几条记录带有此标识符。
查找具有该ID的所有记录并显示。
有多少条记录。

-------------------------------------------------------------

1

1

SQL查询面试题及答案2

 1.查询各项平均分不同老师讲授的课程并从高到低显示

SELECTmax(Z.T#)AS老师id,MAX(Z.Tname)AS老师姓名,课程idC.C#AS,MAX(C.Cname)课程名称AS,平均分AVG(分数)AS

FROMSCAST、CourseASC、TeacherASZ

>

​其中TC.C#=C.C#andC.T#=Z.T#

​GROUPBYC.C#

​ORDERBYAVG(Score)DESC

​2、请求时间表在以下课程中获得3-6名的学生的学业成绩:商业管理(001)、马克思(002)、UML(003)、数据库(004)

【学号】,【学名】,商业管理,马克思,UML,数据库,GPA

SELECTDISTINCTtop3

SC.S#为学号,

Student.SnameAS学生姓名,

T1.scoreAS管理企业,

​T2.scoreASMarx,

​T3.scoreASUML,

​T4.scoreAS数据库,

​ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)作为一般分数

FROMStudent,SCLEFTJOINSCAST1

ONSC.S#=T1.S#ANDT1.C#='001'

LEFTJOINSCAST2

​LEFTJOINSCAST4

​ONSC.S#=T4.S#ANDT4.C#='004'

​WHEREstudent.S#=SC.S#and

ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)

否TIN

(选择

【FROMsc

【LEFTJOINScAST1

​LEFTJOINScAST3

​ONsc.S#=T3.S#ANDT3.C#='k3'

​LEFTJOINScAST4

​ONsc.S#=T4.S#ANDT4.C#='k4'

ORDERBYISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)DESC);

3、统计显示每个科目的分数,每个分数范围内的人数:课程ID,课程名称,[100-85],[85-70],[70-60],[<60>

<,SUM(CASEWHENscoreBETWEEN85AND100THEN1ELSE0END)AS[100-85]

<,SUM(CASEWHENscoreBETWEEN70AND85THEN1ELSE0END)AS[85-70]

<,SUM(CASEWHENscoreBETWEEN60AND70THEN1ELSE0END)AS[70-60]

A,SUM(CASEWHENscore<60THEN1ELSE0END>

【FROMSC,课程

【其中SC.C#=课程.C#

【GROUPBYSC.C#,Cname;

】4.请求平均分数和学生评分

SELECT1+(SELECTCOUNT(不同平均分数)

FROM(SELECTS#,AVG(score)ASlevel平均分

​FROMSC

GROUPBYS#

​)AST1

T2平均分)作为评分,

以#为学号,平均分

FROM(SELECTS#,AVG(score)average分数

FROMSC

GROUPBYS#

)AST2

ORDERBY平均分数描述;

5.请求记录每个科目的前三名分数:(无论分数相同)

SELECTt1.S#asStudentID,t1.C#作为课程ID,得分

​FROMSCt1

​WHEREscoreIN(SELECTTOP3score

​FROMSC

 WHEREt1.C#=C#

 ORDERBYscoreDESC

 )

 ORDERBYt1.C#;

 6.查询每门课程所选课数学生

selectc#,count(S#)fromscgroupbyC#;

7.请求仅参加一门课程的所有学生的人数和姓名


包含selectSC.S#,Student.Sname,count(C#)AS课程选择编号

fromSC,Student

其中SC.S#=Student。
S#groupbySC.S#,学生。
Snamehavingcount(C#)=1;

8。
请求课程编号“002”中成绩低于课程编号的所有学生的编号和姓名“001”.;

​SelectS#,Snamefrom(selectStudent.S#,Student.Sname,score,(selectscorefromSCSC_2whereSC_2.S#=Student.S#andSC_2.C#='002')score2

来自Student,SCwhereStudent.S#=SC.S#andC#='001')S_2wherescore2

9.请求所有课程成绩低于60分的学生的人数和姓名;

选择S#。
,Sname

【fromStudent

60);

10.请求未完成所有课程的学生人数和姓名;

selectStudent.S#,Student.Sname

​fromStudent,SC

​其中Student.S#=SC.S#groupbyStudent.S#,Student.Snamehavingcount(C#)<(selectcount(C#)fromCourse);

11.索取学号以及至少一门课程与学号“1001”学生相同的学生姓名;

selectS#,SnamefromStudent,SCwhereStudent.S#=SC.S#andC#inselectC#fromSCwhereS#='1001';

12.请求学号和其他学生的姓名,已完成至少一门学号为“001”的学生的课程;

selectdistinctSC.S#,Sname

【fromStudent,SC

【whereStudent.S#=SC.S#andC#in(selectC#fromSCwhereS#='001');

13将“SC”表中“叶平”所教班的成绩改为该课程的平均成绩;

updateSCetsscore=.(selectavg(SC_2.score)

fromSCSC_2

whereSC_2.C#=SC.C#)fromCourse,TeacherwhereCourse.C#=SC.C#andCourse.T#=Teacher.T#andTeacher.Tname='叶平');

14.要求与学生正在学习的课程完全一致否"1002"其他学生的号码和姓名;

selectS#fromSCwhereC#in(selectC#fromSCwhereS#='1002')

<.p>groupbyS#havingcount(*)=(selectcount(*)fromSCwhereS#='1002');

15、删除“E平”老师授课的SC表记录;

​选择SC

​来自课程,老师

​其中Course.C#=SC.C#andCourse.T#=Teacher.T#andTname='叶平';

16.粘贴SC表中的多个条目。
这些条目必须满足以下条件:未通过课程编号“.003”的学生学生编号,2,

班级平均成绩编号;

InsertSCselectS#,'002',(从SC选择平均值(分数)

whereC#='002')fromStudentwhereS#notin(SelectS#fromSCwhereC#='002');

17、显示“数据库”、“企业管理”、“英语”三门课程的成绩如下:学生ID、数据库、商业管理、英语、活跃课程数量、有效GPA

SELECTS#asID学生

<,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='004')AS数据库

<,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='001')自动化管理企业

 ,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='006')AS英语

,COUNT(*)AS有效课程数,AVG(t.score)AS平均分

FROMCASt

GROUPBYS#

ORDERBYavg(t.score)

18.请求每个科目的最高分和最低分:以以下形式显示:课程ID、最高分、最低分</。
р>

SELECTL.C#作为课程标识符,最高分L.scoreAS,最低分R.scoreAS

FROMSCL,SCASR

WHEREL.C#=RC#and

L.score=(SELECTMAX(IL.score)

FROMSCASIL,StudentASIM

WHEREL.C#=IL.C#andIM.S#=IL.S#

GROUPBYIL.C#)

AND

R.Score=(SELECTMIN(IR.score)

FROMSCASIR

WHERER.C#=IR.C#

GROUPBYIR.C#

);

<19>

SELECTt.C#AS课程号,最大。
(course.Cname)AS课程名称,isnull(AVG(score),0)AS平均分

<,100*SUM(CASEWHENisnull(score,0)>=60THEN1ELSE0END)/COUNT(*)AS通过率

FROMSCT,课程

wheret.C#=course.C#

GROUPBYt.C#

=60THEN1ELSE0END)/COUNT(*)DESC

20、查询以下课程的平均成绩和通过率(使用“1行”显示:商业管理(001)、马克思(002)、OO&UML(003)、数据库(004)

SELECTSUM(CASEWHENC#='001'THENscoreELSE0END)/SUM(CASEC#WHEN'001'THEN1ELSE0END)AS企业管理平均分

=60THE作为由马克思

=60THEN1ELSE0END)/SUM(CASEWHENC#='002'THEN1ELSE0END)AS马克思,百分比通过

 ,SUM(CASEWHENC#='003'THENscoreELSE0END)/SUM(CASEC#WHEN'003'THEN1ELSE0END)平均分ASUML

=60THEN1ELSE0END)/SUM(CASEWHENC#='003'THEN1ELSE0END)ASUML百分比通过

,SUM(CASEWHENC#='004'THENscoreELSE0END)/SUM(CASEC#WHEN'004'THEN1ELSE0END)AS数据库平均分

<,100*SUM(CASEWHENC#='004'ANDscore>=60THEN1ELSE0END)/SUM(CASEWHENC#='004'THEN1ELSE0END)AS数据库通过百分比

:FROMSC

;

图解SQL面试题:经典50题

已知有四个表:学生表(学生)、成绩表(成绩)、课程表(课程)、教师表(教师)。
根据这些信息,应该编写SQL语句来解决以下问题。
首先,创建数据库和表。
在navicat客户端中,创建Student(学生)表,设置StudentNumber为主键约束,并定义数据类型和其他列约束。
接下来,创建一个结果表(Result),设置“课程号”和“学号”为主键约束,并为“结果”列选择数据类型。
创建课程表(Course)并将“课程编号”设置为主键约束。
创建特征表(Feature)并设置“特征编号”为主键约束。
然后将数据添加到表中。
使用SQL语句和导航操作将数据添加到Student表、Grades表、Course表和Instructor表。
接下来,回答50个面试问题。
类别包括简单查询、汇总分析、复杂查询、多表查询。
简单的查询包括:查询姓“猴”的学生名单、查询姓“孟”的教师人数。
总结分析题包括:查询“0002”号课程的总成绩、查询选该课程的学生人数、查询各科目的最高分和最低分、查询每门课程选拔的学生人数,查询男生和女生的人数,查询平均成绩超过60分的学生的身份,查询有至少两门课程的学生名单。
查询同名课程并统计同名学生的数量。
不及格,按照课程编号从大到小排列,并检查每门课程的平均成绩。
成绩按平均分升序排列,平均分相同时,按课程编号降序排列。
检索课程号为“0004”且成绩小于60的学生ID,将结果按年级降序排序,并计算每门课程的学生人数(大于2(仅统计单门课程))。
当然需要提供课程数和选修课数,并查询学生人数和学生平均成绩。
两门及以上课程不及格的,查询学生的总成绩及排名,查询平均成绩大于60分的学生。
学生人数和累计平均数。
复杂查询包括:查询所有课程成绩在60分以下的学生的学号和姓名、查询未选修所有课程的学生的学号和姓名、查询所有只选修过两门课程的学生的学号和姓名、查询1990年出生的学生名单,并核实各科目尖子生的记录。
多表查询问题包括:查询所有学生的学号、姓名、选课数、总成绩;查询所有平均绩点大于85的学生的学号、姓名、平均绩点;查询学生'选课状态:学号、姓名、课程号、课程名称,查询每门课程及格数、不及格数、人数,使用分段[100-85]、[85-70]、[70-60]、[<60>每个科目依次统计:各分段学生人数、课程及课程号、姓名及课程号查询、学号、成绩为0003且分数在80分以上的学生姓名。
高级功能:窗口功能,包括查询学生平均成绩及排名、按各科成绩分类排序显示、查询各科成绩最好的两名学生姓名、查询第二至第三名各科目的排名情况。
优秀学生及课程成绩信息,查询各科目前三名的成绩记录。
要回答这50道面试题,你需要了解基本的SQL语法,认识表之间的关系,并掌握编写查询语句的技巧。
通过实际操作和理解题目逻辑,可以有效提高你的SQL编程能力。

sql面试题

1.select*fromtablewherecreatedate=trunc(sysdate)-3;select*fromtablewherecreatedate=(sysdate-20/1440);2selectnamefromtablewherescore<60groupbynamehavingcount>23.你的意思是这个selectmax(id),namefromtablegroupbyname4,selectname,totalscorefrom(selectname,sum(score)totalfromtablegroupbynameorderbytotaldesc)whererownum<8andrownum>4

SQL练习题汇总

1、简单查询(一)面试题1、查询姓“Monkey”的学生列表2、查询姓“Monkey”的学生列表3、查询姓“Monkey”的学生列表》3.查询姓“蒙”的学生名单名字中带“蒙”的学生(2)练习题1.查找姓“蒙”的老师人数2.总结分析(1)访谈问题1.查找课程号“0002”总成绩2.查询选择该课程的学生人数(2)联系-分组1.查询各科目的最高分和最低分2.查询每门课程选择的学生人数3.查询男生女生人数(三)联系方式-结果分组条件1、查询学生人数以及平均分在60以上的学生的平均分2.查询至少选修课两门课程的学生人数3.搜索同名(同姓)的学生列表,统计同名学生的人数4.搜索不及格课程并排序按课程编号从小到大5.查询每门课程的平均成绩,结果以平均值为准。
注释按升序排序。
当平均成绩相同时,按课程编号6降序排列。
搜索课程编号为“00”。
04”且分数小于60,结果按照分数降序排序7.统计每门课程的学生人数(仅统计2人以上的课程)8.查询学生人数及参加课程两门或两门以上课程不及格的学生人数他们的平均成绩3.复杂查询1.查找成绩低于此的所有学生的学号和姓名。
所有课程60分2.查找未选修所有课程的学生编号和姓名3.查找仅选修两门课程的所有学生编号和姓名4.1990年出生的学生名单5.【面试类型问题]问题topN1)案例:按课程号分组,获取得分最高的数据2)案例:按课程号分组,得到得分最高的数据取最小值在线数据3)案例:查询每个科目前两名的记录4.多表查询(1)复习(2)练习1.查询学号、姓名、选课数以及所有学生的总成绩2、查询所有85分以上学生的平均学号、姓名、平均分3、查询学生的选课情况:学号、姓名、课程编号、课程名称4.查找每门课程的及格数和不及格数5.使用分段[100-85]、[85-70]、[70-60]、[<60>使用limit子句限制返回数据的行数。
热门文章
1
c语言有三维数组吗 C语言三维数组初始化详细方法和步骤如下:1第一步,需要定义一个数组。常见的数组类...

2
js字符串包含某个字符串的个数 js问题:求字符串中某个字符出现的个数的方法?看看是否满足你的需求(x);}pu...

3
轻松调整SQL Server 2008表... sql2008表格怎么只能编辑前两200行200线是默认设置,并且仅在号码开通时...

4
C语言基础解析:从Hello World... C语言的基本要素有哪些?基本的C语言格式可以参考基本的helloworld程序。...

5
Python排列组合与循环运用技巧解析 怎样使用Python进行排列组合?对于这类问题,我们可以使用分割循环来执行转换和...

6
C语言for循环技巧:非C字符位置记录与... C语言for循环问题求解.在for中,我记录了要写入的非c字符的位置。仅当字符不...

7
Hive内置函数全解析:数学、字符串、日... 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转...

8
Python随机数生成技巧:轻松输出任意... python通过键盘输入随机数种子,产生50个[0,100]之间的随机正整数,然...

9
C语言实现字符串倒序输出教程 请教C语言字符串倒序输出#include#includevoidmain(){c...

10
C语言一元二次方程解答器实现与优化 这个c语言程序哪里有问题,我想写一个一元二次方程解答器。#include#inc...