left join、right join、inner join、full join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接)  只返回两个表中联结字段相等的行
full join(全连接)  返回包括左表和右表中联结字段相等的记录

举例如下:

--------------------------------------------

表A记录如下:


aID


aNum


1


a20050111


2


a20050112


3


a20050113


4


a20050114


5


a20050115

表B记录如下:


bID


bNum


1


2006032401


2


2006032402


3


2006032403


4


2006032404


8


2006032408

(一)、left join(左联接)

sql语句如下:

select * from A
left join B
on A.aID = B.bID

结果如下:


aID


aNum


bID


bName


1


a20050111


1


2006032401


2


a20050112


2


2006032402


3


a20050113


3


2006032403


4


a20050114


4


2006032404


5


a20050115


NULL


NULL

--------------------------------------------

(所影响的行数为5行)

结果说明:

(1)left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。

(2)换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:A.aID=B.bID)。

(3)B表记录不足的地方均为NULL。

(二)、right join(右联接)

sql语句如下:

select * from A
right join B
on A.aID = B.bID

结果如下:


aID


aNum


bID


bName


1


a20050111


1


2006032401


2


a20050112


2


2006032402


3


a20050113


3


2006032403


4


a20050114


4


2006032404


NULL


NULL


8


2006032408

--------------------------------------------

(所影响的行数为5行)

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充。

(三)、inner join(等值连接)

sql语句如下:


select * from A

inner join B

on A.aID=B.bID


等价:select * from A

join B

on A.aID=B.bID


等价:select * from A,B

where A.aID=B.bID

结果如下:


aID


aNum


bID


bName


1


a20050111


1


2006032401


2


a20050112


2


2006032402


3


a20050113


3


2006032403


4


a20050114


4


2006032404

--------------------------------------------

(所影响的行数为4行)

结果说明:

很明显,这里只显示出了A.aID=B.bID的记录。这说明inner join并不以谁为基础,它只显示符合条件的记录。

(四)、full join(全连接)

sql语句如下:

select * from A
full join B
on A.aID=B.bID

结果如下:


aID


aNum


bID


bName


1


a20050111


1


2006032401


2


a20050112


2


2006032402


3


a20050113


3


2006032403


4


a20050114


4


2006032404


5


a20050115


NULL


NULL


NULL


NULL


8


2006032408

--------------------------------------------

结果说明:

理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)。

注意:

LEFT JOIN操作用于在任何的FROM子句中,组合来源表的记录。使用LEFT JOIN运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

语法:SELECT * FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1,table2参数用于指定要将记录组合的表的名称。

field1,field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。

compopr参数指定关系比较运算符:“=”,“<”,“>”,“<=”,“>=”或“<>”。

如果在INNER JOIN操作中要联接包含Memo数据类型或OLE Object数据类型数据的字段,将会发生错误。

原文地址:https://www.cnblogs.com/shmilyWei/p/9035959.html

时间: 2024-08-01 13:38:08

left join、right join、inner join、full join的区别的相关文章

SQL join中级篇--hive中 mapreduce join方法分析

1. 概述. 本文主要介绍了mapreduce框架上如何实现两表JOIN. 2. 常见的join方法介绍 假设要进行join的数据分别来自File1和File2. 2.1 reduce side join reduce side join是一种最简单的join方式,其主要思想如下: 在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签 (tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2.

inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)区别

sql中的连接查询有inner join(内连接).left join(左连接).right join(右连接).full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果有所不同.例如我们有两张表: Orders表通过外键Id_P和Persons表进行关联. 1.inner join(内连接),在两张表进行连接查询时,只保留两张表中完全匹配的结果集. 我们使用inner join对两张表进行连接查询,sql如下: SELECT p.LastName, p.First

mysql中left join中的on条件 和 where条件区别

需要知道sql中关键字的执行顺序. FROM-> ON->JOIN-> WHERE->GROUP BY-> HAVING->SELECT-> DISTINCT->ORDER BY->LIMIT on在join前边.join在where前边.知道这两点,那就好说了. 注意join中的on是对关联表起作用,不是对主表. 如果想过滤主表中的数据,要用where. 具体案例可以参照:http://xianglp.iteye.com/blog/868957

Sort merge join、Nested loops、Hash join(三种连接类型)

目前为止,典型的连接类型有3种: Sort merge join(SMJ排序-合并连接): 首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序:然后生产probed table需要的数据,然后对这些数据按照与driving table对应的连接操作列进行排序:最后两边已经排序的行被放在一起执行合并操作.排序是一个费时.费资源的操作,特别对于大表.所以smj通常不是一个特别有效的连接方法,但是如果driving table和probed table都已经预先排序

MySQL left join操作中 on与where放置条件的区别

优先级 两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级.on的优先级是高于where的. 1 1 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在left join下,两者的区别: on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table

Oracle表与表之间的连接方式(内连接:inner join 、外连接 全连接: full outer join、左连接:left outer join 、右连接:right outer join、自然连接:natural join)

1 --内连接:INNER JOIN 它表示返回两个表或记录集连接字段的匹配记录,表示两个表中相互包含的部分 2 select * from student inner join sc on student.sno=sc.sno; 3 --外连接(全连接):包含左.右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行.不符合条件的,以空值代替. 4 --全连接:表示两个表组合在一起,左右不相匹配时使用空值替换 5 select * from student full outer join

SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)

掌握了这些,就比较高级啦 Using the Same Table Twice 如下面查询中的branch字段 SELECT a.account_id, e.emp_id, b_a.name open_branch, b_e.name emp_branch FROM account AS a INNER JOIN branch AS b_a ON a.open_branch_id = b_a.branch_id INNER JOIN employee AS e ON a.open_emp_id

【fork/join】java并发编程-fork/join示例

package com.chinamobile.epic.tako.common.graphite.query.sync.impl; import com.google.common.collect.Lists; import java.util.List; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.Recursiv

Spark SQL 之 Join 实现

原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚 2017-07-19 217标签: spark , 数据库 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的. SparkSQL总体流程介绍 在阐述Join实现之前,我们首先简单介绍SparkSQL

Join 和 App

在关系型数据库系统中,为了满足第三范式(3NF),需要将满足"传递依赖"的表分离成单独的表,通过Join 子句将相关表进行连接,Join子句共有三种类型:外连接,内连接,交叉连接:外连接分为:left join.right join.full join:内链接是:inner join,交叉连接是:cross join. 一,Join子句的组成 Join子句由连接表,连接类型和On子句组成,伪代码如下: from Left_Table [inner|left|right|full] jo