欢迎光临散文网 会员登陆 & 注册

【D1n910】(15/42) C++语言程序设计 - MySQL数据库学习笔记 表连接

2023-04-03 13:28 作者:爱交作业的D1N910  | 我要投稿

正常操作,正常分析,大家好,我是D1N910,这是我观看【MySQL数据库】C++语言程序设计 - MySQL数据库从而整理的学习笔记。我会继续努力的。

本篇 D1n910】(13/42)学习【MySQL数据库】C++语言程序设计 - MySQL数据库的笔记

的主要内容是 表连接!多张表的数据展示!

如果你没看过之前的专栏内容,那么强烈建议一定要先看看再继续往下看


Unit08 表连接

  1. 表连接的类型

  2. 内连接

  3. 外连接

有关于表连接的需求需求:列出学生的信息,包括学号、姓名和班级名称

student: student_no、student_name

classes: class_name

数据在两个不同的表,那么就需要把两个表变成一个大表,然后从这个大表中进行数据的检索。

1.表连接的类型

· 内连接

    符合关联条件的记录被检索出来,不符合条件的被过滤掉

· 外连接

    外连接的结果集 = 内连接的结果集 + 匹配不上的记录


2.内连接

    语法

        > select 字段列表

示例

》列出学生及其所在班级的信息,包括学号、姓名和班级名称

inner 可写可不写


》向班级表和学生表中分别插入测试数据,再次执行查询语句

可以看出刚刚新插入的测试输入,其中张三丰是没有绑定班级的

再次执行查询语句发现没有查出

匹配不上的数据不会出现在结果集中,只有使得连接成立的才会出现在结果集中。


*表的别名

刚才我们学习过表头的别名,这里我们还可以弄表的别名,刚刚说过inner可以省略,那么我们这里省略,然后和表头一样,表名空格然后名字。

下面可以看出信息是和刚刚保持一致的


备注1:表名起别名后,不能再用原表名了,否则会报错。

备注2:若表A中的字段名在表B中未出现,则可省略表A名or表A别名。表B同理。

执行结果

不过不太建议,因为如果没有指定表名的话,会所有的表都找,导致效率低。


三表内连接(后面4表、5表都一样的)

语法

直接用join进行连接即可。

关联条件的数量是连接条件的数量  - 1。超过两张表以后,表的关联条件不是完全无需的。至少要和前面出现的表有关系。


回忆我们数据库模型图,想要测试三表连接的例子,那么肯定要用上 choose 表。

这里插入的时候可能会遇到报错,我自己碰到以下两种

1、choose 有外键限制,如果插入的数据对应主表的数据不一致,那么就插入失败;

2、插入时的内容不是时间格式或者有其他错误,也会插入失败,注意细节。


按照老师的视频,在把一些之前的表清理后,目前有七个表。


根据我们之前的数据库模型图,我们一共有三种不同的三表。

  1. couse、choose和student

  2. couse、choose和teacher

  3. student、choose和teacher

现在用 couse、choose和student 这三张表

任务:列出学生及其选课的信息,包括学号、姓名、选修的课程名和成绩

student: student_no、student_name

choose: score

course: course_name

关联条件1: student.student_no = choose.student_no

关联条件2: course.course_no = choose.course_no

1.写出框架

2.写上表以及关系(注意顺序)

3.写上表名

运行结果

* 如果学生没有选任何一门课,那么就不会在结果中出现


3.外连接

类型

    >左外连接

        左外连接的结果集 = 内连接的结果集 + 左表中匹配不上的记录

   > 右外连接

       右外连接的结果集 =内连接的结果集 +右表中匹配不上的记录

语法

    >左外连接

    >右外连接

注意1:outer  可以省略。

注意2:和内连接不同,这里的 join 左右两张表的顺序会影响结果。


任务1 :左连接示例,列出全部学生的学号、姓名和所在班级名称(没有班级的学生也列出)

student: student_no, student_name

classes: class_name

关联条件:s.class_no == c.class_no;

SQL语句

运行结果,匹配不上班级的张三丰也出来了,只是班级名称用 NULL 填上


任务2:右连接示例,列出全部班级的学生学号、姓名和所在班级名称(没有学生的班级也列出)

student: student_no, student_name

classes: class_name

关联条件:s.class_no == c.class_no;

SQL语句

运行结果,匹配不上学生的2018电子信息1班也出来了,只是学号和姓名用 NULL 填上

恭喜你,掌握了数据库表的设计

你的学习进度为 15/42!

未完待续!


【D1n910】(15/42) C++语言程序设计 - MySQL数据库学习笔记 表连接的评论 (共 条)

分享到微博请遵守国家法律