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

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

前言

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

选课问题介绍

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

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.lryc.cn/news/2379598.html

相关文章:

  • 基于Bootstrap 的网页html css 登录页制作成品
  • python中http.cookiejar和http.cookie的区别
  • 【NLP 71、常见大模型的模型结构对比】
  • 组件导航 (Navigation)+flutter项目搭建-混合开发+分栏
  • HGDB企业版迁移到HGDB安全版
  • ProfibusDP主站转modbusTCP网关与ABB电机保护器数据交互
  • AM32电调学习解读六:main.c文件的函数介绍
  • ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch
  • AutoVACUUM (PostgreSQL) 与 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC (Oracle) 对比
  • Rust中的交叉编译与vendered特性
  • 3、函数和约束
  • PhpStudy | PhpStudy 工具安装 —— Windows 系统安装 PhpStudy
  • Debezium快照事件监听器系统设计
  • 基于vue框架的订单管理系统r3771(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?
  • 语音识别-2
  • React useState 的同步/异步行为及设计原理解析
  • 语音识别——语音转文字
  • 兰亭妙微:用系统化思维重构智能座舱 UI 体验
  • 计算机视觉----基础概念、卷积
  • 第三十七节:视频处理-视频读取与处理
  • 【自然语言处理与大模型】向量数据库:Chroma使用指南
  • NSSCTF [GFCTF 2021]where_is_shell
  • WSL 安装 Debian 12 后,Linux 如何安装 vim ?
  • 电子数据取证(数字取证)技术全面指南:从基础到实践
  • Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
  • Spark SQL 之 Analyzer
  • c/c++数据类型转换.
  • Django 项目的 models 目录中,__init__.py 文件的作用
  • 实验六:FPGA序列检测器实验