当前位置: 首页 > news >正文

MySQL 数据库练习题记录01

文章目录

  • 前言
  • 一、数据库练习题一
    • 1.1 表结构
    • 1.2 查询所有学生的信息(学号,姓名,性别,班级名称)
    • 1.3 查询所有人(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数,数学分数)
    • 1.4 查询语文分数比张三高的学生(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数)
    • 1.5 查询各科成绩都合格(分数 >= 60)的学生(包括没有成绩的学生)的课程分数(学号,姓名,语文分数,数学分数)
    • 1.6 查询所有班级的人数(若没有人,人数显示为0)
    • 1.7 查询班级人数 >= 2的班级(班级编号,班级名称,人数)
  • 二、数据库练习题二
    • 2.1 表结构
    • 2.2 查询课程1的成绩比课程2的成绩高的所有学生的信息
    • 2.3 查询平均成绩大于60分的同学的学号和平均成绩
    • 2.4 查询学过李四老师所教所有课程的所有同学的学号,姓名
    • 2.5 查询姓李的老师的个数
    • 2.6 查询每门课程的选修人数(课程名称,学生数量)--存在没有人选的课程
    • 2.7 删除“1002”同学的“1"课程的成绩
    • 2.8 查询选修人数最多的课程 (课程id,课程名称,学生数量)

前言

本文主要记录B站视频链接的 MySQL 数据库练习题,这个老师讲课通俗易懂。

一、数据库练习题一

1.1 表结构

班级表 class:

在这里插入图片描述
学生表 student:

在这里插入图片描述
成绩表 score:

在这里插入图片描述
场景限制:

1.一个班级有多名学生,一名学生只属于一个班级
2.学生有可能没有成绩

1.2 查询所有学生的信息(学号,姓名,性别,班级名称)

SQL 语句:

#查询的字段来自学生表student 和 班级表class这两表通过student的class_id相连接。
SELECT stu_no,stu_name,stu_gender,class_name
FROM student stu
JOIN class cla
ON stu.class_id = cla.id

运行结果:

在这里插入图片描述

1.3 查询所有人(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数,数学分数)

本题中需要学生数据和成绩数据进行外连接查询,学生数据和班级数据需要进行内连接查询。sql逻辑:查询所有的学生分数,学生数据为主,每个学生都有唯一对应的班级数据,实现如下:
1.查询出所有学生的信息以及班级信息 – join 此时产生中间表,即执行一次查询。
2.拿上次的查询结果与score表进行外连接 --left/right join 又执行了一次查询

标准多表联查:
select...from A join B join C on xx = xx and xx = xx  执行一次查询(效率高,不会产生中间表)
select...from A join B on xx = xx join C on xx = xx 执行了两次查询(效率低,产生中间表)

SQL 语句:

SELECT stu_no,stu_name,stu_gender,class_name,sco.chinese,sco.math
FROM student stu
JOIN class cla
ON stu.class_id = cla.id
LEFT JOIN score sco
ON stu.id = sco.stu_id;

运行结果:

在这里插入图片描述

1.4 查询语文分数比张三高的学生(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数)

SQL 语句:

SELECT stu_no,stu_name,stu_gender,class_name,chinese
FROM student stu
JOIN class cla
JOIN score sco
ON stu.class_id = cla.id
AND stu.id = sco.stu_id
WHERE chinese > (SELECT chinese FROM student s JOIN score sc ON s.id = sc.stu_id WHERE stu_name = '张三');

运行结果:

在这里插入图片描述

1.5 查询各科成绩都合格(分数 >= 60)的学生(包括没有成绩的学生)的课程分数(学号,姓名,语文分数,数学分数)

SQL 语句:

SELECT stu_no,stu_name,chinese,math 
FROM student s
JOIN score sc
ON s.id = sc.stu_id
WHERE chinese >= 60 AND math >= 60;

运行结果:

在这里插入图片描述

1.6 查询所有班级的人数(若没有人,人数显示为0)

SQL 语句:

SELECT c.id,class_name,COUNT(stu_no) 
FROM class c 
LEFT JOIN student s 
ON c.id = s.class_id  
GROUP BY c.id

运行结果:

在这里插入图片描述

1.7 查询班级人数 >= 2的班级(班级编号,班级名称,人数)

SQL 语句:

SELECT class_id,class_name,COUNT(stu_no) num 
FROM student s 
JOIN class c 
ON s.class_id = c.id 
GROUP BY class_id
HAVING num >= 2;

运行结果:

在这里插入图片描述

二、数据库练习题二

2.1 表结构

课程表 course:
在这里插入图片描述
学生表 student:
在这里插入图片描述
成绩表 score:
在这里插入图片描述
教师表 teacher
在这里插入图片描述

2.2 查询课程1的成绩比课程2的成绩高的所有学生的信息

2.3 查询平均成绩大于60分的同学的学号和平均成绩

SQL 语句:

SELECT s_no,AVG(score) avg_score 
FROM score 
GROUP BY s_no 
HAVING avg_score > 60;

2.4 查询学过李四老师所教所有课程的所有同学的学号,姓名

2.5 查询姓李的老师的个数

2.6 查询每门课程的选修人数(课程名称,学生数量)–存在没有人选的课程

2.7 删除“1002”同学的“1"课程的成绩

2.8 查询选修人数最多的课程 (课程id,课程名称,学生数量)

相关文章:

  • 142.环形链表II
  • java短网址平台
  • 【论文阅读】《知识图谱研究综述》;Knowledge Graph:概念及主要应用,主要特征、构建的主要技术、未来研究方向。
  • 通过Django发送邮件
  • 【数组】leetcode27.移除元素(C/C++/Java/Js)
  • Java命令行程序实战:javac编译,jar命令,jar包
  • 七种分布式系统的解决方案,一次性讲给你听!
  • 最长公共子序列
  • 异步通信技术AJAX | 基于JSON、XML的数据交换
  • 实战:一个脚本实现统计linux进程相关的信息
  • 免费开源的箱包制造行业ERP管理系统介绍
  • 【SpringBoot+Redis】实现多端登录+token自动续期和定期刷新+自定义注解和拦截器实现鉴权(角色和权限校验)
  • 跟着pink老师学JS的第三天总结
  • 嵌入式:ARM 汇编控制伪操作
  • 写给Java程序员的GRPC入门系列(3)
  • Python常用函数笔记汇总2
  • AI小组2022总结
  • 【jrebel and xrebel问题记录】激活时出现LS client not configued
  • css中动画之transition
  • QT学习 控件(一):按钮类
  • 杜前任宁波中院代理院长,卸任宁波海事法院院长
  • 跨海论汉|专访白馥兰:对中国农业史的兴趣,从翻译《齐民要术》开始
  • 伊朗南部港口火势蔓延,部分集装箱再次发生爆炸
  • 第一集丨《无尽的尽头》值得关注,《榜上佳婿》平平无奇
  • 体坛联播|巴萨“三杀”皇马夺国王杯,陈妤颉破亚洲少年纪录
  • 俄总统助理:普京与美特使讨论了恢复俄乌直接谈判的可能性