用INNER JOIN找出学霸选修的高难度课程
创作时间:
作者:
@小白创作中心
用INNER JOIN找出学霸选修的高难度课程
引用
CSDN
等
8
来源
1.
https://blog.csdn.net/ahngzw77/article/details/52913231
2.
https://blog.csdn.net/m0_54144956/article/details/131235643
3.
https://blog.csdn.net/xby7437/article/details/108854133
4.
https://www.cnblogs.com/hellofangfang/p/18698573
5.
https://www.cnblogs.com/geaozhang/p/6753190.html
6.
https://www.freecodecamp.org/chinese/news/sql-inner-join-how-to-join-3-tables-in-sql-and-mysql/
7.
https://www.cnblogs.com/liuguangzhi/articles/18325113
8.
https://www.oryoy.com/news/qing-song-zhang-wo-mysql-gao-xiao-xue-sheng-xin-xi-cha-xun-join-cao-zuo-shi-zhan-jie-xi.html
在数据库操作中,INNER JOIN 是一种强大的工具,可以帮助我们轻松查询和分析跨表数据。比如,在一个学生选课系统中,我们可以通过INNER JOIN来找出哪些学生选修了哪些课程,甚至可以进一步筛选出"学霸"们选修的所有高难度课程。
01
INNER JOIN 的工作原理
INNER JOIN 的核心功能是在两个或多个表之间建立关联,只返回满足连接条件的行。它通过匹配表之间的共同字段(通常是外键与主键),生成一个新的结果集。在底层实现中,数据库会先对表做笛卡尔积(所有可能的行组合),然后根据关联条件过滤出符合的行。
02
构建示例数据
为了更好地理解,我们先创建三个表:学生表(students)、课程表(courses)和选课表(enrollments)。
学生表(students)
student_id | name |
|---|---|
1 | Alice |
2 | Bob |
3 | Charlie |
4 | David |
课程表(courses)
course_id | course_name | difficulty |
|---|---|---|
101 | 高等数学 | 高 |
102 | 大学英语 | 中 |
103 | 数据结构 | 高 |
104 | 计算机网络 | 中 |
选课表(enrollments)
enrollment_id | student_id | course_id |
|---|---|---|
1 | 1 | 101 |
2 | 1 | 102 |
3 | 2 | 102 |
4 | 3 | 101 |
5 | 3 | 103 |
6 | 4 | 104 |
03
查询每个学生选修的课程
我们可以通过INNER JOIN来查询每个学生选修的课程:
SELECT students.name, courses.course_name
FROM students
INNER JOIN enrollments ON students.student_id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.course_id;
这条SQL语句的执行过程如下:
- 首先通过学生ID将学生表和选课表连接起来
- 然后通过课程ID将选课表和课程表连接起来
- 最后返回学生姓名和课程名称
结果如下:
name | course_name |
|---|---|
Alice | 高等数学 |
Alice | 大学英语 |
Bob | 大学英语 |
Charlie | 高等数学 |
Charlie | 数据结构 |
David | 计算机网络 |
04
查询学霸选修的高难度课程
接下来,我们聚焦于查询选修了高难度课程的学生:
SELECT students.name, courses.course_name
FROM students
INNER JOIN enrollments ON students.student_id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.course_id
WHERE courses.difficulty = '高';
这条SQL语句在之前的基础上增加了一个筛选条件:只返回难度为"高"的课程。结果如下:
name | course_name |
|---|---|
Alice | 高等数学 |
Charlie | 高等数学 |
Charlie | 数据结构 |
从结果可以看出,Alice和Charlie是选修了高难度课程的"学霸"。
05
总结
通过这个例子,我们可以看到INNER JOIN在处理多表关联查询时的强大功能。它不仅能够帮助我们轻松地整合不同表中的数据,还能通过设置连接条件来精确筛选所需信息。在实际应用中,合理使用INNER JOIN可以大大提高数据查询和分析的效率。
热门推荐
冬季流感高发,泰诺教你正确应对喷嚏流鼻涕
从杨幂同款看宋锦:传统工艺的现代时尚之路
感冒期间暂缓接种,专家解析流感疫苗接种指南
赵露思机场私服走红背后:四大穿搭技巧让普通人也能穿出范
赵露思亮相宝格丽晚宴,深V露背造型引发争议
《珠帘玉幕》开播:赵露思演绎初唐采珠少女,演技引发热议
春日大社:奈良最神圣的宗教场所
探索奈良春日大社的神圣之美:必游之地
京都至奈良自驾游攻略:奈良公园、东大寺与春日大社的完美一天
90%参与者正确选择用药,TACTiC研究为心血管疾病预防开辟新路径
家庭园艺新宠:盆栽桑葚树的种植秘籍
高音量听音乐危害儿童听力,专家建议遵循“60-60-60”原则
手机语音音量变小?从软件到硬件的全方位解决方案
桑葚:秋季养生的营养果还是健康陷阱?
微信使用体验优化指南:从界面整理到功能设置
2024年国内国际航空业热点话题,都在这里了!
慢跑和瑜伽:科学实证的减压良方
20年前IC卡余166.5元,电信推诿退费只愿换卡
跑步姿势大揭秘:你真的跑对了吗?
运动后一根香蕉,肌肉恢复更佳!
成都蓉城主场战南通支云,足协杯1/8决赛上演“三番战”
南通大学代表团访欧:学习足球强国经验,打造“南通模式”
乙肝可以吃韭菜吗?适量食用为宜
透骨液的使用安全指南:功效与风险并存
深圳北至咸宁北高铁全面升级:最快4小时27分,新增站点
他汀类药物:心血管病治疗的降脂稳斑利器
古代侦探如何破案?五种传统手段让真相大白
从选材到禁忌:一文掌握羊肉汤熬制要点
“刑侦八虎”徐利民:20分钟破获两起绑架案的指纹识别大师
从医生成神探:乌国庆60年刑侦生涯破解重大案件