11-mysql数据查询语言(DQL)-连接查询

本文详细介绍了数据库中的连接查询,包括交叉连接、内连接、左外连接、右外连接和全外连接的概念和语法。通过实例展示了如何使用这些连接方式从多个表中获取所需数据,强调了内连接在实际应用中的意义。连接查询是数据库操作中的重要部分,对于数据检索和分析至关重要。
摘要由CSDN通过智能技术生成

连接查询

基本含义

连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。

将两个表以“并排”的方式,连接起来,成为“更多字段”的一个新表。

根据连接的不同方式和条件的不同,得到的新表的行数会有不同。

实际上,两个表的完全连接是这样的一个过程:

左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后得到所有数据行的结果。

注意:连接之后,并非形成了一个新的数据表,而只是一种“内存形态”。

如图所示,两个独立表及连接示意图:

在这里插入图片描述

连接之后:在这里插入图片描述

连接语法的基本形式

from 表1  [连接方式]  join 表2  [on 连接条件];

连接的结果可以当作一个“表”来使用。常用有以下几种连接方式:

交叉连接

语法

from 表1 [cross] join 表2;

注意:交叉连接只是没有on条件而已。cross这个词也可以省略,还可以使用inner这个词代替。

交叉连接:连接的结果其实是两个表中的所有数据“两两对接”。这种连接通常也被叫做“笛卡尔积”。

实际上,交叉连接是将两个表不设定任何条件的连接结果。

表1:在这里插入图片描述

表2:在这里插入图片描述

交叉连接:在这里插入图片描述

内连接

语法

from  表1  [inner]  join  表2  on  连接条件(表1.字段1=表2.字段2);

含义:找出(过滤)在交叉连接的结果表中表1的字段1的值等于表2的字段2的值的那些行。

内连接:inner关键字可以省略,也可以用cross代替。

on 连接条件是设定在连接后所得到的数据表中,设定一个条件以取得所需要的数据。

通常连接都是指两个有关联的表,则连接条件就是这两个表的关联字段的一个关系(通常都是相等关系)。

如果没有设定此条件,则表示将左表的 m 行数据跟右表 n 行数据进行“完全连接”,结果就会有 m*n 行数据,这通

常都不是应用所需。

示例

在这里插入图片描述

交叉连接的“无意义性”

select * from product join product_type where 1

在这里插入图片描述

内连接的“有意义性”

select * from product as t1 join product_type as t2 on t1.protype_id = t2.protype_id where 1

在这里插入图片描述

可见,在现实的常见需求中,上述内连接的结果就都是“有意义”的数据。

也可以指定只列出其中部分字段:

SELECT t1.pro_id, pro_name, price, t2.protype_name FROM product as t1 join product_type as t2 on t1.protype_id=t2.protype_id WHERE 1

结果:

在这里插入图片描述

左[外]连接

语法

from 表1 left [outer] join 表2 on 连接条件;

# left是关键字,连接条件跟内连接一样

含义:内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应本应放右边表的字段的位置就自动补为“null”值。

在这里插入图片描述

则左连接结果为:

在这里插入图片描述

左外连接:将左边的表的数据跟右边的表的数据以给定的条件连接,并将左边的表中无法满足条件的数据也一并取得——即左边的表的数据肯定都取出来了。

注意:此连接的on条件是必须写的。

示例:

在这里插入图片描述

右[外]连接

语法

from 表1 right [outer] join 表2 on 连接条件;

# right是关键字,连接条件跟内连接一样

含义:在内连接的结果基础上,加上右边表中所有不符合连接条件的数据,相应本应放左边表的字段的位置就自动补为“null”值。

在这里插入图片描述

右外连接:将左边的表的数据跟右边的表的数据以给定的条件连接,并将右边的表中无法满足条件的数据也一并取得——即右边的表的数据肯定都取出来了。

注意:此连接的on条件是必须写的。

示例:

在这里插入图片描述

全[外]连接

语法

from  表1  full  [outer]  join  表2  on  连接条件;

含义:其实是左右连接的“并集”(消除重复项),即内连接的结果,加上左表中不满足条件的所有行(右边对应补null),再加上,右表中不满足条件的所有行(左边对应补null)。

注意:mysql中其实不支持全[外]连接语法,即mysql这个软件本身不支持全连接的语法。此概念在其他数据库有的支持。

连接查询示例

原始数据:

在这里插入图片描述

在这里插入图片描述

  1. 找出索尼4G手机所属类别名称:

在这里插入图片描述

  1. 找出所有属于手机数码的产品:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值