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,即显示左连接、右连接和内连接的并集

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一款MVC5+EF+Bootstrap搭建的后台通用管理系统模板[通俗易懂]

    一款MVC5+EF+Bootstrap搭建的后台通用管理系统模板[通俗易懂]最近闲来无事,就用MVC5+EF+Bootstrap搭建了一个通用的后台管理系统的模板,里面使用到的技术包括:MVC,EF,T4模板批量生成Jquery,jqGridBootstrapDDDAutoMapper等开发工具:VS2015+SQL2012项目框架如下图:项目的效果图如下:JuCheapV2.0源代码http://……

  • java 中几种常用数据结构「建议收藏」

    java 中几种常用数据结构「建议收藏」Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。一、几个常用类的区别 1.ArrayList:元素单个,效率高,多用于查询 2.Vector:元素单个,线程安全,多用于查询 3.LinkedList:元素单个,多用于插入和删除 4.H

  • webstorm 格式化代码及常用快捷键 

    webstorm 格式化代码及常用快捷键 webstorm格式化代码快捷键centOS下Ctrl+Shift+lwindows下Ctrl+Alt+lmac下Option+Command+l查找/代替快捷键说明ctrl+shift+N通过文件名快速查找工程内的文件(必记)ctrl+shift+alt+N通过一个字符快速查找位置(必记)ctrl+F在文件内快速查找代码F3查找下一个shift+F3查找上一个ctrl+R文件内代码替换c…

  • 使用Mxnet基于skip-gram模型实现word2vect

    1.需求使用skipgram模式实现word2vect,然后在jaychou_lyrics.txt数据集上应用jaychou_lyrics.txt数据集收录了周杰伦从第一张专辑到第十张专辑中的

    2021年12月30日
  • plsql安装教程

    plsql安装教程先安装Oracle客户端下载地址:再安装plsqldev下载地址:如果需要汉化,可安装汉化补丁包下载地址:配置数据库找到安装路径,如C:\app\xxx\product\11.2.0\client_1\Network\Admin,将此目录下Sample文件夹里的tnsnames.ora文件移到上层Admin目录下。tnsnames.ora里添加数据库配置AUTOSPD1=(…

  • Java取绝对值(绝对值函数的使用方法)

    在Java中可以使用Math.abs()方法来方便的进行绝对值计算,例如:输入的是正数的时候直接返回即可,当是负数的时候返回它的相反数即可。使用三目运算符可以使用一行代码就能做到intvalue=Math.abs(-90);System.out.println(value);System.out.println(“*********”);inta=-59;System.out.println((a<0)?-a:a);…

发表回复

您的电子邮箱地址不会被公开。

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