精华内容
下载资源
问答
  • 自然链接
    千次阅读
    2021-02-01 23:43:34

    在基本查询一节的示例中,我们有从 instructor 和 teaches 表组合信息,匹配条件是 instructor.ID 等于 teaches.ID 的查询,ID 属性是两个表中具有相同名称的所有属性,按照两个表中所有相同名称属性组合实际上是一种通用情况,即 from

    子句中的匹配条件在最自然的情况下需要在所有匹配名称的属性上相等。因此,SQL 提供了完成这种操作的运算,称之为自然连接(natural join)。实际上,SQL 还支持更丰富的连接(join)运算,后面会提到。

    自然连接运算作用于两个关系,并产生一个关系作为结果,不同于两个关系上的笛卡尔积,笛卡尔积将第一个关系的每个元组与第二个关系的所有元组都进行连接;自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对。

    因此,回到 instructor 和 teaches 关系的例子上,它们的自然连接只考虑在唯一共有属性 ID 上取值相同的元组对。

    mysql> select name, course_id

    -> from instructor natural join teaches;

    +------------+-----------+

    | name | course_id |

    +------------+-----------+

    | Srinivasan | CS-101 |

    | Srinivasan | CS-315 |

    | Srinivasan | CS-347 |

    | Wu | FIN-201 |

    | Mozart | MU-199 |

    | Einstein | PHY-101 |

    | El Said | HIS-351 |

    | Katz | CS-101 |

    | Katz | CS-319 |

    | Crick | BIO-101 |

    | Crick | BIO-301 |

    | Brandt | CS-190 |

    | Brandt | CS-190 |

    | Brandt | CS-319 |

    | Kim | EE-181 |

    +------------+-----------+

    15 rows in set (0.01 sec)

    我们知道 from

    子句可以涉及多个关系,现在我们可以说,这些关系也可以是自然连接的结果,这是很直观的,因为自然连接的结果也是一个关系。

    考虑查询,列出教师的名字以及他们讲授课程的名称。

    mysql> select name, title

    -> from instructor natural join teaches, course

    -> where teaches.course_id = course.course_id;

    +------------+----------------------------+

    | name | title |

    +------------+----------------------------+

    | Crick | Intro. to Biology |

    | Crick | Genetics |

    | Srinivasan | Intro. to Computer Science |

    | Katz | Intro. to Computer Science |

    | Brandt | Game Design |

    | Brandt | Game Design |

    | Srinivasan | Robotics |

    | Katz | Image Processing |

    | Brandt | Image Processing |

    | Srinivasan | Database System Concepts |

    | Kim | Intro. to Digital Systems |

    | Wu | Investment Banking |

    | El Said | World History |

    | Mozart | Music Video Production |

    | Einstein | Physical Principles |

    +------------+----------------------------+

    15 rows in set (0.01 sec)

    这个查询首先计算 instructor 和 teaches 的自然连接,如前所见,再计算这个救过和 course 的笛卡尔积,然后按照 where

    子句筛选出结果,注意 where

    子句中的 teaches.course_id 表示自然连接结果中的 course_id 域,这是因为该域最终来自 teaches 关系。

    下面的查询给出的结果虽然在当前模式下相同,但其实是有问题的。

    mysql> select name, title

    -> from instructor natural join teaches natural join course;

    +------------+----------------------------+

    | name | title |

    +------------+----------------------------+

    | Crick | Intro. to Biology |

    | Crick | Genetics |

    | Srinivasan | Intro. to Computer Science |

    | Katz | Intro. to Computer Science |

    | Brandt | Game Design |

    | Brandt | Game Design |

    | Srinivasan | Robotics |

    | Katz | Image Processing |

    | Brandt | Image Processing |

    | Srinivasan | Database System Concepts |

    | Kim | Intro. to Digital Systems |

    | Wu | Investment Banking |

    | El Said | World History |

    | Mozart | Music Video Production |

    | Einstein | Physical Principles |

    +------------+----------------------------+

    15 rows in set (0.00 sec)

    它的问题在于 course 关系和 instructor 关系中都包含了 dept_name 属性,因此它们自然连接的结果要在这个属性上相同,这样的查询会遗漏以下模式的元组对,教师所讲授的课程不是他所在系的课程,前一个查询能够正确输出这样的元组对。

    为了应付这个问题,即在保留自然连接的简洁性的同时规避过多的属性匹配,SQL 提供了一种自然连接的构造形式,允许用户来指定需要哪些列相等。

    mysql> select name, title

    -> from (instructor natural join teaches) join course using (course_id);

    +------------+----------------------------+

    | name | title |

    +------------+----------------------------+

    | Crick | Intro. to Biology |

    | Crick | Genetics |

    | Srinivasan | Intro. to Computer Science |

    | Katz | Intro. to Computer Science |

    | Brandt | Game Design |

    | Brandt | Game Design |

    | Srinivasan | Robotics |

    | Katz | Image Processing |

    | Brandt | Image Processing |

    | Srinivasan | Database System Concepts |

    | Kim | Intro. to Digital Systems |

    | Wu | Investment Banking |

    | El Said | World History |

    | Mozart | Music Video Production |

    | Einstein | Physical Principles |

    +------------+----------------------------+

    15 rows in set (0.00 sec)

    join ... using

    运算中需要给定一个属性名列表,其两个输入中都必须具有指定名称的属性,考虑运算 r1 join r2 using (A1, A2)

    ,它与 r1 和 r2 的自然连接类似,只不过在 t1.A1 = t2.A1

    且 t1.A2 = t2.A2

    的情况下就能匹配 r1 的元组 t1 和 r2 的元组 t2,即使它们都有属性 A3,也不考虑这个属性的事。

    注意:本文来自博客园精华区。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!

    CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。

    更多相关内容
  • 全国自然保护区矢量面数据,包含2000多个数据层,300多个缓冲区边界等,仅适用于学习使用。
  • 超级通俗易懂的自然连接

    万次阅读 多人点赞 2021-09-10 15:04:16
    原题:求两个关系RA和RB的自然连接,书本上的原题是这样的(有点歪,将就一下) 解题思路: 1、首先找到RA 和RB 中相同的列,是不是只有A和C两列是他们都有的; 2、我们就只看两个关系式中的A列和C列所在的行;...

    突然遇到了就记录下来

    原题:求两个关系RA和RB的自然连接,书本上的原题是这样的(有点歪,将就一下

     解题思路:

    1、首先找到Ra 和Rb 中相同的列,是不是只有A和C两列是他们都有的;

    2、我们就只看两个关系式中的A列和C列所在的行;

    3、从Ra开始看,Ra的A,C两列所在第一行值是 ac。于是我们去Rb中找到A,C两列同样值为ac的行;

    4、我们发现Rb中的第一行A,C列的值和Ra中第一行ac的值一样。所以需要将他们连接起来就是:

    a   b  c  a  c  d。但是,需要做去重复处理,所以得到  a  b   c  d (没毛病);

    5、同理,我们继续找RB中符合值为ac的行,发现已经没有了。那么我们继续找Ra中下一个;

    6、Ra中 A,C列所在的第二行值为 b,d 。所以我们又要去RB中找值为b,d的行,找到就串起来。

    所以找到Rb中的第三行 恰好也是b,d。连起来就是 b a d  b  d  g ,需要做去重复处理,得到:

    b a  d  g  

    7、再找Ra中的第三行 A,C列的值,对照Rb,发现没有符合条件的,同理第四行。。。最后结束。

    所以结果为

    展开全文
  • MYSQL自然连接!!!

    千次阅读 2021-06-15 19:47:43
    1.自然连接 (Natural Join) 是一种特殊的内连接,它要求相连接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)。 2.在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列...

    1.自然连接 (Natural Join) 是一种特别的内连接,要求相连接的两张表的连接依据列一定是相同的字段。

    2.在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列去掉, 结果集中两张表中名称一样的列只出现一次。

    3.部分数据库不支持自然连接, 如 SQL Server 等

     语法:select v.*, name, licenseNo  from vehicle v natural join driver d where model like '%DD%'


    下面我们来举个例子:使用自然连接获取所有的线路信息和车辆信息,效果如下:

    用自然连接获得公交二公司的线路信息和车辆信息,效果如下:

    使用自然连接获取车辆型号含有“DD”字样的车辆信息和司机信息,要求车辆信息为全部列,司机信息中只需包含姓名和身份证,效果如下:

    展开全文
  • SQL语法 自然连接 外连接 内连接

    千次阅读 2021-06-23 17:19:31
    文章目录笛卡尔积连接内连接自连接自然连接外连接左外连接右外连接区分连接自然连接 内连接内连接、外连接on 和 where 条件过滤的区别参考链接 笛卡尔积 结果集数目为多个表的所有记录数的乘积 多表关联,不加上...

    笛卡尔积

    • 结果集数目为多个表的所有记录数的乘积
    • 多表关联,不加上过滤条件,得到结果集数目的就是笛卡尔积



    连接

    内连接

    • 使用 INNER JOIN 关键字,典型的多表关联语法
    • ON 过滤条件
      在这里插入图片描述

    自连接

    • 一个表与自身做连接,通过表别名来区分
      在这里插入图片描述

    自然连接

    • 就是普通的多表关联查询,即内部连接,没有左外连接 右外连接
      在这里插入图片描述



    外连接

    左外连接

    • 有 LEFT OUTER JOIN 关键字
    • 左边的表记录全选,右边的表记录可有可没有,若右边的表没有记录,则值为NULL

    右外连接

    • 有 RIGHT OUTER JOIN 关键字
    • 右边的表记录全选,左边的表记录可有可没有,若左边的表没有记录,则值为NULL



    区分连接

    自然连接 内连接

    • 可以认为是同一个东西

    内连接、外连接

    • 都可以用 ON 关键字做提前过滤,来减小关联的数据集大小,再用where关键字
    • 例如
      • 对每个客户下了多少订单进行计数,包括那些至今尚未下订单的客户
      • 对于客户表A,订单表B,此时应该使用左外连接,即 A LEFT OUTER JOIN B

    on 和 where 条件过滤的区别

    • on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
    • where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

    简单来说,在使用INNER JOIN时会产生一个结果集,WHERE条件在这个结果集中再根据条件进行过滤,如果把条件都放在ON中,在INNER JOIN的时候就进行过滤了。

    • 例如

    例子1

    SELECT *
             FROM A
          INNER JOIN B
              ON B.ID = A.ID
              AND B.State = 1
          INNER JOIN C
              ON B.ID = C.ID
    


    例子2

    SELECT *
             FROM A
          INNER JOIN B
              ON B.ID = A.ID
          INNER JOIN C
              ON B.ID = C.ID
             WHERE B.State = 1
    
    • 例子1,在联查B表时,就把状态不等于1的忽略掉了,这样对于状态不等于1的就不需要去联查C表了
    • 例子2,则不管B的状态是否满足,都去联查C,最后再将B状态满足的查出来



    参考链接

    MYSQL 必知必会

    一个破名想半年 | sql语句中join on和where用法的区别和联系

    展开全文
  • ????这里是数据库加油站 ????如果对你有帮助,给博主一个免费的点赞以示鼓励 ...文章目录内连接自然连接和等值连接的区别内连接的实现方式外连接左连接右连接全连接 ...从数学的角度讲就是求两个表的交集,从...自然连接和
  • SQL中的自然连接

    千次阅读 2020-12-22 16:25:14
    自然连接 两张表中,有字段名字和类型一样的,会自然作为连接的条件 语法: select * from 表1 natural join 表2
  • 等值连接与自然连接的区别

    千次阅读 2020-12-04 23:04:20
    等值连接和自然连接相比较,正确的是 A等值连接和自然连接的结果完全相同 B等值连接的属性个数大于自然连接的属性个数 C等值连接的属性个数大于或等于自然连接的属性个数 D等值连接和自然连接的连接条件相同 等值...
  • 1、自然连接(natural join) 自然连接是一种特殊的等值连接,他要求两个关系表中进行连接的必须是相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列。 select * from student NATURAL ...
  • 上面的等值连接进行比较的都是B属性, 但还可以进行R.B = S.E等值连接, 而自然连接只能是同名属性组 四,总结 1. 等值连接必须要有等值的条件,当条件不同时连接的结果也不相同,两个关系可以没有相同的属性...
  • 基于词链接自然语言处理技术及其应用研究 LSTM RNN CTC NLP
  • 剖析笛卡尔积与自然连接
  • 一、测试用例 其中学生表有两个属性学号(Sno)、姓名(Sname),选课表有两个属性课程号(Cno)、学号(Sno). 二、区别 ... 自然连接(natural join) ...内连接与自然连接的 区别就是保留重复的列属...
  • 一、什么是联接 1、什么... 除了以上三种类型的联接之外,我们有时还能听到一种联接叫“自然联接”,其实,自然联接不是一种联接的类型,而像是一种联接的规范,只要满足联接过后,两张表没有重复的列,就是自然联接。
  • 数据库中自然连接与内连接的区别

    千次阅读 2018-07-20 16:52:08
    自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉  等值连接表示为RA=BS,自然连接表示为RS;自然连接是除去重复属性的等值连接。两者之间的区别...
  • 自然连接是一种特殊的等值链接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。 比如这个通俗来说: 看R和S,两者第一行,都有个B,那么第一行可以很自然地接上,根据定义,...
  • 自然连接 natural join                 我们来看一个超级简单的例子(下面的地址单词写错了,每个图都要重改太麻烦了):         现在有两个表,一...
  • 常见的联结有自连接、自然连接、内连接、外联结、完全连接等等。本文以SQLite数据库作为实例讲解,创建了一个名为product的数据库用来存储产品信息。数据库中有两个表,一个productinfo,用来存储每一种产品的详细...
  • 新版“用深度学习进行自然语言处理”以深度学习为中心,包含更多的传统自然语言处理的内容。丰富的学习资源,比如PPT, 讲义,代码和课程报告,是非常好的自然语言入门课程,分享给下载积分少的朋友!
  • θ连接、自然连接、更名操作

    千次阅读 2018-04-24 20:44:11
    自然连接(最常见的连接方式): θ 连接操作中, θ为"="的特殊情况 数学描述: 文字描述: 要求关系R和关系S必须有相同的属性 组 B(B1, B2, …) R和S的属性组B的值完全相同的元组才能够连接 要在结果中去掉重复的...
  • 全外链接:MySQL不支持,Oracle支持  select columns from table1 full join table2 on table1.col = table2.col; 自然连接:两张表中的名称和类型完全一致的列进行内连接  select columns from table1 ...
  • VC数据库连接查询

    2012-12-01 19:59:51
    简单VC对数据库连接查询操作案例 代码里修改你所要连的数据库
  • 数据库关系运算:自然连接,投影,交,除,并

    万次阅读 多人点赞 2019-04-23 21:49:07
    1.自然连接 自然连接(natural join) 自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。 sql语句:Select …… from 表1 ...
  • 1. 笛卡尔积 ...在等值联接(以公共属性值相等为条件)的基础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转化成笛卡尔积 直接上图 Student表: Score表: 1. 笛卡...
  • 1. 自然连接(*natural join)* 自然连接不用指定连接列,也不能使用ON语句,它默认比较两张表里相同的列, `SELECT*FROM student NATURAL JOIN score;` 显示结果如下: 2. 内连接(inner join) 和自然...
  • 机器学习、深度学习、自然语言处理、计算机视觉顶级期刊的论文资料分享(附CVPR2017-2019,ECCV 2018论文下载链接)-附件资源
  • 自然连接和等值连接的区别

    千次阅读 2016-04-29 09:22:20
    自然连接一定是等值连接,反之刚不成立。 那么自然连接较等值连接有什么特点: 1.自然连接中必须有相同的属性名的分量,用相同的属性名的分量进行等值连接。 2.自然连接要把比较的属性去掉。也就是去掉相同的...
  • 自然连接则是在等值联接(以公共属性值相等为条件)的基础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转化成笛卡尔积 内连接分:等值连接 不等值连接 自然连接 外连接分:左外连接 ...
  • 笛卡尔积,自然连接,外连接

    千次阅读 2017-06-19 10:36:03
    笛卡尔积:又称直积: 我自己的理解: 表示A ,B两集合各抽出一个元素,遵循A中元素在前,B中元素在后的,所有可能的集合 A={a, c},集合B={0, 1, 2},则两个集合的...自然连接的结果:将属性求或操作保留,将公共
  • 关系数据库---自然连接

    万次阅读 多人点赞 2016-09-07 17:53:31
    首先来看自然连接的定义: 自然连接:是一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。一个简单的例子,将下列关系R和S进行自然连接:R: A B C a b c...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 301,990
精华内容 120,796
关键字:

自然链接