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

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

前言

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

选课问题介绍

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

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~

 

 

http://www.xdnf.cn/news/7004.html

相关文章:

  • Appium自动化测试环境搭建及配置
  • [Linux]安装吧!我的软件包管理器!
  • 怎样免费开发部署自己的网站?
  • Spark 的运行模式(--master) 和 部署方式(--deploy-mode)
  • Linux进程信号(三)之信号产生2
  • Day29 类的装饰器
  • axios的基本使用
  • 网络安全利器:蜜罐技术详解
  • windows11 安装好后右键没有 git bash 命令
  • 【超详细】面试中问到事件循环(Event Loop)机制?
  • 【数据结构】树状数组
  • 基于 STM32 的汽车防盗报警系统设计与实现
  • FPR2100安装ASA镜像
  • 高效查询:位图、B+树
  • 聊一聊契约测试在接口测试中常见的应用场景
  • 互联网大厂Java面试场景:从缓存到容器化的技术问答
  • Spring源码主线全链路拆解:从启动到关闭的完整生命周期
  • 第四章:WebSocket 通信机制全解与客户端发包实录
  • 二十一、案例特训专题4【数据库篇】
  • Vue.js教学第五章:计算属性与侦听器详解
  • 02 K8s双主安装
  • Flink的时间问题
  • 14【高级指南】Django部署最佳实践:从开发到生产的全流程解析
  • JavaScript性能优化实战(12):大型应用性能优化实战案例
  • 机器学习09-正规方程
  • 【MySQL成神之路】MySQL常见命令汇总
  • Vue3学习(组合式API——provide和inject)(跨多层级组件通信/跨多层级共享数据)
  • Manus vs Lovart:AI Agent技术深度解析与实战指南
  • 【机器学习】逻辑回归
  • 【每日一题丨2025年5.12~5.18】排序相关题