欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL笔试经典50题及答案解析(题目31-40)

程序员文章站 2024-03-15 18:15:18
...

前言
最近博主在准备数据分析岗位的笔试和面试,其中的考察重点就是SQL。听说练了这50道题目,什么现场手撕SQL统统都不怕,我就赶紧来练习了!壮士们,练完以后就什么都不怕啦~

环境:
Navicat Premium 12

说明:
本篇练习的是题目31-40,其中部分题目缺失。剩下的这几道题,真的都很简单,对新手不要太友好~

创建表

表说明

本次创建的表有四张:

  • 学生表(student): 包含 学生号,学生姓名,出生年月,性别 四个字段
  • 教师表(teacher): 包含教师号,教师姓名 两个字段
  • 成绩表(sc): 包含学生号,课程号,成绩 三个字段
  • 课程表(course): 包含课程号,课程名,教师号 三个字段

表创建

# 创建学生表
create table Student(sid varchar(10),sname varchar(10),sage datetime,ssex nvarchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');

# 创建课程表
create table Course(cid varchar(10),cname varchar(10),tid varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');


# 创建教师表
create table Teacher(tid varchar(10),tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');


# 创建成绩表
create table SC(sid varchar(10),cid varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);

表显示

学生表如下:
SQL笔试经典50题及答案解析(题目31-40)
教师表如下:
SQL笔试经典50题及答案解析(题目31-40)
成绩表如下:
SQL笔试经典50题及答案解析(题目31-40)
课程表如下:
SQL笔试经典50题及答案解析(题目31-40)

题目

题目31

查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime)

SELECT *
FROM student
WHERE YEAR(sage)='1990'

运行结果
SQL笔试经典50题及答案解析(题目31-40)

题目32

查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

SELECT cid,AVG(score) AS avg_score
FROM sc
GROUP BY cid
ORDER BY avg_score,cid DESC

运行结果
SQL笔试经典50题及答案解析(题目31-40)

题目37(有问题)

查询不及格的课程,并按课程号从大到小排列

# 感觉题目有问题,此处定义:存在不及格分数的课程,就是不及格的课程
SELECT cid,sid,score
FROM sc
WHERE score<60
ORDER BY cid DESC

运行结果
SQL笔试经典50题及答案解析(题目31-40)

题目38

查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;

SELECT sc.sid,sname
FROM sc
LEFT JOIN student AS s
ON sc.sid = s.sid
WHERE cid ='01' AND score > 60

运行结果
SQL笔试经典50题及答案解析(题目31-40)

题目40

查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩

# 不太严谨,没考虑最高分存在并列的可能
SELECT sc.sid,s.sname,MAX(score) AS max_score
FROM sc
LEFT JOIN student AS s ON sc.sid = s.sid
LEFT JOIN course AS c ON sc.cid = c.cid
LEFT JOIN teacher AS t ON c.tid = t.tid
WHERE tname = '张三'

运行结果
SQL笔试经典50题及答案解析(题目31-40)

相关标签: SQL