`
Blackbaby
  • 浏览: 180638 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

inner join,full outer join,left join,right join,cross join

阅读更多


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

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

 

链接:http://hi.baidu.com/magickerr/blog/item/393c0a01aa13290b7aec2c63.html

分享到:
评论

相关推荐

    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的区别

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

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

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

    sql中join总结

    SQL中大概有这么几种JOIN:cross joininner joinleft outer joinright outer joinfull outer join他们都是基于cross 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 内部连接 ...

    万里长城第一步-先来学好数据库之MySQL上.docx

    在这个学习资源中,我们将学习七种基本的Join查询类型:inner join、left join、right join、full join、left outer join、right outer join和cross join。 3. 创建表: 在学习Join查询之前,我们需要了解如何创建...

    sql 外联、内联简单的例子

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

    SQL语句多表查询

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

    Oracle 数据库连接查询SQL语句

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

    SQL语言查询基础:连接查询 联合查询 代码

    连接类型可以分为三种:内连接(INNER JOIN)、外连接(LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN)和交叉连接(CROSS JOIN)。 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些...

    精通SQL数据库连接.doc

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

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

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

    SQL连接查询介绍

    外连接(LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN)返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左表、右表或两个表中的所有数据行。 交叉连接(CROSS JOIN)返回被连接的两个表所有数据...

    MySQL多表查询详解下

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

    超实用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语句大全

    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: 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计信息...

Global site tag (gtag.js) - Google Analytics