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

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.kler.cn/a/611401.html

相关文章:

  • Go 语言 fmt 模块的完整方法详解及示例
  • 认识 Express.js:Node.js 最流行的 Web 框架
  • TiDB与Doris实操对比:深度剖析数据库选型要点
  • flutter-实现瀑布流布局及下拉刷新上拉加载更多
  • 外设的中断控制
  • Go 语言 sync 包使用教程
  • 内存型数据库深入解析:Memcache、Redis 与 Squid 的对比与应用
  • 数据结构二叉树进阶
  • SylixOS 中 select 原理及使用分析
  • 计算机三级信息安全技术核心知识点详细定义解析,按章节分类并重点阐述关键概念定义
  • 【加密社】如何创建自己的币圈工具站
  • 解决用户同时登录轮询获取用户信息错乱,使用WebSocket和Server-Sent Events (SSE)
  • 数据可视化TensorboardX和tensorBoard安装及使用
  • MySQL - 数据库基础操作
  • 【每日算法】Day 8-1:广度优先搜索(BFS)算法精讲——层序遍历与最短路径实战(C++实现)
  • 二十五、实战开发 uni-app x 项目(仿京东)- 前后端轮播图
  • 2025最新Chatbox全攻略:一键配置Claude/GPT/DeepSeek等主流模型(亲测可用)
  • # WebSocket 与 Socket.IO 对比与优化
  • RustDesk部署到linux(自建服务器)
  • How to use pgbench to test performance for PostgreSQL?