问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQL查询面试题与答案

发布网友 发布时间:2022-08-21 07:42

我来回答

1个回答

热心网友 时间:2023-11-19 07:09

SQL查询面试题与答案

  SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。下面是我搜集的SQL查询面试题与答案,欢迎大家阅读。

  SQL查询面试题与答案一

  1.一道SQL语句面试题,关于group by表内容:

  2005-05-09 胜

  2005-05-09 胜

  2005-05-09 负

  2005-05-09 负

  2005-05-10 胜

  2005-05-10 负

  2005-05-10 负

  如果要生成下列结果, 该如何写sql语句?

  胜 负

  2005-05-09 2 2

  2005-05-10 1 2

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

  create table #tmp(rq varchar(10),shengfu nchar(1))

  insert into #tmp values('2005-05-09','胜')

  insert into #tmp values('2005-05-09','胜')

  insert into #tmp values('2005-05-09','负')

  insert into #tmp values('2005-05-09','负')

  insert into #tmp values('2005-05-10','胜')

  insert into #tmp values('2005-05-10','负')

  insert into #tmp values('2005-05-10','负')

  1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq

  2) select N.rq,N.胜,M.负 from (

  select rq,胜=count(*) from #tmp where shengfu='胜'group by rq)N inner join

  (select rq,负=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq

  3)select a.col001,a.a1 胜,b.b1 负 from

  (select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a,

  (select col001,count(col001) b1 from temp1 where col002='负' group by col001) b

  where a.col001=b.col001

  2.请教一个面试中遇到的SQL语句的查询问题

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

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

  select (case when a>b then a else b end ),

  (case when b>c then b esle c end)

  from table_name

  3.面试题:一个日期判断的sql语句?

  请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)

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

  select * from tb where datediff(dd,SendTime,getdate())=0

  4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):

  大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。

  显示格式:

  语文 数学 英语

  及格 优秀 不及格

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

  select

  (case when 语文>=80 then '优秀'

  when 语文>=60 then '及格'

  else '不及格') as 语文,

  (case when 数学>=80 then '优秀'

  when 数学>=60 then '及格'

  else '不及格') as 数学,

  (case when 英语>=80 then '优秀'

  when 英语>=60 then '及格'

  else '不及格') as 英语,

  from table

  5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?

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

  用户临时表:create table #xx(ID int, IDValues int)

  系统临时表:create table ##xx(ID int, IDValues int)

  区别:

  用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.

  当创建它的进程消失时这个临时表就自动删除.

  全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.

  6.sqlserver2000是一种大型数据库,他的`存储容量只受存储介质的*,请问它是通过什么方式实现这种无限容量机制的。

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

  它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL Server的存储容量是可以扩大的.

  SQL Server 2000 数据库有三种类型的文件:

  主要数据文件

  主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。

  次要数据文件

  次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。

  日志文件

  日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。

  7.请用一个sql语句得出结果

  从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。

  如使用存储过程也可以。

  table1

  月份mon 部门dep 业绩yj

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

  一月份 01 10

  一月份 02 10

  一月份 03 5

  二月份 02 8

  二月份 04 9

  三月份 03 8

  table2

  部门dep 部门名称dname

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

  01 国内业务一部

  02 国内业务二部

  03 国内业务三部

  04 国际业务部

  table3 (result)

  部门dep 一月份 二月份 三月份

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

  01 10 null null

  02 10 8 null

  03 null 5 8

  04 null null 9

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

  1)

  select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'

  from table1 a,table2 b,table2 c,table2 d

  where a.部门dep = b.部门dep and b.月份mon = '一月份' and

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

  a.部门dep = d.部门dep and d.月份mon = '三月份' and

  2)

  select a.dep,

  sum(case when b.mon=1 then b.yj else 0 end) as '一月份',

  sum(case when b.mon=2 then b.yj else 0 end) as '二月份',

  sum(case when b.mon=3 then b.yj else 0 end) as '三月份',

  sum(case when b.mon=4 then b.yj else 0 end) as '四月份',

  sum(case when b.mon=5 then b.yj else 0 end) as '五月份',

  sum(case when b.mon=6 then b.yj else 0 end) as '六月份',

  sum(case when b.mon=7 then b.yj else 0 end) as '七月份',

  sum(case when b.mon=8 then b.yj else 0 end) as '八月份',

  sum(case when b.mon=9 then b.yj else 0 end) as '九月份',

  sum(case when b.mon=10 then b.yj else 0 end) as '十月份',

  sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',

  sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',

  from table2 a left join table1 b on a.dep=b.dep

  8.华为一道面试题

  一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。

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

  select id, Count(*) from tb group by id having count(*)>1

  select * from(select count(ID) as count from table group by ID)T where T.count>1

  SQL查询面试题与答案二

  1、查询不同老师所教不同课程平均分从高到低显示

  SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩

  FROM SC AS T,Course AS C ,Teacher AS Z

  where T.C#=C.C# and C.T#=Z.T#

  GROUP BY C.C#

  ORDER BY AVG(Score) DESC

  2、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)

  [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

  SELECT DISTINCT top 3

  SC.S# As 学生学号,

  Student.Sname AS 学生姓名 ,

  T1.score AS 企业管理,

  T2.score AS 马克思,

  T3.score AS UML,

  T4.score AS 数据库,

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

  FROM Student,SC LEFT JOIN SC AS T1

  ON SC.S# = T1.S# AND T1.C# = '001'

  LEFT JOIN SC AS T2

  ON SC.S# = T2.S# AND T2.C# = '002'

  LEFT JOIN SC AS T3

  ON SC.S# = T3.S# AND T3.C# = '003'

  LEFT JOIN SC AS T4

  ON SC.S# = T4.S# AND T4.C# = '004'

  WHERE student.S#=SC.S# and

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

  NOT IN

  (SELECT

  DISTINCT

  TOP 15 WITH TIES

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

  FROM sc

  LEFT JOIN sc AS T1

  ON sc.S# = T1.S# AND T1.C# = 'k1'

  LEFT JOIN sc AS T2

  ON sc.S# = T2.S# AND T2.C# = 'k2'

  LEFT JOIN sc AS T3

  ON sc.S# = T3.S# AND T3.C# = 'k3'

  LEFT JOIN sc AS T4

  ON sc.S# = T4.S# AND 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],[ <60]

  SELECT SC.C# as 课程ID, Cname as 课程名称

  ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

  ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

  ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

  ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

  FROM SC,Course

  where SC.C#=Course.C#

  GROUP BY SC.C#,Cname;

  4、查询学生平均成绩及其名次

  SELECT 1+(SELECT COUNT( distinct 平均成绩)

  FROM (SELECT S#,AVG(score) AS 平均成绩

  FROM SC

  GROUP BY S#

  ) AS T1

  WHERE 平均成绩 > T2.平均成绩) as 名次,

  S# as 学生学号,平均成绩

  FROM (SELECT S#,AVG(score) 平均成绩

  FROM SC

  GROUP BY S#

  ) AS T2

  ORDER BY 平均成绩 desc;

  5、查询各科成绩前三名的记录:(不考虑成绩并列情况)

  SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数

  FROM SC t1

  WHERE score IN (SELECT TOP 3 score

  FROM SC

  WHERE t1.C#= C#

  ORDER BY score DESC

  )

  ORDER BY t1.C#;

  6、查询每门课程被选修的学生数

  select c#,count(S#) from sc group by C#;

  7、查询出只选修了一门课程的全部学生的学号和姓名

  select SC.S#,Student.Sname,count(C#) AS 选课数

  from SC ,Student

  where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

  8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

  Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

  from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2

  9、查询所有课程成绩小于60分的同学的学号、姓名;

  select S#,Sname

  from Student

  where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

  10、查询没有学全所有课的同学的学号、姓名;

  select Student.S#,Student.Sname

  from Student,SC

  where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

  11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

  select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

  12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;

  select distinct SC.S#,Sname

  from Student,SC

  where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

  13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

  update SC set score=(select avg(SC_2.score)

  from SC SC_2

  where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');

  14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;

  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表记录;

  Delect SC

  from course ,Teacher

  where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';

  16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、

  号课的平均成绩;

  Insert SC select S#,'002',(Select avg(score)

  from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

  17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

  SELECT S# as 学生ID

  ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库

  ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理

  ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语

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

  FROM SC AS t

  GROUP BY S#

  ORDER BY avg(t.score)

  18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

  SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分

  FROM SC L ,SC AS R

  WHERE L.C# = R.C# and

  L.score = (SELECT MAX(IL.score)

  FROM SC AS IL,Student AS IM

  WHERE L.C# = IL.C# and IM.S#=IL.S#

  GROUP BY IL.C#)

  AND

  R.Score = (SELECT MIN(IR.score)

  FROM SC AS IR

  WHERE R.C# = IR.C#

  GROUP BY IR.C#

  );

  19、按各科平均成绩从低到高和及格率的百分数从高到低顺序

  SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩

  ,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数

  FROM SC T,Course

  where t.C#=course.C#

  GROUP BY t.C#

  ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

  20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)

  SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分

  ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数

  ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分

  ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数

  ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

  ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数

  ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分

  ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数

  FROM SC

;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
intel 英特尔 酷睿 i5-9400F CPU 2.9GHz 6核6线程-详细介绍 vivo手机越用网络越慢 怎么检测 二手苹果电脑交易注意买二手苹果笔记本电脑应注意什么 比如我买一个二手笔记本卖家笔记本预装正版win10的话把他账号注销登录我... 二手苹果笔记本怎么更改账户 军婚假期有多少天 金立e6mini开机出现el 甘肃基层卫生主要内容 甘肃基层医疗卫生系统怎么撤销处方 天津市选调生通过面试了不去会怎么样 长春大街1177号中信银行乘车路线 吉林长春中信银行在哪里 中信银行股份有限公司长春景阳大路支行怎么样? 九台去长春上哪个中信银行最近 狗狗吃什么可以多喝水 有什么办法平时可以让狗狗多喝水 怎么让狗狗多喝水? 橄榄油可以泡开水喝吗? &quot;双边贸易&quot;的定义是什么啊?? 手足口病高烧不退用冰块有用吗 手足口病疹子落下来了高烧一直不退怎么办 手足口病凌晨三点高烧不退怎么办 手足口病烧不退怎么办 孕产妇婴幼儿能吃山竹吗 山竹营养价值及功效与作用 吃山竹有什么功效和作用 哭声的声音词 想知道关于哭的词语 怎么才能让自媒体平台推送自己的内容 不由自主,放声大哭写成语 放声大哭,十分悲痛是什么成语 双人床被子尺寸对照表 双人床被子的选择注意事项 金神是犟的意思吗?今天去算卦说我命有金神,我问什么意思,他说是犟的意思。是真的吗是不是很不好啊? 八字中金神临身是什么意思 梦见房间有一对白鹅冤魂是什么意思? 食道癌手术前为什么要喝橄榄油 阅读短文《高尔其给儿子的信》 儿子写了一篇作文,写我玩手机,喝酒吸烟,老师让我给儿子回封信 我应该怎么回? 求一篇600字左右的作文,急急急急急急急急急!!!给高分! 写给丘吉尔的一封信 作文 下巴右侧下面有个小疙瘩,有点疼,嘴还起水泡了,怎么回事呀?? 多肉叶子掰下多久叶插 多肉植物怎么养?如果要换个大盆想种多一点,什么时候把它的叶子摘下来最合适? 多肉叶插的叶子什么时候可以拔下来 多肉哪个季节展开叶子 多肉叶子只掰掉一半也能叶插吗、掰的时候没掰好、只掰下来一大半? 六月份能掰多肉叶子吗 多肉叶插方法种水中吗 笨鸟先飞的成语是什么 笨鸟先飞是成语有哪些 多图片无刷新上传,php+ajax+jquery 谁有比较完整代码发我下,谢谢