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

数据库中关于查询选课问题的解法

前言

今天上午起来复习了老师上课讲的选课问题。我总结了三个解法以及一点注意事项。

选课问题介绍

简单来说就是查询某某同学没有选或者选了什么课。然后查询出该同学的姓名,学号,课程号,课程名之类的。

sql文件我上传了。大家可以尝试练一练。

解题代码如下(含思路)

以"查询19105号学生漏选了哪些课程"为例子.

-- 数据库查询的练习
-- 查询19105号学生漏选了哪些课程
-- 法一 使用左外连接+笛卡尔积的方式
-- 1.列出19105号学生应选出的课 笛卡尔积
select Sno,Sname,Cno,Cname from student,course where Sno='19105';
-- 2.进行左外连接 选课的正确逻辑是学号相同且课程号也相同
SELECT * from (select Sno,Sname,Cno,Cname from student,course where Sno='19105') scall left OUTER JOIN
sc ON sc.sno=scall.Sno AND sc.Cno=scall.Cno;
-- 3.筛选出漏选的课,则成绩为null的
-- 错误写法SELECT * from (select Sno,Sname,Cno,Cname from student,course where Sno='19105') scall left OUTER JOIN sc ON sc.sno=scall.Sno AND sc.Cno=scall.Cno AND sc.Grade IS null;
-- 正确写法SELECT * from (select Sno,Sname,Cno,Cname from student,course where Sno='19105') scall left OUTER JOIN sc ON sc.sno=scall.Sno AND sc.Cno=scall.Cno where sc.Grade is NULL;-- 法二 
-- 子查询+IN集合
-- 1.在sc表中找到19105已经选课的课程编号
SELECT Cno FROM sc where sc.Sno='19105';
-- 2.使用not in+子查询方式
SELECT Sno,sname,cno,Cname FROM student,course where Cno not in  (SELECT Cno FROM sc where sc.Sno='19105');
-- 3.限定为19105
SELECT Sno,sname,cno,Cname FROM student,course where sno='19105' AND Cno not in  (SELECT Cno FROM sc where sc.Sno='19105');-- 法三
-- 子查询加exists解决
SELECT Sno, sname, Cno, cname 
FROM student, course 
WHERE student.sno = '19105'  -- 明确指定表别名AND NOT EXISTS (SELECT 1 FROM sc WHERE sc.Sno = student.Sno  -- 关联当前学生AND sc.Cno = course.Cno   -- 关联当前课程);-- 错误写法 注意与正确写法做区分
SELECT Sno, sname, Cno, cname 
FROM student, course 
WHERE student.sno = '19105'  -- 明确指定表别名AND NOT EXISTS (SELECT 1 FROM sc,student,course WHERE sc.Sno = student.Sno  -- 关联当前学生AND sc.Cno = course.2Cno   -- 关联当前课程);

注意事项 

结语 

byebye~

 

 

相关文章:

  • JAVA SE 多线程(上)
  • C#中的成员常量:编译时的静态魔法
  • Elasticsearch进阶篇-DSL
  • 虚幻引擎5-Unreal Engine笔记之Pawn与胶囊体的关系
  • 项目:在线音乐播放服务器——基于SSM框架和mybatis
  • 宝塔面板屏蔽垃圾搜索引擎蜘蛛和扫描工具的办法
  • 互联网大厂Java面试场景:从简单到复杂的技术深度解析
  • redis读写一致问题
  • 《从零开始:Spring Cloud Eureka 配置与服务注册全流程》​
  • 记录一次win11本地部署deepseek的过程
  • 开发指南115-CSS中选择器关系
  • 接口——类比摄像
  • 31、魔法生物图鉴——React 19 Web Workers
  • Jmeter使用及压测
  • Bash fork 炸弹 —— :(){ :|: };:
  • Android studio Could not move temporary workspace
  • 扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松
  • 10.11 LangGraph多角色Agent开发实战:生产级AI系统架构与性能优化全解析
  • CVE-2018-1273 漏洞深度分析
  • 数据库DDL
  • 浙江推动人工智能终端消费:家居机器人纳入以旧换新补贴范围
  • CBA官方对孙铭徽罚款3万、广厦投资人楼明停赛2场罚款5万
  • 天问二号探测器顺利转入发射区,计划5月底择机发射
  • 美国失去最后一个AAA评级,资产价格怎么走?美股或将触及天花板
  • 高瓴、景林旗下公司美股持仓揭晓:双双增持中概股
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障