`

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中inner join、outer join和cross join的区别

    对于SQL中inner join、outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right...

    sql中join总结

    SQL中大概有这么几种JOIN:cross joininner joinleft outer joinright outer joinfull outer join他们都是基于cross join(笛卡尔乘积),举例说明

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

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

    join on 语句及扩展

    Join on/inner join on/full join on/full outer join on/left join on/right join on/cross join on; 在使用jion时,on和where条件的区别;

    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语句多表查询

    1、左连接 left join 或 left outer join 2、右连接 right join 或 right outer join 3、完全外连接 full join 或 full outer join 二、内连接 join 或 inner join 三、交叉连接 cross join 四、两表关系为一对多...

    sql 外联、内联简单的例子

    FROM子句关键字 相应的结果集 CROSS JOIN 笛卡尔乘积(所有可能的行对) INNER JOIN 仅对满足连接条件的CROSS中的列 LEFT OUTER JOIN 一个表满足条件的行,...FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集

    Oracle 数据库连接查询SQL语句

    外连接: 全连接(full join)、左连接(left join)、右连接(right join)。 交叉联接(cross join)。 外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)...

    精通SQL数据库连接.doc

    FULL OUTER JOIN ( Product CROSS JOIN Color ) ON Catalog.item = Product.item AND Catalog.item_color = Color.color_name;   成为数据库专家 JOIN声明可以有效地找到你所需要的信息并避免带来麻烦。通过使用...

    经典SQL语句大全

    C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 12、分组:Group by: 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

    你真的会玩SQL吗?内连接、外连接

     外联接(左、右)得到一个表的所有行,及其余表满 足连接条件的行 full | left | right outer join on  交叉联接  在这类联接的结果集内,两个表中每两个可能成对的行占一行。  但是如果在交叉联接中加入...

    超实用sql语句

    C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 12、分组:Group by: 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计...

    sql经典语句一部分

    C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 12、分组:Group by: 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计信息...

    数据库操作语句大全(sql)

    C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 12、分组:Group by: 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计信息...

    MySQL多表查询详解下

    好好吃饭,好好休息,听着很简单,实际落实缺失不那么容易。 继续回顾MySql的多表查询之1999语法 ... 左外(★):LEFT 【OUTER】 右外(★):RIGHT 【OUTER】 全外:FULL 【OUTER】 交叉连接:CROSS =========

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

Global site tag (gtag.js) - Google Analytics