SQL的各种连接(cross join、inner join、full join)的用法理解

SQL的各种连接(cross join、inner join、full join)的用法理解

SQL中的连接可以分为内连接,外连接,以及交叉连接 。

1. 交叉连接CROSS JOIN

如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;

举例,下列A、B、C 执行结果相同,但是效率不一样:

A:SELECT * FROM table1 CROSS JOIN table2

B:SELECT * FROM table1,table2

 

C:select * from table1 a inner join table2 b

A:select a.*,b.* from table1 a,table2 b where a.id=b.id

B:select * from table1 a cross join table2 b where a.id=b.id (注:cross join后加条件只能用where,不能用on)

C:select * from table1 a inner join table2 b on a.id=b.id

一般不建议使用方法A和B,因为如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。 

因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。

2. 内连接INNER JOIN

两边表同时符合条件的组合

如果仅仅使用

SELECT * FROM table1 INNER JOIN table2

内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。

但是通常情况下,使用INNER JOIN需要指定连接条件。

 

***************关于等值连接和自然连接

等值连接(=号应用于连接条件, 不会去除重复的列)

自然连接(会去除重复的列)

数据库的连接运算都是自然连接,因为不允许有重复的行(元组)存在。

例如:

SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column

3. 外连接OUTER JOIN

指定条件的内连接,仅仅返回符合连接条件的条目。

外连接则不同,返回的结果不仅包含符合连接条件的行,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。

1)左外连接LEFT [OUTER] JOIN

显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL

例如

SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column

2)右外连接RIGHT [OUTER] JOIN

显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL

例如

SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column

3)全外连接full [outer] join

显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AJAX 不同请求事例

    AJAX 不同请求事例AJAX 不同请求事例

    2022年4月24日
    40
  • MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法

    MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法一、MySQL日期和时间戳的转换1.日期转时间戳selectUNIX_TIMESTAMP(‘2018-12-2512:25:00’);结果:15457119002.时间戳转日期:FROM_UNIXTIME(unix_timestamp)–unix_timestamp为时间戳selectFROM_UNIXTIME(1545711900);结果:2018-12-…

    2022年6月15日
    37
  • TypeScript(1)介绍与安装[通俗易懂]

    TypeScript(1)介绍与安装[通俗易懂]前言由于最近在使用vue3写项目,使用vue3的前提就是要学习TypeScript,TypeScript算是JavaScript的升级版,TypeScript包含JavaScript和自己的一些特性

    2022年7月31日
    9
  • SQL连接操作符介绍(循环嵌套, 哈希匹配和合并连接)

    SQL连接操作符介绍(循环嵌套, 哈希匹配和合并连接)

    2021年11月28日
    55
  • 模型视图矩阵和投影矩阵_马尔可夫模型

    模型视图矩阵和投影矩阵_马尔可夫模型1概述机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统工作的基本过程是获取目标的图像后,对图像进行识别、特征提取、分类、数学运算等分析操作,并根据图像的分析计算结果,来对相应的系统进行控制或决策的过程。在很多机器视觉应用中,都需要用到机器视觉测量,即根据目标的图像,来得到目标在实际空间中的物理位置,最典型的如行走机器人、SLAM等。要根据图像中的目标像素位置,得到目标的物理空间位置,我们需要首先有一个图像像素坐标与物理空间坐标的映射关系,这种能够表达空间位置如何映射到图像像素位置的数学公式,就

    2022年10月5日
    3
  • js的onchange(js replace函数)

    jsonpropertychange函数当一个HTML元素的属性用js改变的时候,都能通过onpropertychange来捕获。例如一个<inputname=”text1″id=”text1″/>对象的value属性被页面的脚本修改的时候,onchange无法捕获到,而onpropertychange却能够捕获。也就是说:onpropertychange事…

    2022年4月17日
    149

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号