实验7 数据查询(2)

news2025/4/19 21:42:42

一、实验目的

  1. 学习SQL语言的定义、操纵功能
  2. 熟悉通过SQL语言对数据库进行查询操作,包括单表查询、多表查询、嵌套查询、集合查询

二、实验软件

	MySQL

三、实验内容和要求

给定四个关联表,其定义和数据加载如下:

学生表 Student

create table Student(Sid varchar(6), Sname varchar(10), Sdate datetime, Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1999-01-01' , '男');
insert into Student values('02' , '钱电' , '1999-12-21' , '男');
insert into Student values('03' , '孙风' , '1999-05-20' , '男');
insert into Student values('04' , '李云' , '1999-08-06' , '男');
insert into Student values('05' , '周梅' , '2000-12-01' , '女');
insert into Student values('06' , '吴兰' , '2001-03-01' , '女');
insert into Student values('07' , '郑竹' , '1998-07-01' , '女');
insert into Student values('08' , '王菊' , '1999-01-20' , '女');

选课表 SC

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

课程表 Course

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

教师表 Teacher

create table Teacher(Tid varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');

四张表之间的关联很简单:
在这里插入图片描述

试按以下操作要求完成SQL语言设计。

  1. 查询" 01 “课程比” 02 “课程成绩高的学生的信息及对应” 01 “和” 02 "课程分数。要求输出结构如下图所示:
    在这里插入图片描述
SELECT s.Sid, s.Sname, s.Sdate,s.Ssex,sc1.score AS score_01, sc2.score AS score_02
FROM Student s
JOIN SC sc1 ON s.Sid = sc1.Sid AND sc1.Cid = '01'
JOIN SC sc2 ON s.Sid = sc2.Sid AND sc2.Cid = '02'
WHERE sc1.score > sc2.score;
  1. 查询平均成绩大于等于 60 分的学生信息,输出其编号Sid、姓名Sname和平均成绩Avg_score三列内容。
SELECT s.Sid, s.Sname, AVG(sc.score) AS Avg_score
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid, s.Sname
HAVING AVG(sc.score) >= 60;

3.查询在 SC 表存在成绩的学生信息,输出Sid、Sname、Sdate和Ssex四列内容。

SELECT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid;
  1. 查询Student表中所有同学的学生编号Sid、学生姓名Sname和对应选课总数、所有课程的总成绩(没成绩的显示为 null )。要求输出结构如下图所示:
    在这里插入图片描述
SELECT s.Sid, s.Sname, COUNT(sc.Cid) AS '选课总数', SUM(sc.score) AS '总成绩'
FROM Student s
LEFT JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid, s.Sname;
  1. 查询「李」姓老师的数量。
SELECT COUNT(*) FROM Teacher t WHERE t.Tname LIKE '李%';

6.查询学过「张三」老师授课的学生信息,输出其Sid、Sname、Sdate和Ssex四列内容。

SELECT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
JOIN Course c ON sc.Cid = c.Cid
JOIN Teacher t ON c.Tid = t.Tid
WHERE t.Tname = '张三';

7.查询选课表SC内没有选修课程表Course里所列所有课程的学生信息,输出其Sid、Sname、Sdate和Ssex四列内容。

SELECT S.Sid, S.Sname, S.Sdate, S.Ssex
FROM Student S
WHERE S.Sid NOT IN (
    SELECT DISTINCT SC.Sid
    FROM SC
    WHERE SC.Cid NOT IN (
        SELECT C.Cid
        FROM Course C
    )
);

8.查询和" 01 "号学生学习的课程完全相同的其他学生信息,输出其学号Sid内容。

WITH CourseList_01 AS (
    SELECT Cid FROM SC WHERE Sid = '01'
)
SELECT DISTINCT s2.Sid
FROM Student s2
JOIN SC sc2 ON s2.Sid = sc2.Sid
WHERE sc2.Cid IN (SELECT Cid FROM CourseList_01)
GROUP BY s2.Sid
HAVING COUNT(DISTINCT sc2.Cid) = (SELECT COUNT(*) FROM CourseList_01)
AND s2.Sid != '01';

9.查询至少有一门课与学号为" 01 "的同学所学相同的学生信息,输出其Sid、Sname、Sdate和Ssex四列内容。

SELECT DISTINCT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
WHERE EXISTS (
    SELECT 1 
    FROM SC sc_ref
    WHERE sc_ref.Sid = '01' AND sc_ref.Cid = sc.Cid
)
AND s.Sid != '01';

10.查询没学过"张三"老师讲授的任一门课程的学生姓名。

SELECT s.Sname
FROM Student s
WHERE s.Sid NOT IN (
    SELECT sc.Sid
    FROM SC sc
    JOIN Course c ON sc.Cid = c.Cid
    JOIN Teacher t ON c.Tid = t.Tid
    WHERE t.Tname = '张三'
);

11.检索" 01 "课程分数小于 60并按分数降序排列的学生信息,输出其Sid、Sname、Sdate和Ssex四列内容。

SELECT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
WHERE sc.Cid = '01' AND sc.score < 60
ORDER BY sc.score DESC;
  1. 按平均成绩从高到低显示学生的课程成绩以及平均成绩。要求输出结构如下图所示:
    在这里插入图片描述
SELECT 
    s.Sid,
    MAX(CASE WHEN sc.Cid = '01' THEN sc.score ELSE NULL END) AS score_01,
    MAX(CASE WHEN sc.Cid = '02' THEN sc.score ELSE NULL END) AS score_02,
    MAX(CASE WHEN sc.Cid = '03' THEN sc.score ELSE NULL END) AS score_03,
    AVG(sc.score) AS 'avg(score)'
FROM 
    Student s
JOIN 
    SC sc ON s.Sid = sc.Sid
GROUP BY 
    s.Sid
HAVING 
    COUNT(sc.Cid) > 0  
ORDER BY 
    AVG(sc.score) DESC;

13.查询出只选修两门课程的学生学号和姓名两列信息

SELECT s.Sid, s.Sname
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid, s.Sname
HAVING COUNT(DISTINCT sc.Cid) = 2;

14.查询本月过生日的学生信息,输出其Sid、Sname、Sdate和Ssex四列内容。

SELECT Sid, Sname, Sdate, Ssex
FROM Student
WHERE MONTH(Sdate) = MONTH(CURRENT_DATE()) AND YEAR(Sdate) = YEAR(CURRENT_DATE());

四、实验出现的问题及解决方案

  1. 执行时间过长,尤其是涉及到大量数据的查询。
    —— 尽量避免全表扫描,使用更精确的筛选条件。

  2. 在尝试进行一些复杂集合查询时,如查询选修了某一特定组合课程的学生,发现直接用SQL实现逻辑较为复杂且效率低下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1917690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【信创国产化】Nacos 2.3.2连接达梦数据库

JeecgBoot 目前提供的nacos版本号 2.3.2已经支持与达梦数据库对接。 jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos项目默认加入了达梦驱动和yml配置。如果你是老代码&#xff0c;可以参考下面的步骤手工集成 项目地址&#xff1a;https://github.com/jeecgboot/JeecgBoot…

【文科类cpci/cnki会议,主题广泛】第九届现代管理、教育与社会科学国际学术会议(MMET2024)

会议信息 点击跳转会议官网&#xff08;更多会议信息可添加会议官网下方负责老师-杨老师&#xff09; 大会时间&#xff1a;2024年09月20-22日 大会地点&#xff1a;中国-厦门 提交检索&#xff1a;CPCI&#xff0c;CNKI (知网检索快速稳定) 点击一键投稿 点击一键参会&a…

各向异性含水层中地下水三维流基本微分方程的推导(二)

各向异性含水层中地下水三维流基本微分方程的推导 参考文献&#xff1a; [1] 刘欣怡,付小莉.论连续性方程的推导及几种形式转换的方法[J].力学与实践,2023,45(02):469-474. 书接上回&#xff1a; 我们能得到三个方向的流入流出平衡方程&#xff1a; ∂ ρ u x ∂ x d x d y d…

入门PHP就来我这(高级)22 ~ 七天免登录案例

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 上文讲述了cookie的概念&#xff0c;创建&#xff0c;获取&#xff0c;销毁以及生命周期后&am…

java设计模式(十五)命令模式(Command Pattern)

1、模式介绍&#xff1a; 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;其主要目的是将请求封装成一个对象&#xff0c;从而允许使用不同的请求、队列或者日志来参数化其他对象。这种模式使得命令的请求者和实现者解耦。 2、应用场景&…

王道计算机数据结构+插入排序、冒泡排序、希尔排序、快速排序、简单选择排序

本内容是基于王道计算机数据结构的插入排序、冒泡排序、希尔排序、快速排序、简单选择排序整理。 文章目录 插入排序算法性能代码 冒泡排序算法性能代码 希尔排序算法性能代码 快速排序算法性能代码 简单选择排序算法性能代码 插入排序 算法 算法思想&#xff1a;每次将一个…

谷歌报告显示:2023 年 50% 的0day漏洞利用背后都是间谍软件供应商

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 导 读 谷歌威胁分析小组 (TAG) 和谷歌子公司 Mandiant 表示&#xff0c;他们观察到 2023 年攻击中利用的0day漏洞…

骑行耳机有哪些品牌值得入手?盘点5大品质与口碑兼顾的耳机推荐!

骨传导耳机凭借卓越的骑行兼容性&#xff0c;赢得了众多骑行爱好者的青睐&#xff0c;然而&#xff0c;关于骨传导耳机导致佩戴不适或影响骑行安全的反馈却屡见不鲜。这一看似矛盾的现象&#xff0c;实则源于市场被众多非专业骨传导耳机品牌充斥&#xff0c;尤其是一些标榜专为…

LLMs可以进行任务规划吗?如果不行,LLMs+GNN可以吗?

深度图学习与大模型LLM(小编): 大家好,今天向大家介绍一篇最新发布的研究论文&#xff08;20240530&#xff09;。这篇论文探讨了如何通过引入GNN来提高大模型在任务规划(task planning)中的性能。*论文分析了LLMs在任务规划上的局限性,并提出了一种简单而有效的解决方案。* 1.…

【面试题】防火墙的部署模式有哪些?

防火墙的部署模式多种多样&#xff0c;每种模式都有其特定的应用场景和优缺点。以下是防火墙的主要部署模式&#xff1a; 一、按工作模式分类 路由模式 定义&#xff1a;当防火墙位于内部网络和外部网络之间时&#xff0c;需要将防火墙与内部网络、外部网络以及DMZ&#xff0…

昇思学习打卡-17-热门LLM及其他AI应用/基于MobileNetv2的垃圾分类

文章目录 网络介绍读取数据集训练训练策略模型保存损失函数优化器模型训练 网络介绍 MobileNetv2专注于移动端、嵌入式或IoT设备的轻量级CNN网络。MobileNet网络使用深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;的思想在准确率小幅度降低的前提下&…

九.核心动画 - 显式动画

引言 本篇博客紧接着上一篇的隐式动画开始介绍显式动画。隐式动画是创建动态页面的一种简单的直接的方式&#xff0c;也是UIKit的动画机制基础。但是它并不能涵盖所有的动画类型。 显式动画 接下来我们就来研究另外一种动画显式动画&#xff0c;它能够对一些属性做指定的动画…

北斗GPS天线使用技巧与性能对比

北斗GPS天线使用中注意的问题 多系统兼容性&#xff1a;确保天线不仅能接收北斗信号&#xff0c;还能同时接收其他GNSS系统&#xff08;如GPS、GLONASS、Galileo&#xff09;的信号&#xff0c;以提高定位精度和可靠性。 信号频率选择&#xff1a;根据应用需求选择合适的信号…

【RHCE】实验(HTTP,DNS,SELinux,firewalld的运用)

一、题目 二、主服务器配置 1.下载HTTP服务&#xff0c;DNS服务 [rootlocalhost ~]# yum install -y httpd bind 2.开启防火墙&#xff0c;放行服务 # 开启防火墙 [rootlocalhost ~]# systemctl start firewalld # 放行服务 [rootlocalhost ~]# firewall-cmd --add-service…

【linux服务器】大语言模型实战教程:LLMS大模型快速部署到个人服务器

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 说到大语言模型相信大家都不会陌生&#xff0c;大型语言模型(LLMs)是人工智能文本处理的主要类型,也现在最流行的人工智能…

市场趋势的智能预测:Kompas.ai如何洞察未来市场动向

在商业领域&#xff0c;市场趋势预测是企业制定战略规划和做出明智决策的关键。准确把握市场动向能够帮助企业及时调整战略&#xff0c;抓住机遇&#xff0c;规避风险。Kompas.ai&#xff0c;一款先进的人工智能市场分析工具&#xff0c;正通过其深度学习和数据分析能力&#x…

漏洞中有三分之一具有严重且高风险

首发公众号网络研究观&#xff0c;微信搜索关注每日获取更多内容。 在大多数项目中&#xff0c;发现了低复杂度&#xff08;38%&#xff09;和中等复杂度&#xff08;50%&#xff09;的攻击向量&#xff0c;即使是低技能的黑客也可以执行这些攻击向量。 Positive Technologie…

变量和常量(局部变量和全局变量)

常变的值叫变量&#xff0c;不变的值叫常量 变量分为局部变量和全局变量 在同一范围内&#xff0c;变量只能定义一次&#xff0c;否则就会报错 全部变量和局部变量是可以同时存在的&#xff0c;不过使用的时候是局部优先 变量如果你不给他初始化&#xff0c;那么他放得就是一…

ICC2:如何检查input floating

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 input floating分为两种情况&#xff1a; input没接net的情况: get_flat_pins -f "direction &#xff1d;&#xff1d;in && undefined(net)" input接net…

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

解决fidder小黑怪倒出JMeter文件缺失域名、请求头 1、目录结构&#xff1a; 2、代码 coding:utf-8 Software:PyCharm Time:2024/7/10 14:02 Author:Dr.zxyimport zipfile import os import xml.etree.ElementTree as ET import re#定义信息头 headers_to_extract [Host, Conn…