SQL中体会多对多

在这里插入图片描述
我们可以根据学生与课程多对多关系的数据库模型,给出实际的表数据以及对应的查询结果示例,会用到JOIN``LEFT JOIN两种连接

1. 学生表(students

student_idstudent_name
1张三
2李四
3王五

2. 课程表(courses

course_idcourse_name
1数学
2英语
3物理

3. 选课表(student_courses

idstudent_idcourse_id
111
212
322
423
531
633

4. 查询每个学生选修的课程

查询语句

SELECT s.student_name,c.course_name
FROM students s
JOIN student_courses sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id
ORDER BY s.student_name;

对于这个查询,会先将 students 表和 student_courses 表进行连接,连接条件是 s.student_id = sc.student_id。这一步会生成一个临时结果集,其中包含了 students 表和 student_courses 表中 student_id 匹配的所有行。

接着,将这个临时结果集再和 courses 表进行连接,连接条件是 sc.course_id = c.course_id。这样就得到了一个包含 studentsstudent_coursescourses 表中相关信息的新临时结果集。

最后,SELECT语句对新临时结果集进行选择

查询结果:

student_namecourse_name
张三数学
张三英语
李四英语
李四物理
王五数学
王五物理

5. 查询选修了某门课程的所有学生

查询语句:

SELECT s.student_name
FROM students s
JOIN student_courses sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id
WHERE c.course_name = '数学';

查询结果:

student_name
张三
王五

6. 查询每个课程的选课人数

查询语句:

SELECT c.course_name,COUNT(sc.student_id) AS enrollment_count
FROM courses c
LEFT JOIN student_courses sc ON c.course_id = sc.course_id
GROUP BY c.course_name;

查询结果:

course_nameenrollment_count
数学2
英语2
物理2

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

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

相关文章

ES如果要查10条数据需要从各个分片上各取多少条数据?

目录 ES如果要查10条数据需要从各个分片上各取多少条数据? 简单查询(如 match_all 或 term 查询) 深度分页查询(如 from + size 查询) 聚合查询 什么叫聚合查询? 聚合查询的基本结构 常见的聚合类型 聚合查询的执行过程 聚合查询的示例 聚合查询的应用场景 注意…

人机交互自学引导

第1关:输出“Hello World!” # 在下面一行补充代码,输出“Hello World!” print(Hello World!) 第2关:输出“李白,你好!” # 在下面补充代码,在两行中依次输出“李白,你好!”和“…

CentOS 7 更换 yum 源(阿里云)+ 扩展 epel 源

CentOS 7 更换 yum 源(阿里云) 扩展 epel 源 一、备份现有 yum 源二、下载 yum 源(任选其一即可)三、清理并生成缓存四、安装 EPEL 扩展源(根据需要下载)五、验证是否生效六、一键脚本(阿里云源…

无人机与传统巡检优劣势对比!

一、无人机巡检的优势 1. 高效性 覆盖范围广:可快速扫描大范围区域(如电力线路、管道、农田等),尤其适合复杂地形(山区、沼泽等)。 速度快:飞行速度远高于人工巡检,缩短任务周期…

DrRacket是一款专为Scheme和Racket编程语言设计的集成开发环境(IDE)

DrRacket是一款专为Scheme和Racket编程语言设计的集成开发环境(IDE),由瑞士苏黎世联邦理工学院开发。它不仅是初学者学习编程的理想工具,也适用于专业级开发‌。 安装DrRacket 请访问https://download.racket-lang.org安装Racke…

走进底层-Java中的IO流

Java中IO流 在Java编程中,IO流(Input/Output Stream)是非常重要的概念,它为程序的输入和输出操作提供了一套强大而灵活的机制。本文将详细介绍Java中IO流的相关内容,包括其基本概念、分类以及常见类的使用示例。 一、…

【Tiny RDM】Redis客户端工具

Tiny RDM Tiny RDM是一款现代化、轻量级、跨平台的Redis客户端,支持Mac、Windows和Linux,目前在Github上已有10kStar。 Github 项目地址: https://github.com/tiny-craft/tiny-rdm 功能特性 极度轻量,基于Webview2&#xff0c…

ctfshow REVERSE re2 萌新赛 内部赛 七夕杯 WP

目录 re2 萌新赛 flag白给 签退 数学不及格 内部赛 批量生产的伪劣产品 来一个派森 好好学习 天天向上 屏幕裂开了 七夕杯 逆向签到 easy_magic re2 ida分析主函数,将flag.txt内容加密写入enflag.txt 这是密钥加密过程 标准rc4加密 简单异或解…

【Linux】线程库

一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s ,我的地址:0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…

深入剖析 Android Compose 框架的自动动画:AnimatedVisibility 与 AnimatedContent(二十四)

深入剖析 Android Compose 框架的自动动画:AnimatedVisibility 与 AnimatedContent 引言 在 Android 应用开发中,动画是提升用户体验的重要手段。它能够让界面元素的显示与隐藏、状态的切换变得更加自然和流畅,避免生硬的变化给用户带来不佳…

文件上传的小点总结(1)

2.文件类型绕过 问题插入:BP无法拦截本地流量 ①插件限制 不代理的地址列表通常写有localhost和127.0.0.1,把本地的全都删掉,然后应用保存。 ②浏览器限制 Firefox浏览器设置:检查浏览器代理配置和proxy listeners都没问题后&…

AI基础01-文本数据采集

本篇文章是学习文本数据的采集,作为人工智能训练师或者数据分析师有时需要先获取数据,然后进行数据清洗、数据标注。很明显数据采集是后续步骤的基础。 1)数据采集定义 数据采集:data acquisition,DAQ 又称为数据获取…

深度学习Python编程:从入门到工程实践

第一章 Python语言概述与生态体系 1.3 Python在工业界的应用场景 # 示例:使用FastAPI构建RESTful接口 from fastapi import FastAPI from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strprice: float@app.post("/items/") async def cr…

使用CSS3实现炫酷的3D翻转卡片效果

使用CSS3实现炫酷的3D翻转卡片效果 这里写目录标题 使用CSS3实现炫酷的3D翻转卡片效果项目介绍技术要点分析1. 3D空间设置2. 核心CSS属性3. 布局和定位 实现难点和解决方案1. 3D效果的流畅性2. 卡片内容布局3. 响应式设计 性能优化建议浏览器兼容性总结 项目介绍 在这个项目中…

HAl库开发中断方式接收Can报文的详细流程

下面给出一个基于 HAL 库的中断方式接收 CAN 报文的详细流程说明,描述每一步的硬件配置、软件调用和中断处理机制,而不涉及具体代码细节,只讲解整体原理和步骤: 在使用 HAL 库时,不需要手动清除中断标志位。原因如下&…

【读书笔记】华为《从偶然到必然》

note 华为的成功并非偶然,而是通过IPD体系、投资组合管理、平台战略等系统性工具,将研发投资转化为可持续的商业竞争力。书中强调的“管理即内部因素”理念,揭示了企业规模扩张与管理能力匹配的深层规律,为高科技企业提供了可借鉴…

6.4考研408数据结构图论核心知识点深度解析

一、最小生成树(Minimum Spanning Tree) 1.1 Prim算法 易错点与难点 lowcost数组更新逻辑 错误将已加入生成树的顶点距离重置为0后继续参与计算,导致后续顶点选择错误未正确处理非连通图情况,可能陷入死循环(需结合visited数组判断)示例错误:for(int j=0; j<G.vexn…

HashMap添加元素的流程图

文章目录 JDK7 vs JDK8 的 HashMap 结构变化Java8 中哈希表的红黑树优化机制HashMap 添加元素的完整流程解析1. 计算 key 的哈希值并确定索引2. 检查该索引位置是否已有元素3. 处理哈希冲突4. 判断当前存储结构&#xff08;链表还是红黑树&#xff09;5. 判断链表长度是否超过 …

Excel(进阶篇):powerquery详解、PowerQuery的各种用法,逆透视表格、双行表头如何制作透视表、不规则数据如何制作数据透视表

目录 PowerQuery工具基础修改现有数据理规则PowerQuery抓取数据的两种方式多文件合并透视不同表结构多表追加数据透视追加与合并整理横向表格:逆透视 数据用拆分工具整理数据算账龄 不等步长值组合合并文件夹中所有文件PowerQuery处理CSV文件双行表头、带合并单元格如何做数据…

从零开始:使用 Cython + JNI 在 Android 上运行 Python 算法

1. 引言 在 Android 设备上运行 Python 代码通常面临性能、兼容性和封装等挑战。尤其是当你希望在 Android 应用中使用 Python 编写的计算密集型算法时&#xff0c;直接运行 Python 代码可能导致较高的 CPU 占用和较差的性能。为了解决这个问题&#xff0c;我们可以使用 Cytho…