mysq,数据库的综合查询

news2024/11/26 1:28:28

记录一下数据库综合查询,复习加深印象

  1. 创建教学数据库中包含四个基本表:

  • 教师情况表Teacher(Tno 教师号,TName 教师名,TDept 教师所在的院系);
  • 课程基本表Course(Cno 课号,Cname 课名,cpno 先修课号 , Tno 教师号);
  • 学生情况表Student(Sno学号,Sname 姓名,Sage 年龄,Sex 性别,sdept 所在的院系);
  • 学生成绩基本表SC 学生课程表(Sno 学号,Cno 课号,Grade 成绩);
  1. -- 删除表
    DROP TABLE IF EXISTS Student;
    -- 创建表
    CREATE TABLE Student(
    Sno CHAR(9) PRIMARY KEY,-- 学号 主键
    Sname VARCHAR(20) NOT NULL,-- 姓名 非空且唯一
    Sage INT NOT NULL,-- 年龄
    Sex VARCHAR(5) NOT NULL,-- 性别
    Sdept VARCHAR(10) NOT NULL -- 所在系
    )charset=utf8;
    
    -- 删除表
    DROP TABLE IF EXISTS Course;
    -- 创建表
    CREATE TABLE Course(
    Cno CHAR(5) PRIMARY KEY,-- 课程号 主键
    Cname VARCHAR(20) NOT NULL ,-- 课程名 非空
    Cpno CHAR(5) ,-- 先行课号
    Tno VARCHAR(5) -- 教师号
    )charset=utf8;
    
    -- 删除表
    DROP TABLE IF EXISTS Teacher;
    -- 创建表
    CREATE TABLE Teacher(
    Tno  VARCHAR(5) PRIMARY KEY,-- 教师号 主键
    Tname VARCHAR(20) NOT NULL ,-- 教师名 非空
    Tdept VARCHAR(20) NOT NULL -- 教师号
    )charset=utf8;
    
    -- 删除表
    DROP TABLE IF EXISTS SC;
    -- 创建表
    CREATE TABLE SC(
    Sno CHAR(9),-- 学号 主键
    Cno CHAR(5),-- 课程号 主键
    Grade INT NOT NULL, -- 成绩
    foreign key(Sno) references Student(Sno),
    foreign key(Cno) references Course(Cno)
    )charset=utf8;

    如果需要外键约束,额外添加即可,避免在后续sql删除修改语句中报错

  • alter table course add foriegn key(Cpno) references course(Cno);

  • alter table course add foreign key(Tno) references teacher(Tno);

  • alter table sc add foreign key(Sno) references student(Sno);

  • alter table sc add foreign key(Cno) references course(Cno);

  1. 添加表信息

  2. 添加学生表信息

  3. 添加课程表信息

  4. 添加教师表信息

  5. 添加选课表信息

  6. 练习24个SQL语句,经过验证,都是正确能够运行的。

1. 查询所有女同学的姓名和年龄;

SELECT Sname,Sage FROM student where Sex = '女';

2. 查询计算机系教师开设的所有课程的课号和课名;

 SELECT Cname,Cno FROM Course
WHERE Tno IN (
		SELECT Tno FROM Teacher WHERE Tdept = '计算机系');

3. 查询所有女同学所选课程的课程号;

SELECT Cno FROM sc WHERE Sno IN (SELECT Sno FROM student WHERE Sex = '女');

4. 查询至少有一门课程的成绩高于90分的学生的姓名和年龄;

SELECT Sname,Sage
FROM student WHERE Sno IN (
		SELECT Sno FROM sc WHERE Grade > 90);

5. 查询选修“数据库原理“的所有学生的姓名和成绩;

两种方式:
SELECT student.Sname,sc.Grade FROM student
JOIN sc ON student.Sno = sc.Sno
JOIN course ON sc.Cno = course.Cno
WHERE Cname = '数据库原理';

SELECT student.Sname,sc.Grade
FROM student,sc,course
WHERE student.Sno = sc.Sno AND sc.Cno = course.Cno AND Cname = '数据库原理';

​

6. 查询未选修“VB设计“的学生的学号和姓名;

SELECT Sno,Sname
FROM Student
WHERE Sno IN (
		SELECT Sno FROM sc
		WHERE Cno NOT IN (
				SELECT Cno FROM course WHERE Cname = 'VB设计'));

7. 查询不是计算机系教师所讲授的课程的课名和课号;

SELECT Cname,Cno FROM Course
WHERE	Tno NOT IN (
		SELECT Tno FROM Teacher WHERE	Tdept = '计算机系');

8. 查询未选修“21“号课的学生的学号和课号;

SELECT student.Sno,Cno FROM student,sc WHERE student.Sno=sc.Sno and Cno !='21';

9. 查询年龄在18~20岁(包括20和18)之间的所有学生的信息;

SELECT * FROM student WHERE	Sage >= 18 AND Sage <= 20;
SELECT student.* FROM student WHERE Sage BETWEEN 18 AND 20;

10. 查询至少选修“21“和”41“两门课程的学生的学号;

SELECT	Sno FROM sc WHERE Cno IN ('21', '41')
GROUP BY Sno HAVING COUNT(DISTINCT Cno) >= 2;

11. 查询选修楚梁老师所讲授课程的学生的学号和成绩

SELECT Sno,Grade FROM sc
WHERE Cno IN (
		SELECT Cno FROM	course WHERE Tno IN (
				SELECT Tno FROM teacher WHERE	Tname = '楚梁'));

12. 查询至少选修了两门课程的学生的学号

SELECT Sno FROM sc WHERE Cno 
GROUP BY Sno HAVING COUNT(DISTINCT Cno) >= 2;

13. 查询选修高等数学课程的人数

SELECT	count(Sno) AS 人数 FROM sc
WHERE Cno IN (
		SELECT Cno FROM	Course WHERE Cname = '高等数学') 

14. 查询高等数学课程的平均分

SELECT avg(Grade) AS 高等数学平均分
	FROM sc WHERE Cno IN (
			SELECT Cno FROM Course WHERE Cname = '高等数学');

15. 查询黑姓的所有学生的姓名、年龄和性别

SELECT Sname,Sage,Sex FROM student WHERE Sname LIKE '黑%';

16. 查询学号比‘绯红女巫’同学大而年龄比他小的学生姓名

SELECT Sname FROM Student
WHERE Sno > (
		SELECT Sno FROM	student WHERE Sname = '绯红女巫'
)
AND Sage < (
	SELECT Sage FROM student WHERE Sname = '绯红女巫'
);

17. 查询年龄大于所有女同学平均年龄的男学生的姓名和年龄

SELECT Sname,Sage FROM student
WHERE Sage > (
		SELECT avg(Sage)FROM student WHERE Sex = '女')
AND Sex = '男'; 

18. 查询只选了一门课程的学生的学号

SELECT Student.Sno FROM Student
JOIN SC ON Student.Sno = SC.Sno
GROUP BY Student.Sno HAVING COUNT(SC.Cno) = 1;

19. 将每一门课程的成绩均大于等于80分的学生的学号、姓名和性别插入到另一个已经存在的基本表STU(Sno,SNAME,SEX)中

CREATE TABLE STU (
	Sno CHAR (9) PRIMARY KEY,
	-- 学号 主键
	SNAME VARCHAR (20) NOT NULL,
	-- 姓名 非空且唯一
	SEX VARCHAR (5) NOT NULL -- 性别
) charset = utf8;
INSERT INTO STU (Sno, SNAME, SEX) SELECT
	student.Sno,
	student.Sname,
	student.Sex
FROM student
WHERE student.Sno IN (
		SELECT sc.Sno FROM sc GROUP BY sc.Sno HAVING MIN(sc.Grade) >= 80);

20. 将英语课程的任课教师号修改为412

UPDATE teacher SET Tno = 413
WHERE Tno IN (
		SELECT Tno FROM	course WHERE Cname = '四级英语');

21. 将低于总平均成绩的女同学的成绩提高5%

UPDATE sc
SET Grade = Grade * 1.05
WHERE Sno IN (
		SELECT Sno	FROM student WHERE Sex = '女'
	)
AND Grade < (
	SELECT avg_grade FROM
		(
			SELECT	avg(Grade) AS avg_grade
			FROM	sc
		) AS avg_G
);

22. 从基本表Course中删除白墨老师的任课信息

update  course	set Tno=null
WHERE course.Tno IN (
		SELECT Tno FROM	teacher WHERE Tname = '白墨'); 


DELETE FROM course where Tno  =(Select Tno from teacher WHERE Tname='白墨');
​

23. 查询至少讲授两门课程的教师姓名和其所在的系

SELECT Tname,Tdept
FROM teacher left JOIN course ON teacher.Tno = course.Tno
GROUP BY Tname,Tdept HAVING COUNT(Cno) >= 2;

24. 查询计算机系的所有老师

SELECT * FROM teacher WHERE Tdept = '计算机系';

结语

外键约束的问题请查看

mysql,用sql语句,建立学生-课程数据库基本表_sql创建学生表-CSDN博客

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

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

相关文章

Network(一)计算机网络介绍

一 计算机网络 1 概述 什么是计算机网络&#xff1f; 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统&#xff0c;应用软件&#xff0c;应用程序通过通信线路互连 实现资源共享、信息传递、增加可靠性、提高系统处理能力 2 网络与云计算 3 计算机网…

AI创作系统ChatGPT源码+AI绘画系统+支持OpenAI DALL-E3文生图,可直接对话文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。新增支…

UWB应用于金属工具管理

超宽带&#xff08;Ultra-Wideband&#xff0c;UWB&#xff09;技术在金属工具管理方面有许多应用案例&#xff0c;它可以帮助提高工具管理的效率、安全性和精确度。以下是一些UWB在金属工具管理中的应用案例&#xff1a; 工具定位和跟踪&#xff1a;UWB技术可以用于实时定位和…

网络运维Day15

文章目录 Prometheus简介环境准备配置模板机环境部署阿里镜像源实验环境准备 部署prometheus服务查看及测试 Promethues 被监控端Grafana简介部署 Grafana 服务器修改数据源 监控数据库安装部署Mariadb安装导出器修改 Prometheus服务端配置Grafana配置 总结 Prometheus简介 Pr…

MobileSAM论文笔记

摘要 自Meta研究团队发布SAM&#xff08;Segment Anything Model&#xff09;项目依赖&#xff0c;因其令人惊艳的零样本迁移特性和与其他视觉应用兼容的高通用性&#xff0c;引起了极大的关注。由于大多数类似的应用都需要运行在资源限制的边缘设备&#xff0c;如手机&#x…

苹果独占鳌头,国产手机围攻,双十一“照妖镜”显露谁有真实力

随着双十一购物节的结束&#xff0c;电商平台也给出了各手机品牌的销量数据&#xff0c;苹果毫无疑问成为双十一的赢家&#xff0c;不过两家国产手机品牌也显露了他们的实力&#xff0c;已具有与苹果一战之力。 与去年双十一和今年618类似&#xff0c;苹果仍然占据热销榜前列&a…

YOLOv8-Seg改进:SPPF系列改进篇 | 大核分离卷积注意力模块( Large Separable Kernel Attention)

🚀🚀🚀本文改进:大核分离卷积注意力模块( Large Separable Kernel Attention),实现涨点的目标并且降低计算复杂度和显存,引入到YOLOv8,与SPPF结合实现二次创新; 🚀🚀🚀Large Separable Kernel Attention 亲测在多个数据集能够实现涨点,同样适用于小目标分…

自己动手重装电脑Win10系统方法教程

如果我们自己电脑系统出现问题了&#xff0c;无法通过简单的操作解决&#xff0c;这时候最佳的解决方法&#xff0c;就是给电脑重装安装操作系统。有用户想给电脑重装Win10系统&#xff0c;但不清楚具体的重装步骤方法&#xff0c;下面小编就给大家详细介绍自己手动重新安装Win…

win下oracle安装与navicat远程连接配置

oracle安装 navicat远程连接配置 1、打开navicat&#xff0c;工具>选项>环境 2、配置 找到oracle安装目录 3、连接

7.jvm对象内存布局

目录 概述对象里的三个区对象头验证代码控制台输出分析 验证2代码控制台输出 实例数据对其填充 访问对象结束 概述 jvm对象内存布局详解。 相关文章在此总结如下&#xff1a; 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数…

【C/PTA——8.数组2(课外实践)】

C/PTA——8.数组2&#xff08;课外实践&#xff09; 7-4 矩阵运算7-2 方阵循环右移7-3 螺旋方阵7-4 数组-杨辉三角7-5 数组-对角线求和7-6 数组-矩阵最小值 7-4 矩阵运算 #include<stdio.h> int main() {int n, i, j;int a[10][10] { 0 };scanf("%d", &n)…

CodeEase标准化的低代码平台

目录 一、引言二、网站简介三、网站特色四、为什么推荐这个网站&#xff1f;五、总结 一、引言 随着互联网的快速发展&#xff0c;我们每天都会浏览各种各样的网站。今天&#xff0c;我想向大家推荐一个独特而出色的网站——CodeEase&#xff0c;这是一个致力于为用户提供便捷…

LLM App ≈ 数据ETL管线

虽然现有的 LLM 应用程序工具&#xff08;例如 LangChain 和 LlamaIndex&#xff09;对于构建 LLM 应用程序非常有用&#xff0c;但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时&#xff0c;我能够感受到一些尚未开发和破解的方面的痛苦…

TrOCR模型微调【基于transformer的光学字符识别】

TrOCR&#xff08;基于 Transformer 的光学字符识别&#xff09;模型是性能最佳的 OCR 模型之一。 在我们之前的文章中&#xff0c;我们分析了它们在单行打印和手写文本上的表现。 然而&#xff0c;与任何其他深度学习模型一样&#xff0c;它们也有其局限性。 TrOCR 在处理开箱…

任正非说:要提高合同质量,使我们从广种薄收转向有效益的扩张。

你好&#xff01;这是华研荟【任正非说】系列的第38篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 华研荟注&#xff1a;前两天为大家分享了任正非先生讲话中关于IPD、ISC、LTC流程的一些内容。今天来看看任正非对于合同的要求…

Programming Abstractions in C阅读笔记:p196

《Programming Abstractions in C》学习第63天&#xff0c;p196总结。涉及到编程之外的知识&#xff0c;依然是读起来很费劲&#xff0c;需要了解作者在书中提到的人物(Edouard Lucas)、地点(Benares)、神话传说(Brahma)等等。虽然深知自己做不到对人文知识&#xff0c;历史知识…

【教3妹学编程-算法题】阈值距离内邻居最少的城市

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 立冬之后又开始降温了&#xff0c; 外面风吹的呼呼的。 3妹&#xff1a;今天还有雨&#xff0c;2哥上班记得带伞。 2哥 : 好的 3妹&#xff1a;哼&#xff0c;不喜欢冬天&#xff0c;也不喜欢下雨天&#xff0c;要是我…

Vue学习day01:追风记事本

文章目录 一、插值表达式二、Vue常用指令2.1 内容渲染指令2.2 条件渲染指令2.3 事件绑定指令2.4 属性绑定指令2.5 列表渲染指令2.6 双向绑定指令 三、案例&#xff1a;追风记事本 一、插值表达式 插值表达式是一种Vue的模板语法&#xff0c;我们可以用插值表达式渲染出Vue提供的…

通用的链栈实现(C++)

template<class T> class MyStack//链栈 { private:struct StackNode{T data;StackNode* next;StackNode(const T& val T(), StackNode* p nullptr) :data(val), next(p) {}//};StackNode* top;int cursize;void clone(const MyStack& s){Clear();cursize s.c…

基于 Junit 的接口自动化测试框架实现!

分层的自动化测试 5~10 年前&#xff0c;我们接触的自动化测试更关注的是 UI 层的自动化测试&#xff0c;Mercury 的 WinRunner/QTP 是那个时代商业性自动化测试产品的典型代表&#xff0c;在那个时代大家单纯想的都是能用一个自动化操作的工具替代人力的点击&#xff0c;商业…