经典SQL50题(11~20)

创建表SQL

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);

表结构

学生表 Student
sid 学生编号 sname 学生姓名 sage 出生年月 ssex 学生性别
课程表 Course
cid 课程编号 cname 课程名称 tid 教师编号
教师表 Teacher
tid 教师编号 tname 教师姓名
成绩表 SC
sic 学生编号 cid 课程编号 score 分数

11~20题

-- 11、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;
SELECT Student.sid,Student.sname
FROM Student
WHERE Student.sid in(
SELECT SC.sid
FROM SC
WHERE SC.cid in(
SELECT SC.cid
FROM SC
WHERE SC.sid='01'
)
AND SC.sid !='01'
)

-- 12、查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名
SELECT Student.sid,Student.sname
FROM Student
WHERE Student.sid in(
SELECT t2.sid
FROM (
SELECT SC.cid
FROM SC
WHERE
SC.sid='01'
) t1 INNER JOIN (SELECT SC.sid,SC.cid FROM SC WHERE SC.sid!='01') t2 on t1.cid=t2.cid
GROUP BY t2.sid
HAVING COUNT(t2.cid)=(SELECT COUNT(DISTINCT SC.cid) FROM SC WHERE SC.sid='01')
)

-- 13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;
-- update跳过

-- 14、查询没学过"张三"老师讲授的任一门课程的学生姓名
SELECT Student.sname
FROM Student 
WHERE Student.sid NOT in(
SELECT SC.sid
FROM SC
INNER JOIN Course ON SC.cid=Course.cid
INNER JOIN Teacher ON Course.tid=Teacher.tid
WHERE
Teacher.tname='张三'
)

-- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
SELECT Student.sid,Student.sname,t.avg
FROM Student
INNER JOIN (
SELECT SC.sid,AVG(SC.score) AS avg
FROM SC
WHERE SC.sid in(
SELECT SC.sid
FROM SC
WHERE SC.score<60
GROUP BY SC.sid
HAVING COUNT(*)>=2
)
GROUP BY SC.sid
) AS t ON Student.sid=t.sid

-- 16、检索"01"课程分数小于60,按分数降序排列的学生信息
SELECT Student.*,SC.score
FROM Student
INNER JOIN SC ON Student.sid=SC.sid
WHERE
SC.cid='01'
AND
SC.score<60
ORDER BY SC.score DESC

-- 17、按平均成绩从高到低显示所有学生的平均成绩
SELECT Student.sid,Student.sname,t.avg
FROM Student
LEFT JOIN (
SELECT SC.sid,AVG(SC.score) AS avg
FROM SC
GROUP BY SC.sid
) AS t ON Student.sid=t.sid
ORDER BY t.avg DESC

-- 18、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率
SELECT Course.cid,Course.cname,t.max,t.min,t.avg,t.rate
FROM Course
INNER JOIN (
SELECT 
SC.cid,MAX(SC.score) AS max,
MIN(SC.score) AS min,
AVG(SC.score) AS avg,
100*SUM(CASE WHEN IFNULL(SC.score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS rate
FROM SC
GROUP BY SC.cid
) AS t ON Course.cid=t.cid

-- 19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT Course.cid,Course.cname,t.avg,t.rate
FROM Course
INNER JOIN (
SELECT 
SC.cid,
AVG(SC.score) AS avg,
100*SUM(CASE WHEN IFNULL(SC.score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS rate
FROM SC
GROUP BY SC.cid
) AS t ON Course.cid=t.cid
ORDER BY t.avg ASC,t.rate desc

-- 20、查询学生的总成绩并进行排名
SELECT Student.sid,Student.sname,t.total
FROM Student
LEFT JOIN (
SELECT SC.sid,SUM(SC.score) AS total
FROM SC 
GROUP BY SC.sid
) AS t ON Student.sid=t.sid
ORDER BY t.total DESC
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
use test/*一个项目涉及到的50Sql语句问及描述:--1.学生表Student(S#,Sname,Sage,Ssex) --S# 学生编,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C#,Cname,T#) --C# --课程编,Cname 课程名称,T# 教师--3.教师表 Teacher(T#,Tname) --T# 教师,Tname 教师姓名--4.成绩表 SC(S#,C#,score) --S# 学生编,C# 课程编,score 分数select * from Studentselect * from Courseselect * from Teacherselect * from SC*/--创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')insert into Student values('04' , N'李云' , '1990-08-06' , N'男')insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10))insert into Course values('01' , N'语文' , '02')insert into Course values('02' , N'数学' , '01')insert into Course values('03' , N'英语' , '03')create table Teacher(T# varchar(10),Tname nvarchar(10))insert into Teacher values('01' , N'张三')insert into Teacher values('02' , N'李四')insert into Teacher values('03' , N'王五')create table SC(S# varchar(10),C# 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' ,
【MySQL20经典面试 I 1 MySQL的复制原理以及流程 1 2 MySQLMyISAM与InnoDB的区别,至少5点 1 2.1 MyISAM与InnoDB的5个不同点; 1 2.2 InnoDB引擎的4大特性 1 2.3 两者select count(*)哪个更快,为什么? 2 3 MySQLvarchar与char的区别以及varchar(50)50代表的涵义 2 3.1 varchar与char的区别 2 3.2 varchar(50)50的涵义 2 3.3 int(2020的涵义 2 3.4 MySQL为什么这么设计? 2 4 问了InnoDB的事务与日志的实现方式 2 4.1 有多少种日志? 2 4.2 事物的4种隔离级别? 3 4.3 事务是如何通过日志来实现的,说得越深入越好? 3 5 MySQL binlog的几种日志录入格式以及区别? 3 5.1 Statement 4 5.1.1 优点 4 5.1.2 缺点 4 5.2 Row 4 5.2.1 优点 5 5.2.2 缺点 5 5.3 Mixedlevel: 5 6 MySQL数据库cpu飙升到500%的话怎么处理? 5 7 sql优化 6 7.1 explain出来的各种item的意义; 6 7.2 profile的意义以及使用场景; 6 8 备份计划,MySQLdump以及xtranbackup的实现原理 6 8.1 备份计划; 6 8.2 备份恢复时间; 7 8.3 xtrabackup实现原理 7 9 MySQLdump备份出来的sql,如果我想sql文件,一行只有一个insert....value()的话,怎么办?如果备份需要带上master的复制点信息怎么办? 7 10 500台db,在最快时间之内重启 8 11 InnoDB的读写参数优化 8 12 你是如何监控你们的数据库的?你们的慢日志都是怎么查询的? 9 13 你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做? 9 14 你们数据库是否支持emoji表情,如果不支持,如何操作? 9 15 你是如何维护数据库的数据字典的? 10 16 你们是否有开发规范,如果有,如何执行的 10 17 表有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问 10 18 MySQLInnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的? 10 19 如何从MySQL dump产生的全库备份只恢复某一个库、某一张表? 11 20 开放性问:据说是腾讯的 11

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值