周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空的解决方法

实验前期准备

course表(课程表)

在其中:

cno(课程号)cname(课程名称)ccredit(学分)cdept(开课院系)

sc表(选修表)

在其中:

sno(学号)cno(课程号)grade(成绩)

题目详解

​ 为sc表添加数据行:学号为1002、课程编号为10006、分数为76。使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空。

我们可以分两步来解析这道题:

第一步

为sc表添加数据行:学号为1002、课程编号为10006、分数为76

​ 这一步还是比较简单的,使用DML(数据操作语言)来解决即可。我们使用INSERT INTO来给指定字段添加数据。

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

值得注意的是:

• 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

• 字符串和日期型数据应该包含在引号中。

• 插入的数据大小,应该在字段的规定范围内。

依据以上,我们可以写出第一步的代码了。

insert into sc values ('1002','160006',76);

第二步

使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空。

​ 这一步就开始困难了,我们依旧是分三点来攻破。

1、列出课程编号、课程名称、选修人数

这一点是让我们从sc表中拿出“课程编号、课程名称、选修人数”,因此我们只要使用下面的命令,就能实现这条命令了。

select ‘课程表’.cno,cname,count(*) from sc

2、使用右外连接查询所有课程的选修情况

扩展:那什么是外连接呢?右外连接又是什么呢?

外连接是合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,还查询到了左表或右表中不匹配的行。

我们知道,在外连接中,两张表有主次关系,一主一次。

右外连接简称右连接,右连接刚好和左连接相反,返回右表的全部记录及左表中符合条件的记录,左表没有匹配的记录用 null 补全。

而右外连接表示 将join关键字右边的这张表看成主表**,**主要是为了将这张表的数据全部查询出来,顺便关联查询左边的表。

由此我们可以写出:

right join course c on c.cno=grade.cno

在这里,c是一个表的别名,它代表着course表。我们的这个语句使用了一个RIGHT JOIN,它会返回grade表中所有的记录和course表中匹配的记录,如果grade表中的记录在course表中没有匹配的记录,那么course表中的相关字段将被设置为NULL。

​ 使用c作为course表的别名,可以方便地引用该表的字段,同时也使SQL语句更易于理解和阅读。

值得注意的是:

​ 在MySQL中,如果你将语句 right join course c on c.cno=grade.cno 中的 c 改为 course,会导致语法错误,因为 course 不是一个有效的表别名或表名,哪怕你在MySQL中已经有一个名为 course 的表,依然会导致语法错误。这是因为在 right join 语句中,你必须为要连接的表提供唯一的表别名或表名,以便 MySQL 能够正确识别它们。

​ 如果你想在 right join 语句中引用已经存在的 course 表,你可以选择另一个不同的表别名,例如:

SELECT *
FROM grade
RIGHT JOIN course c
ON c.cno = grade.cno;

​ 这将使用表别名 c 来引用 course 表,从而避免与已经存在的 course 表名称冲突的问题。

3、对结果进行分组,并返回聚合数据

在MySQL中,GROUP BY语句用于根据一个或多个列对结果集进行分组。这个语句将返回按指定列进行分组的聚合数据,例如计算每个组中行的总数、平均值、最大值等。

在下面这个语句中,c.cnoc.cname表示按照表c中的两个列进行分组。这意味着查询将按照这两个列的值对结果进行分组,并返回每个组的聚合数据。

group by c.cno,c.cname;

​ 具体来说,如果表c包含学生的课程信息,每行代表一门课程,那么该查询将按照课程编号(cno)和课程名称(cname)对课程进行分组,并计算每个组中的行数、平均值、最大值等。

总结

参考代码:

insert into sc values ('1002','160006',76);
select c.cno,cname,count(*) from sc grade right join course c on c.cno=grade.cno
group by c.cno,c.cname;

参考结果:

周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空的解决方法相关推荐

  1. ajax异步获取数据后动态向表格中添加数据(行)

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 [html] view plaincopyp ...

  2. mysql自增列修改方法_如何修改自增列值以及相应的解决方法

    今天工作中遇到特殊的一个任务,就是将两个自增列值的进行对调变更. SQL Server 平台修改自增列值 由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语 ...

  3. python向mysql中添加数据标签_用python在MySQL中写入数据和添加数据

    在笔者之前的博文中,已介绍了用python连接与mysql数据库的知识.包括如何安装python连接mysql的pymysql包,如何通过cusor语句将python与mysql连接起来,以及如何用p ...

  4. MySQL数据库的内连接,左外连接和右外连接查询

    1.首先谈一谈数据库的连接查询有什么作用? 简单的说就是在实际生活中,当我们查询某些数据的时候,一张表不可能为我们提供足够多的数据,其次在数据库的设计的时候,考虑到表的结构和复杂性,会设计多张分类表, ...

  5. eclipse给mysql修改表数据_Eclipse中java向数据库中添加数据,更新数据,删除数据...

    ASP.NET网页动态添加.更新或删除数据行 看过此篇 http://www.cnblogs.com/insus/p/3247935.html的网友,也许明白Insus.NET是怎样实现动态添加数据行 ...

  6. mysql bench建立一张表_使用MySQL Workbench建立数据库,建立新的表,向表中添加数据...

    点击上图中的"加号"图标,新建一个连接, 如上图,先输入数据库的账号密码,帐号默认为root,填好密码后 点击"OK",连接就建立好了,建立完成后,会出现一个长 ...

  7. 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MySQL Workbench建立数据库,建立新的表,为表添加数据. 点击上图中 ...

  8. java窗口向mysql加信息_Java中如何实现向DBC方式向表中添加数据

    原标题:Java中如何实现向DBC方式向表中添加数据 Java中如何实现向DBC方式向表中添加数据 Java程序JDBC方式向数据库的表添加记录的步骤: 1.新建工程: Java Project 2. ...

  9. mysql 存储过程新增表,mysql实例 存储过程中向表中添加数据

    摘要 腾兴网为您分享:mysql实例 存储过程中向表中添加数据,信和财富,视达网,人人视频,企商理财等软件知识,以及电视猫,office2000,贵阳银行,搜电共享充电宝,雅图电影院,达达跑腿,万圣节 ...

最新文章

  1. 如何生成存储器配置文件?
  2. 改mysql修改界定符_dbvisualizer参数设置
  3. Oracle数据库的测试用户Scott的密码为什么是Tiger?
  4. 《C++ Primer》14.3.2节练习(部分)
  5. Java StringBuilder codePointAt()方法与示例
  6. pytorch学习笔记 1. pytorch基础 tensor运算
  7. 【CodeForces - 508B】Anton and currency you all know (思维贪心)
  8. mysql ubuntu 17.04_1、mysql 5.7 ubuntu17.04
  9. 自监督学习在CV领域研究进展总结
  10. 博士笔记 | 周志华《机器学习》手推笔记第三章-线性模型
  11. CSS 渐进增强与优雅降级
  12. android studio for android learning (二)
  13. 飞机大战——图文详解
  14. 大漠插件后台绑定模式备忘录
  15. 自适应模糊PID在反应釜温度控制中的应用
  16. 使用Python连接阿里云物联网
  17. 成功解决wps文档中输入英文单词出现对应英文单词下边红色波浪线(英文拼写自动检测)去掉或加上图文教程
  18. JAVA EE是什么?
  19. xilinx IP 汇总
  20. 说说我们都怎么面试程序员的

热门文章

  1. 重磅!中国工程院撤销李宁院士称号
  2. MATLAB无约束多维极值——最速下降法
  3. Android摄像头开发:拍照后添加相框,融合相框和图片为一副 图片
  4. eBay账号防关联的注意事项
  5. 流程控制——条件判断
  6. Linux shell脚本输出日志的方法和案例
  7. 广汽传祺E9正式上市:豪华旗舰MPV
  8. 与计算机相关的词,每日雅思词汇:与计算机行业相关的雅思词汇
  9. 软考高级之信息系统案例分析七重奏-《1》
  10. BOM对象及offset、client、scroll三大家族