`

SQL中的各种JOIN(inner join,full outer join,left join,right join,cross join )

阅读更多

 

SQL中的各种JOINinner join,full outer join,left join,right join,cross join

转自:http://www.blogjava.net/algz/articles/228218.html

SQL中的连接可以分为内连接,外连接,以及交叉连接 (即是笛卡尔积)

a. 交叉连接
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条件从中选择。
因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。


b. 内连接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

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

                          

分享到:
评论

相关推荐

    SQL中的left outer join,inner join,right outer join用法详解

    * FULL OUTER JOIN:LEFT OUTER 和 RIGHT OUTER 中所有行的超集。 内连接(Inner Join) 内连接是最常见的一种连接,它也被称为普通连接,而 E.FCodd 最早称之为自然连接。例如: SELECT * FROM t_institution i ...

    SQL中inner join、outer join和cross join的区别

    根据不同的连接方式,`JOIN`可以分为几种类型,包括`INNER JOIN`、`OUTER JOIN`(左外联接`LEFT JOIN`、右外联接`RIGHT JOIN`以及全外联接`FULL JOIN`)和`CROSS JOIN`。每种类型的`JOIN`都有其独特的应用场景和特点。...

    SQL联合查询inner join、outer join和cross join的区别详解

    这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join....

    inner join-outer join-cross join查询方式总结

    根据连接方式的不同,可以分为内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)以及交叉连接(CROSS JOIN)。下面我们将详细探讨每种连接方式的特点、适用场景及其具体的实现方法。 #### 内...

    sql中join总结

    在SQL查询中,JOIN操作是用于将两个或更多表格的数据结合在一起的关键技术。根据不同的需求,SQL提供了多种类型的JOIN,包括交叉JOIN、内JOIN、左外JOIN、右外JOIN和全外JOIN。以下是对这些JOIN类型的具体解释和示例...

    join on 语句及扩展

    3. RIGHT JOIN (或 RIGHT OUTER JOIN): 右JOIN与LEFT JOIN相反,返回右表的所有记录,即使左表中没有匹配的记录。左表中未找到匹配项的记录将用NULL填充。语法: ```sql SELECT columns FROM table1 RIGHT JOIN ...

    sql语句中join的用法

    下面我们将详细介绍几种常见的JOIN类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN),并通过具体的例子进行说明。 #### 一、内连接(INNER JOIN) 内连接是最常用...

    SQL 之JOIN 用法完全版.rar

    在SQL(Structured Query Language)中,JOIN操作是用于合并两个或更多个表的数据,以便根据它们之间的关联性创建更复杂的查询结果。JOIN是数据库查询中的关键部分,它允许我们在多个表之间建立联系,从而获取更丰富...

    PL/SQL Join实例分析

    在PL/SQL中,全连接可以通过UNION操作结合左连接和右连接来实现,但请注意,这并不完全等同于直接使用FULL OUTER JOIN,因为顺序可能影响结果列的标题。 示例: ``` SELECT * FROM a Aa FULL OUTER JOIN b Bb ON...

    SQL连接JOIN例

    左连接(`LEFT JOIN`/`LEFT OUTER JOIN`)、右连接(`RIGHT JOIN`/`RIGHT OUTER JOIN`)、全连接(`FULL JOIN`/`FULL OUTER JOIN`)、内连接(`INNER JOIN`/`JOIN`)以及交叉连接(`CROSS JOIN`)和自连接。 #### 二、左连接 ...

    表连接 SQL JOIN 速查表

    这里我们将深入探讨几种主要的JOIN类型,包括自然JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN以及CROSS JOIN。 1. **自然JOIN (NATURAL JOIN)**: 自然JOIN是根据两个表中存在的相同列名来匹配并合并数据。在结果集中...

    数据库的外联和内联知识 Inner Join

    在关系数据库管理系统中,SQL 语言提供了多种类型的连接方式,如 inner join、left outer join、right outer join、full outer join、cross join 等。 inner join,也称为等值连接或自然连接,是最常见的一种连接。...

    SQL多表连接查询、多表关联

    sql多表连接查询inner join, left join , right join ,full join ,cross join Posted on 2008-05-07 21:55 我开始懂了 阅读(21431) 评论(9) 编辑 收藏 inner join,full outer join,left join,right jion 内部连接 ...

    SQL之join使用1

    - 外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。 - **左外连接**(Left Join)保留左表(在JOIN语句中位于前面的表)的所有行,即使在右表中没有匹配的行...

    SQL 连接 JOIN 例解左连接,右连接,全连接,内连接,交叉连接,自连接

    本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...

    Oracle SQL连接查询总结.docx

    根据连接的方式不同,可以分为内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN)等几种类型。 #### 二、连接查询类型详解 ##### 1. INNER JOIN (内连接) 内连接是最常用...

    sql-jion 用法

    - **Right Join (Right Outer Join)**:与Left Join相反,右连接以右表为主,返回右表的所有记录,左表中没有匹配的记录时,左表的字段填充NULL。 - **Full Join (Full Outer Join)**:全外连接结合了左连接和右...

    SQL语句中不同的连接JOIN及join的用法

    在LEFT JOIN、RIGHT JOIN或FULL JOIN中,ON条件应用于创建临时表,而WHERE条件则作用于这个临时表,过滤不符合条件的行。 理解这些JOIN类型和它们的用法是SQL查询中至关重要的,因为它们可以帮助我们有效地从多表...

    join的详细用法.doc

    3. **RIGHT JOIN (RIGHT OUTER JOIN)**: 与LEFT JOIN相反,右连接返回所有右表的记录,即使左表没有匹配的记录。左表没有匹配的记录时,结果也会显示NULL。 4. **FULL JOIN (FULL OUTER JOIN)**: 全外连接返回两个...

Global site tag (gtag.js) - Google Analytics