前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库之多表联合查询

数据库之多表联合查询

作者头像
全栈程序员站长
发布2022-08-27 13:28:42
2.2K0
发布2022-08-27 13:28:42
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一、知识点名称

多表联合查询(一对多数据显示、多对多数据展示)

二、知识点业务场景

一对多关联:

学生和成绩的关系

用户与订单的关系

企业与员工的关系

用户与银行卡的关系

多对多关联:

学生和选课的关系

订单和商品的关系

用户和角色的关系

角色和权限的关系

三、知识点业务(原理)

a、多表联合查询的原理

1、先确定数据要用到哪些表。

2、将多个表先通过笛卡尔积变成一个表。

3、然后去除不符合逻辑的数据。(根据两个表的关系去掉)

4、最后当做是一个虚拟表一样来加上条件即可。

!笛卡尔积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X * Y,第一个对象是X的成员

而第二个对象是Y的所有可能有序对的其中一个成员。例如下面:

数据库之多表联合查询
数据库之多表联合查询
数据库之多表联合查询
数据库之多表联合查询

b、多表联合查询的不同方式

1、交叉连接

交叉连接即是笛卡尔积,是指两个关系中所有元组的任意组合。一般情况下,交叉查询是没有实际意义的。

例如:如果希望得到学生表和选课表两个关系模式的乘积,查询语句为: SELECT * FROM 学生表 CROSS JOIN 选课表;

2、内连接

内连接是一种最常用的连接类型。内连接查询实际上是一种任意条件的查询。使用内连接时,如果两个表的相关字段满足

连接条件,就从这两个表中提取数据并组合成新的记录,也就是在内连接查询中,只有满足条件的元组才能出现在结果关系中。

例如:要查询每个已经选课的学生的情况,查询语句为: SELECT * FROM 学生表 INNER JOIN 选课表 ON 学生表.学号 = 选课表.学号;

内连接分类:

1、等值连接:

在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的

重复列。

2、不等连接:

在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值,这些运算符包括>、>=、<=、<、!>

、!<和<>。

3、自然连接:

在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出的查询结果集合中所包括的列,

并删除连接表中的重复列。

3、自连接

如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询就称为自连接查询。同一张表在FROM字句中对多次

出现,为了区别该表的每一次出现,需要为表定义一个别名。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同

一张表,但可以在逻辑上分为两张表。

例如:要求检索出学号为20210的学生的同班同学的信息,查询语句为: SELECT 学生表.* FROM 学生表 JOIN 学生表 AS 学生表1 ON 学生表.班级 = 学生表1.班级 WHERE 学生表1.学号 = ‘20210’;

4、外连接

外连接的查询结果都是满足连接条件的元组。但有时候我们也希望输出那些不满足连接条件的元组信息。比如,我们想

知道每个学生的选课情况,包括已经选课的学生(这部分学生的学号在学生表中有,但在选课表中没有,不满足连接条件),

这时就需要使用外连接。外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接

方式。

外连接的三种方式:

1、左外连接(LEFT OUTER JOIN)

如果在连接查询中,连接管子左端的表中所有的元组都列出来,并且能在右端的表中找到匹配的元组,那么连接成功。

如果在右端的表中,没能找到匹配的元组,那么对应的元组是空值(NULL)。这时,查询语句使用关键字LEFT OUTER

JOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不关左端的表中的互数据

是否满足连接条件,均输出左端表中的内容。

例如:要查询所有学生的选课情况,包括已经选课的和还没有选课的学生,查询语句为: SELECT 学生表.学号,姓名,班级,课程号,成绩 FROM 学生表 LEFT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号;(左外连接查询中左端表中的所有元组的信息都得到了保留)

2、右外连接(RIGHT OUTER JOIN)

右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的

数据是否满足连接条件,均输出表中的内容。

例如:同上例内容,查询语句为: SELECT 学生表.学号,姓名,班级,课程号,成绩 FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号;(左外连接查询中右端表中的所有元组的信息都得到保留)

3、全外连接(FULL OUTER JOIN)

全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用NULL来代替。

例如:同左外连接例子内容,查询语句为: SELECT 学生表.学号,姓名,班级,课程号,成绩 FROM 学生表 FULL OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号;(全外连接查询中所有表中的元组信息都得到了保留)

四、功能实现步骤讲解

创建一张课程表

数据库之多表联合查询
数据库之多表联合查询

创建一张老师表

数据库之多表联合查询
数据库之多表联合查询

创建一张学生表

数据库之多表联合查询
数据库之多表联合查询

创建学生成绩中间表

数据库之多表联合查询
数据库之多表联合查询

1、一对多关联

将两个业务表关联查询,根据不同的需求,使用不同的连接方式,老师和课程表是一对多的关系。

1、内连接

两个表关联的时候,需要通过外键相等将两个表连接起来,如果有其他的条件,在where后面添加and + 条件即可。

所有有关联的数据都会查询出来,没有关联的数据不会显示。

SQL语句如下:

数据库之多表联合查询
数据库之多表联合查询

查询出来的结果:

数据库之多表联合查询
数据库之多表联合查询

2、左连接

两个表左关联的时候,以左表为主,把右表中的相关的记录添加到左表,形成新的表数据,如果有其他条件,可在后面

添加where语句。左表的数据都会查询出来,如果右表有对应的关联数据,则显示,如果没有对应的数据,则显示为null。

SQL语句如下:

数据库之多表联合查询
数据库之多表联合查询

查询出来的结果:

数据库之多表联合查询
数据库之多表联合查询

3、右连接

两个表右关联的时候,以右表为主,把左表中的相关的记录添加到左表,形成新的表数据。 如果有其他条件,可在后

面添加where语句。右表的数据都会查询出来,如果左表有对应的关联数据,则显示,如果没有对应的数据,则显示

为null。

SQL语句如下:

数据库之多表联合查询
数据库之多表联合查询

查询出来的结果

数据库之多表联合查询
数据库之多表联合查询

二、多对多关联

将两个业务表和一个中间表,这三个表进行关丽娜查询,根据不同的需求,使用不同的连接方式。学生和成绩表是多对多的关系。

1、内连接

两个表多对多关联的时候,需要通过关联中间表,使中间表的两个外键分别与两个单表的主键相等,将两个表连接起

来,如果有其他的条件,在where后面添加and+条件 即可。所有有关联的数据都会查询出来,没有关联的数据不会显示。

SQL语句如下:

数据库之多表联合查询
数据库之多表联合查询

查询结果如下:

数据库之多表联合查询
数据库之多表联合查询

2、左连接

三个表左关联的时候,以左表为主,把右表中的相关的记录添加到左表,形成新的表数据,再以新的表数据为主,把

第三个表中的相关的记录添加进来,形成最终的表数据,如果有其他条件,可在后面添加where语句。左表的数据都

会查询出来,如果右表有对应的关联数据,则显示,如果没有对应的数据,则显示为null,新形成的表和第三张表的

关联同理。

SQL语句如下:

数据库之多表联合查询
数据库之多表联合查询

查询出来的结果如下:

数据库之多表联合查询
数据库之多表联合查询

3、右连接

三个表右关联的时候,以右表为主,把左表中的相关的记录添加到右表,形成新的表数据,再以第三个表为主,把新的

表中的相关的记录添加进来,形成最终的表数据,如果有其他条件,可在后面添加where语句。右表的数据都会查询出

来,如果左表有对应的关联数据,则显示,如果没有对应的数据,则显示为null,新形成的表和第三张表的关联同理。

SQL语句如下:

数据库之多表联合查询
数据库之多表联合查询

查询结果如下:

数据库之多表联合查询
数据库之多表联合查询

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145923.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、知识点名称
  • 二、知识点业务场景
    • 一对多关联:
      • 多对多关联:
      • 三、知识点业务(原理)
        • a、多表联合查询的原理
          • b、多表联合查询的不同方式
            • 1、交叉连接
            • 2、内连接
          • 3、自连接
            • 4、外连接
              • 外连接的三种方式:
          • 四、功能实现步骤讲解
            • 1、一对多关联
              • 二、多对多关联
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档