数据库MySQL查询设计||给定四个关联表,其定义和数据加载如下:-- 学生表 Student-- 选课表 SC

news2024/9/8 23:46:51

SQL查询设计

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

-- 学生表 Student

create table Student(Sno 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(Sno varchar(10), Cno 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(Cno varchar(10),Cname varchar(10),Tno varchar(10));

insert into Course values('01' , '语文' , '02');

insert into Course values('02' , '数学' , '01');

insert into Course values('03' , '英语' , '03');

-- 教师表 Teacher

create table Teacher(Tno varchar(10),Tname varchar(10));

insert into Teacher values('01' , '张三');

insert into Teacher values('02' , '李四');

insert into Teacher values('03' , '王五');

insert into Teacher values('04' , '张小五');

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

  • 1.查询「张」姓老师的数量

select tname,count(tno)as '数量' from teacher group by tno having tname like'%张%';

SELECT COUNT(1) AS counts FROM Teacher WHERE TName LIKE '%张%';

  • 2.查询平均成绩大于等于 80 分的学生信息,输出其编号Sno、姓名Sname和平均成绩Avg_score三列内容。

SELECT t1.Sno,t1.Sname,t2.Avg_score

FROM Student AS t1

INNER JOIN (SELECT Sno,AVG(score) AS Avg_score FROM SC GROUP BY Sno

HAVING AVG(score)>=80) AS t2 ON t1.Sno=t2.Sno

  • 3.查询Student表中所有同学的学生编号Sno、学生姓名Sname和对应选课总数、所有课程的总成绩(没有成绩的显示为 null )

SELECT t1.Sno,t1.Sname,COUNT(t2.Cno) AS CountCno,SUM(t2.score) AS score

FROM Student AS t1

LEFT JOIN SC AS t2 ON t1.Sno=t2.Sno

GROUP BY t1.Sno,t1.Sname

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

SELECT t3.*,t4.*

FROM (

SELECT t1.Sno,t1.Sname,t1.Sdate,t1.Ssex,t2.Cno,t2.Cname

FROM Student AS t1

LEFT JOIN Course AS t2 ON 1=1

) AS t3

LEFT JOIN SC AS t4 ON t3.Sno=t4.Sno AND t3.Cno=t4.Cno

WHERE t4.Sno IS NULL

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

select sc.Sno from sc as sc

where Sno in

(select distinct sc.Sno from sc

where Sno<>'01'

and Cno in(select distinct Cno from sc where Sno='01')

group by Sno

having

count(1)=(select count(1) from sc where Sno='01'))

group by Sno

having count(1)=(select count(sc.Sno) from sc as sc where sc.Sno='01')

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

    SELECT t1.Sno,t1.Sname
    
    FROM Student AS t1
    
    LEFT JOIN (
    
    SELECT DISTINCT Sno FROM SC WHERE Cno NOT IN (SELECT Cno FROM Course WHERE Tno IN (SELECT Tno FROM Teacher WHERE Tname='张三'))
    
    ) AS t2 ON t1.Sno=t2.Sno
  • 7.编程

  • 向Course中添加新课(课号和课名)时,第三个Tno教师号字段值自动填入对应SC表中按教师分类成绩平均分最高的教师编号。
  • 请测试追加新课程“04,数据库”的效果。(切记:测试操作请放在最后进行!!!)
  • create trigger trigg
    on Course
    after insert
    as
        declare @topTno varchar(20);
    
    	SELECT @topTno=t3.Tno
    	FROM
    	(
    	SELECT t2.Tno,AVG(t1.score) AS AvgScore
    	FROM SC AS t1
    	LEFT JOIN Course AS t2 ON t1.Cno=t2.Cno
    	GROUP BY t2.Tno
    	) AS t3
    	ORDER BY t3.AvgScore DESC limit 0,1
    
    	UPDATE Course SET Tno=@topTno WHERE Tno in (select Tno from inserted)
    GO
    
    INSERT INTO Course(Cno,Cname) VALUES ('04','数据库')

  • 提示:可以新建一个数据库,然后加载下列表及数据。

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

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

相关文章

解决Could not transfer artifact org.springframework.boot的问题

进行maven更新的时候&#xff0c;发现报错了 Could not transfer artifact org.springframework.boot&#xff0c;提示网络错误&#xff0c;搜了一下&#xff0c;应该是要忽略https 在maven设置中添加如下语句 -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.a…

微信投票小程序源码系统:无限多开,吸粉利器, 礼物道具,功能强大 带完整的安装代码包以及搭建教程

随着互联网的不断发展&#xff0c;社交媒体已成为人们生活中不可或缺的一部分。而微信作为中国最大的社交软件之一&#xff0c;拥有着庞大的用户群体和广泛的影响力。在这样的背景下&#xff0c;微信投票小程序应运而生。今天小编要向大家介绍的是一个功能强大的微信投票小程序…

STL标准模版在VS2019中的使用方法

STL标准模版在VS2019中的使用方法 1.STL在VS2019中的位置 1.STL在VS2019中的位置 1.1找到程序安装位置&#xff1a; D:\visual_studio\IDE\VC\Tools\MSVC\14.29.30133\include

塔罗牌+起名算命+占卜小程序源码系统 带完整的搭建教程

随着科技的发展&#xff0c;人们越来越依赖于技术来解决生活中的问题。塔罗牌、起名算命和占卜等传统服务也正在被数字化&#xff0c;以满足现代人的需求。塔罗牌起名算命占卜小程序源码系统应运而生&#xff0c;它不仅集合了传统服务的精髓&#xff0c;还结合了现代技术&#…

python-分享篇-贪吃蛇

文章目录 代码效果 代码 """贪吃蛇"""import random import sys import time import pygame from pygame.locals import * from collections import dequeSCREEN_WIDTH 600 # 屏幕宽度 SCREEN_HEIGHT 480 # 屏幕高度 SIZE 20 …

深入理解二叉树:遍历、构建与性质探索的代码实现

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C语言进阶之路 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 前言一、二叉树的存储结构二、二叉树链式结构的实现三、二叉树的前、中、后续遍历&…

新书速览|Docker与Kubernetes容器运维实战

帮助读者用最短的时间掌握Docker与K8s运维技能 内容简介 随着云计算和容器技术的发展&#xff0c;Docker与Kubernetes已经成为各个企业首选的部署工具&#xff0c;使用它们可以提高系统的部署效率和运维能力&#xff0c;降低运维成本。本书是一本为初学者量身定制的Docker与Kub…

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测&#xff0c;10种类型&#xff0c;YOLOV8训练&#xff0c;转换成ONNX&#xff0c;OPENCV调用资源-CSDN文库 植物病害检测&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTH…

java常量和kotlin常量

在java中使用final声明常量在kotlin中使用const val声明常量 常量在编译为字节码后会直接把调用常量的地方直接替换为常量值&#xff0c;示例如下&#xff1a; public class ConstDemo {public static final String NAME "Even";private static final int ID 100…

让MySQL和Redis数据保持一致的4种策略

1 前言 先阐明一下 MySQL 和 Redis 的关系&#xff1a;MySQL 是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis 是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证 MySQL 和 Redis 中的数据一致&#xff08;即缓存…

leetcode常见错误

1 runtime error: load of null pointer of type ‘std::_Bit_type‘ (aka ‘unsigned long‘) (stl_bvector&#xff09; 力扣&#xff1a;runtime error: load of null pointer of type ‘std::_Bit_type‘ (aka ‘unsigned long‘) (stl_bvector&#xff09;_runtime error…

Threejs API——获得场景中的所有对象

文章目录 获取的对象加载模型1. 网格模型 Mesh2. 基本对象容器 Group3. 基类 Object3D获取的对象 加载模型 //加载gltf模型loadgltf() {let loader = new

VUE3+elementPlus 之 Form表单校验器 之 字符长度校验

需求&#xff1a;校验字符长度&#xff0c;超过后仍可输入&#xff0c;error提示录入字符数与限制字符数 校验字符长度&#xff1a; /*** 检验文字输入区的长度* param {*} rule 输入框的rule 对象&#xff0c;field&#xff1a;字段名称* param {*} value …

Python爬虫:XPath基本语法

XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集&#xff0c;类似于文件系统中的路径表达式。 不啰嗦&#xff0c;讲究使用&#xff0c;直接上案例。 导入 pip3 install lxmlfrom lxml import etr…

如何有效避免市场恐慌性抛售?

布雷特斯坦伯格是一位备受尊敬的交易心理导师&#xff0c;曾担任华尔街多家顶级培训机构的心理导师&#xff0c;指导交易员们如何应对心理挑战。作为一名心理学教授和资深交易员&#xff0c;他对交易心理的理解远超常人。人们普遍认为&#xff0c;要想在交易领域取得成功&#…

年底特殊时期外贸装柜多花点心思

如果可以&#xff0c;尽量不要在工厂快要放假的时候安排装柜了&#xff0c;一个是人手不够&#xff0c;一个是容易漏货&#xff0c;还有就是柜子不好定。 看到有人说自己客户收到货的时候比预期晚了两个星期&#xff0c;一直延误&#xff0c;已经比原来要计划开业的时间推迟&a…

Flink实战四_TableAPISQL

接上文&#xff1a;Flink实战三_时间语义 1、Table API和SQL是什么&#xff1f; 接下来理解下Flink的整个客户端API体系&#xff0c;Flink为流式/批量处理应用程序提供了不同级别的抽象&#xff1a; 这四层API是一个依次向上支撑的关系。 Flink API 最底层的抽象就是有状态实…

Linux Archcraft结合内网穿透实现SSH远程连接

文章目录 1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定SSH公网地址6. SSH固定地址连接7. 结语 Archcraft是一个基于Arch Linux的Linux发行版&#xff0c;它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。…

5款简单好用的软件,总有一款适合你

​ 今天为大家推荐五款不常见但好用的win10软件&#xff0c;它们都有着各自的特色和优势&#xff0c;相信你会喜欢的。 1.文件传输——FileZilla ​ FileZilla是一款开源的FTP软件&#xff0c;支持FTP、SFTP和FTPS协议&#xff0c;可以实现文件的上传和下载。FileZilla具有多…

远程访问@HttpExchange

提示&#xff1a;这是SpringBoot3以上的新特性。 远程访问HttpExchange 一、webClient二、Http 服务接口的方法定义三、声明式 HTTP 远程服务1.组合使用注解2.使用单个注解3.定制 HTTP 请求服务 四、总结1.部分方法过时2.过时的方法详解 远程访问是开发的常用技术&#xff0c;一…