快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

2.搞定sql面试题50题mysql版)

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

本文的标题是从一个绰号为\ lsquo的博客中转移过来的;金星准则–https://blog.csdn.net/fashion2014/article/details/78826299,并且各个主题可能会更加完整,欢迎纠正错误,谢谢!

表名称和字段
-构建表
-学生表
创建表`Student`(
s_id` VARCHAR(20),
` s_name`VARCHAR(20)NOT NULL DEFAULT””,
s_birth` VARCHAR(20)NOT NULL DEFAULT””,
`s_sex` VARCHAR(10)NOT NULL DEFAULT””,
主键(`s_id`)
);
-课程表
CREATE TABLE` Course`(
`c_id` VARCHAR(20),
c_name` VARCHAR(20)NOT NULL缺省””,
`t_id` VARCHAR(20)NOT NULL,
主键(`c_id`)
);
-教师表
创建表`Teacher`(
`t_id` VARCHAR(20),
`t_name` VARCHAR(20)NOT NULL DEFAULT””,
PRIMARY KEY(`t_id`)
);
-脚本
创建表`Score`(
s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT( 3),
主键(`s_id`,`c_id`)
);
–插入学生表测试数据
插入到学生值中(” 01″,”赵磊”,” 1990-01-01″,”男”);
在学生价值观中插入(” 02″,” Money”,” 1990-12-21″,” Male”);
在学生价值观中插入(” 03″,”孙峰”,” 1990-05-20″,”男”);
在学生价值观中插入(” 04″,” Li Yun”,” 1990-08-06″,” Male”);
在学生价值观中插入(“05”,” Zhou Mei”,” 1991-12-01″,” Female”);
插入到学生值中(“06″,” Wu Lan”,” 1992-03-01″,” Female”);
在学生价值观中插入(“07″,” Zheng Zhu”,” 1989-07-01″,” Female”);
在学生价值观中插入(“08″,” Wang Ju”,” 1990-01-20″,” Female”);
-课程表测试数据
插入到课程值中(” 01″,”中文”,” 02″);
在课程值中插入(” 02″,”数学”,” 01″);
在课程值中插入(” 03″,”英语”,” 03″);

-Teacher表测试数据
插入Teacher值中(“01”,” Zhang San”);
插入教师值(“02”,”李四”);
插入教师值(“03”,”王五”);

-测试报告测试数据
插入得分值(” 01″,” 01″,80);
插入分数值(“01”,” 02″,90);
插入分数值(“01”,” 03″,99);
插入分数值(“02”,” 01″,70);
在得分值中插入(” 02″,” 02″,60);
在得分值中插入(” 02″,” 03″,80);
插入得分值(” 03″,” 01″,80);
插入得分值(” 03″,” 02″,80);
插入分数值(“03”,” 03″,80);
在得分值中插入(” 04″,” 01″,50);
在得分值中插入(” 04″,” 02″,30);
在得分值中插入(” 04″,” 03″,20);
插入分数值(” 05″,” 01″,76);
插入分数值(“05”,” 02″,87);
在得分值中插入(” 06″,” 01″,31);
在得分值中插入(” 06″,” 03″,34);
在得分值中插入(” 07″,” 02″,89);
插入分数值(“07”,” 03″,98);

练习问题和sql语句选择c。 *, 一个。 s_score为01课程分数,b.s_score为02课程分数(分数a,分数b)
在b.s_id = c.s_id
上与学生c在一起,其中a.s_id = b.s_id和a。 c_id =” 01″和b.c_id =” 02″和a.s_score \ gt; b.s_score;

-2。查询” 01″课程成绩低于” 02″课程成绩的学生信息和课程分数
选择a。 *,来自学生a的B.s_score为01门课程,c.s_score为02门课程a.s_id = b.s_id上的连接分数b和b.c_id =” 01″
上的连接分数c b.s_id = c.s_id和c.c_id =” 02″
其中b.s_score \ lt; c.s_score;

-3.查询平均分数大于或等于60分的同学的学生人数,学生姓名和平均分数
选择a.s_id,a.s_name,舍入(avg (b.s_score),2)作为学生a的平均分数
a.s_id = b.s_id组的b.s_id加入分数b,其平均分数为\ gt; = 60;

-4。查询平均分数低于60分的学生的学生人数,学生姓名和平均分数
-(包括有和没有分数的学生)
选择b。 *,来自(b)学生b
的平均分数(平均分数(avg(a.s_score),2),以平均分数\ lt的a.s_id分组)在b.s_id = a.s_id组上的左联接得分a ; 60
union
选择b。 *,学生b的余额分数为0,其中b.s_id不在(从分数中选择s_id);

-5。查询所有同学的学生人数,学生姓名,所选课程总数以及所有课程的总成绩
选择a.s_id,a.s_name,计数(b.c_id)作为所选课程的总数,总和(b.s_score)作为学生a的总分数,在a.s_id = b.s_id分组的s_id上左连接分数b;

-6。查询”李”姓教师的人数
从” t_name”(如”李%”)的教师中选择计数(*)作为李姓教师的人数;

-7。查询曾教过”张三老师”的学生的信息
选择一个。 *从学生那里获得a.s_id = b.s_id的加入分数b,其中b.c_id入选(从课程c中选择c.c_id
在c.t_id = d.t_id上加入老师d,其中d.t_name =”张三”);

-8。询问尚未学习”张三”教学的学生的信息
选择a。 *来自学生的a.s_id = b.s_id上的左连接分数b,其中a.s_id不在
(从得分中选择s_id,其中c_id =
(从课程中选择c_id,其中t_id =
(从老师那里选择t_id,其中t_name =”张
三”)))以.s_id分组;

-9。查询已经学习过数字” 01″和” 02″的学生的信息。
从学生中选择* *,其中s_id在
中(从分数a中选择a.s_id)在a.s_id = b.s_id
上加入分数b,其中a.c_id =” 01″和b.c_id =” 02″);

-10。查询已学习课程编号为” 01″但未参加课程编号为” 02″的学生的信息。
从学生中选择* *,其中s_id在
中(从分数中选择s_id,其中c_id =” 01″)
s_id不在(从分数中选择s_id,其中c_id =” 02″);

-11。查询尚未学习所有课程的同学的信息
从*不在s_id中的学生中选择*(从得分组中选择s_id,按具有计数(c_id)= 3的s_id);

-12。查询至少一个与类别编号” 01″具有相同类别编号的类别的信息。 *从学生那里得到a.s_id = b.s_id的左连接分数b,其中
中的b.c_id(从s_id =” 01″的分数中选择c_id)和a.s_id! =” 01″;

-13。查询班级与” 01″班级相同的其他同学的信息。
从* s_id在
中的学生中选择*(从得分组中按计数(c_id)= (从s_id =” 01″的得分中选择计数(c_id))和s_id不在
(从c_id不在
的得分中选择s_id(从s_id =” 01″的得分中选择c_id) )和s_id!=” 01″);

-14。查询未学习过”张三”老师所教课程的学生姓名
从学生中选择s_id,其中s_id不在
中(从分数中选择s_id,其中c_id在
中(从c中选择c_id在
中的t_id所在的课程(从老师那里选择t_id,其中t_name =”张三”)));

-15。查询两个或两个以上课程不及格的学生的学生人数,姓名和平均成绩
从得分a
在a.s_id = b.s_id上左加入学生b,其中s_score \ lt; s_id具有计数的60个组(1) = 2;

-16。检索” 01″课程分数小于60的学生信息,按分数降序选择a。 *,b.c_id,学生a的b.s_score
a.s_id = b.s_id
上的左联接得分b,其中b.c_id =” 01″和b.s_score \ lt; 60
由b.s_score desc订购;

-17。根据从高到低的平均成绩显示所有学生的所有学生的成绩和平均成绩。
选择a.s_name,
sum(如果b.c_id =” 01″然后s_score否则为null结束)作为语言,
总和(当b.c_id =” 02″时s_score否则为null结束的情况)作为数学,
总和(当b.c_id =” 03″则s_score否则为null结束的情况)as英语,
回合(avg(s_score),2)作为平均分数
,来自学生a.s_id = b.s_id组的左加入分数b,按a.s_name
按平均分数排序描述

-18。查询各学科的最高分,最低分和平均分:以以下形式显示:课程编号,课程名称,最高分,最低分,平均分,及格率,中级,优秀率,优秀率
–通过\ = 60,中度:70-80,极好:80-90,极好:\\ u> = 90
选择b.c_id,b。 c_name,
max(a.s_score)为最高分,
min(a.s_score)为最低分,
70和a.s_score \\ u00 80,然后1其他0结束)/计数(s_id),2)作为中等速率,
回合(总和(a.s_score \ gt的情况) 80和a.s_score \\ ult 90,然后1 else 0结束)/计数(s_id),2)作为优良率,
舍入(总和(a.s_score \\ u = 26 = 90然后1) 0结束)/计数(s_id),2)作为优良率
,从a.c_id = b.c_id组中的a.c_id = a。

-19。按每个主题的分数排序并显示排名

第一个:
设置@pre_c_id:=” 01″;
设置@rank:= 0;
选择tb2.s_id,tb2.c_id,tb2.s_score,tb2。从
(选择*,(如果tb1.c_id=@pre_c_id然后@rank:= @ rank + 1 else @rank:= 1结尾)作为排名,
(当@ pre_c_id = tb1时的情况).c_id,然后@pre_c_id,否则@pre_c_id:= tb1.c_id结束),作为pre_c_id从

(从*得分顺序中选择*,按c_id,s_score desc排序)tb1)tb2;

如果您听不懂,请使用第二种方法:

选择a.c_id,a.s_id,a.s_score,COUNT(b.s_score)+1 AS排名
从a.s_score得分为LEFT JOIN得分b。 b.s_score AND a.c_id = b.c_id
GROUP BY a.c_id,a.s_id,a.s_score OR BY BY a.c_id,排名,a.s_id ASC

-20。查询学生的总成绩和等级
设置@rank:= 0;
选择*,(@等级:= @等级+ 1)作为
的等级(选择s_id,sum( s_score)作为得分
组的总得分,按s_id顺序按总得分desc)tb1;

-21。从高到低查询不同老师教授的不同课程的平均分数。
从得分a中选择a.c_id,d.t_name,舍入(avg(a.s_score))作为平均得分
在a.s_id = b.s_id上加入学生b,在左边加入课程a.c_id = c.c_id
上的课程c,按平均分数desc按.c_id
的顺序按c.t_id = d.t_id分组加入教师d。

-22。查询所有课程中第二至第三名的学生信息以及该课程的成绩
@pre_c_id:=” 01″;
设置@rank:= 0;

中选择b.s_name,tb2.s_id,tb2.c_id,tb2.s_score,tb2.rank(选择*,(如果tb1.c_id=@pre_c_id然后@rank:= @ rank + 1个其他@rank:= 1个结束)作为排名,
(当@ pre_c_id = tb1.c_id然后@pre_c_id其他@pre_c_id:= tb1.c_id结尾的情况)作为pre_c_id
from
(从c_id,s_score desc的得分顺序中选择*)tb1)tb2在tb2上加入学生b.s_id = b.s_id,其中等级= 2或等级= 3;
-23,计算每个分数中每个部分的人数:课程编号,课程名称,[100-85],(85-70),(70-60],(0-60)和百分比

选择b.c_id,b.c_name和
sum(当a.s_score \\ u = 26时为85,则1否则0结束)为`100-85`,
concat(四舍五入( 100 *总和(以a.s_score \ gt; = 85时为1,否则0结尾)/计数(*),2),”%”)以百分比表示,
总和(以a.s_score \为例) lt; 85和a。s_score \\ ugt; = 70,然后1否则0结束)为`85-70`,
concat(舍入(100 *和(当a.s_score \ lt; 85和a的情况).s_score \ gt; = 70然后1 else 0结束)/计数(*),2),”%”)以百分比表示,
总和(a.s_score \ lt; 70和a.s_score的情况\ gt; = 60,然后1个其他0结束)为`70-60`,
concat(舍入(100 *和(a.s_score \ lt; 70和a.s_score \ gt;的情况) 60,然后1个其他0末尾)/计数(*),2),”%”)以百分比表示,
总和(当a.s_score \\ ult26≤60而a.s_score \\ ugt26 = 0时的情况) 1 else 0 end)as ’60-0’,
concat(round(100 * sum(case of a.s_score \\ ult26; 60 and a.s_score \ gt; = 0 then 1
否则0结束)/计数(*),2), “%”)的百分比
a.c_id = b.c_id组的a.c_id =由b.c_id分组的左连接路线b;

-24。查询学生的平均分数和等级
选择tb1。 *,(@等级:= @等级+1)作为
的等级(选择s_id,取整(avg(s_score),2)作为得分
的平均得分,按s_id顺序按平均得分desc分组) tb1,(选择@rank:= 0)b;

-25。查询每个主题中的前三条记录
@pre_c_id:=” 01″;
设置@rank:= 0;
选择b.s_name,tb2.s_id,tb2.c_id,tb2.s_score,tb2。从
(选择*,(如果tb1.c_id=@pre_c_id然后@rank:= @ rank + 1 else @rank:= 1 end)作为排名,
(当@ pre_c_id = tb1时的情况).c_id然后@pre_c_id否则@pre_c_id:= tb1.c_id结束)作为pre_c_id

(从c_id,s_score desc的得分顺序中选择*)tb1)tb2在tb2.s_id = b上加入学生b.s_id,其中排名为\ lt; 4;

-26。查询为每个课程选择的学生人数
选择c_id,将(s_id)计数为按c_id从得分组中选修的人数;

-27。查询仅开设两门课程的所有学生的学生人数和姓名
从a.s_id = b.s_id组的左加入学生b得分中选择a.s_id,b.s_name,其s_id的计数为(*)= 2 ;

-28,查询男孩和女孩的数量
选择总和(男,情况为s_sex,然后以0结束,否则为1,0)作为男童的数目,
总和(女,情况为s_sex,当女性)然后是1,否则0结束)为学生的女生人数;

-29,查询名字包含” feng”的学生信息。
从* s_name如”%风%”的学生中选择*;

-30。查询同名学生的名单,并计算同名学生的人数

-忽略,不想写

-31,检查1990年出生的学生名单
从* s_birth的学生中选择” 1990%”;

-32。查询每门课程的平均分数。结果按平均等级的降序排列。如果平均成绩相同,则按照课程编号的升序排列。 c_id顺序,平均得分desc,c_id asc从得分组获得的得分;

-33。查询所有平均分数大于或等于85的学生的学生ID,姓名和平均分数
从分数a中选择a.s_id,b.s_name,舍入(avg(s_score),2)作为平均分数
a.s_id将a.s_id = b.s_id组中的学生b加入平均成绩为\的gt; = 85;

-34。查询课程名称为”数学”且分数小于60的学生的姓名和分数
从分数a中选择b.s_name和a.s_score。
在.s_id = b上加入学生b.s_id
其中a.c_id =(从课程中选择c_id,其中c_name =”数学”)和a.s_score \ lt; 60;

-35,查询所有学生
的课程和分数选择b.s_name,
sum(如果a.c_id =” 01″则a.s_score否则null结束)作为中文,
总和(当.c_id =” 02″时a.s_score否则为null结束)作为数学,
总和(当a.c_id =” 03″则a.s_score否则null end)作为英语
从分数中正确加入a.s_id = b.s_id分组的学生b,由b.s_name

-36。查询名称,课程名称和分数在70分以上的课程;
选择b.s_name,
sum(当a.c_id =” 01″时为a.s_score否则为null结束)作为语言,
sum(当a.c_id =” 02″时)然后将a.s_score否则为空头)作为数学,
求和(如果a.c_id =” 03″,则a.s_score否则为空头)作为英语
,从a上对一个学生b的正确得分中得分。 s_id = b.s_id按b.s_name分组,语言为\> = 70或数学= 70或英语\ gt; = 70;

-37,失败的课程
从分数a中选择a.s_id,a.c_id,b.c_name,a.s_score
在a.c_id = b上左加入课程b.c_id其中a.s_score \\ ult26; 60;

-38。查询课程号为01,课程分数在80分以上的学生的学生ID和姓名;
从a.s_id = b.s_id的左加入学生b得分中选择a.s_id,b.s_name,其中a.c_id =” 01″和a.s_score \ gt; = 80;

-39。找出每门课程的学生人数
选择c_id,将(*)作为分数的学生人数(按c_id);

-40。在”张三”老师选修课程的学生中,查询成绩最高的学生及其成绩的信息
选择a。 *,b.c_id,max(b.s_score)为学生a的最高结果
a.s_id = b.s_id
的右联接得分b,按b.c_id
具有b.c_id =(从课程
中选择c_id,其中t_id =(从教师中选择t_id,其中t_name =”张三”));

-41。查询不同课程中相同成绩的学生的学生编号,课程编号和学生分数
-(我不知道这个问题是什么意思,我的意思是查找单个学生我参加的所有课程的成绩都不同?或者是所有课程之间的比较,我更喜欢前者)

-理解为以前的写作
select * from
(从* s_id,s_score的得分组中选择*)tb1
s(id)= 1的s_id进行分组;

-了解后者的写作
从得分a中选择不同的a.s_id,a.c_id,b.s_score,得分b,其中a.c_id!= b.c_id和a.s_score = b。 ;

-42,查询每门课程的前两个最佳成绩
@pre_c_id:=” 01″;
设置@rank:= 0;

中选择tb2.s_id,tb2.c_id,tb2.s_score(选择*,(如果tb1.c_id=@pre_c_id则@rank:= @ rank + 1 else @rank:= 1 end )作为排名,
(当@ pre_c_id = tb1.c_id然后@pre_c_id否则@pre_c_id:= tb1.c_id结尾的情况)作为pre_c_id

(从得分排序中选择*,按c_id, s_score desc)tb1)tb2
在tb2.s_id = b.s_id上加入学生b,其中\ lt; 3;

\

-43。计算选择每门课程的学生人数(仅统计5名学生以上的课程)。需要输出课程号和选修课数。查询结果以人数的降序排列。如果人数相同,则按照课程编号的升序排列。用选号desc,c_id asc;

-44,检索至少两门课程的学生ID
通过具有计数(*)的s_id从得分组中选择s_id。 = 2;

-45。查询已修完所有课程的学生的信息

中s_id的学生中选择*(通过具有计数(*)= 3的s_id从分数组中选择s_id)

-46,查询t每个学生的年龄
选择s_name,(date_format(now(),”%Y”))-date_format(s_birth,”%Y”)+(Case when date_format(now(),”%m%d”) )\ gt; = date_format(s_birth,”%m%d”),然后为0,否则1结束))作为学生的年龄

-47,查询有生日的学生周
—(执行不完整,例如,因为出生日期是01-01,所以每年可能输入不同的周)。
选择*从学生,其中周(date_format(s_birth,”%m%d”))=周(date_format(now(),”%m%d”)));

-48。查询下周有生日的学生
从学生
中选择*其中周(date_format(s_birth,”%m%d”))=周(date_format(date_add(now(),间隔7-星期几(现在())+ 1天),”%m%d”)));

-49。查询本月有生日的学生
从学生中选择*,其中date_format(s_birth,”%m”)= date_format(now(),”%m”)

-50。查询下个月有生日的学生
从学生中选择*,其中date_format(s_birth,”%m”)= date_format(date_add(now(),间隔1个月),”%m”)

\\ udash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash; \ mdash;
版权声明:本文是CSDN博客主要” Felix.Yip”的原始文章遵循CC 4.0 BY-SA版权协议。如需转载,请附上原始来源链接和本声明。
原始链接:https://blog.csdn.net/weixin_42115021/article/details/85396405

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638