innner_join_and_outer_join

left joinleft outer join写,left joinouter属性的。

Inner Join
Inner Join
逻辑运算符返回足第一个(端)入与第二个(底端)接的每一行。个和用select查询多表是一的效果,所以很少用到;
outer join
会返回每个足第一个(端)入与第二个(底端)入的接的行。它返回任何在第二个入中没有匹配行的第一个入中的行。关就是后面那句,返回的多一些。所以通常意上的left join就是left outer 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 ,即 示左 接、右 接和内 接的并集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值