SQL中join的不同类型:
- INNER JOIN:仅返回匹配的行
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN:左右外连接结果的并集
分类:
内连接:包括等值连接和自然连接,使用=,<>之类的比较运算符
等值连接:必须要有等值的条件,列的属性可以不同,条件不同时连接结果也不同;
自然连接:必须要有相同的列属性。
例如:
M:A B N:B C
1 2 2 1
3 3 7 2
5 9 3 5
等值连接(M.A=N.C)
A M.B N.B C
1 2 2 1
5 9 3 5
等值连接(M.B=N.B)
A M.B N.B C
1 2 2 1
3 3 3 5
自然连接
A B C
1 2 1
3 3 5
外连接:包括左外连接,右外连接和完整外连接
交叉连接(cross join):又称笛卡尔积,返回左表中的所有行,左表中每行与右表中的所有行组合,即缺少连接谓词或连接谓词总为真的内连接。
--交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。
大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。
--若表A有3条记录,表B有6条记录,则笛卡尔连接后会得到3*6=18条结果
注:在交叉连接中没有on条件子句
INNER JOIN
仅取出匹配的数据
select * from a inner join b on a.aid = b.bid
注:inner和inner join等价,则inner可省略,a.aid和b.bid字段无需名称相同,但必须数据类型相同
LEFT JOIN
首先取出a表中所有数据,然后再加上与a,b匹配的的数据,b没有的为null
select * from a left join b on a.aid = b.bid
注:left outer join与left join等价,左连接属于外连接默认是outer属性,outer是相对于inner而言的,所以可以省略
RIGHT JOIN
首先取出b表中所有数据,然后再加上与a,b匹配的的数据 ,a没有的为null
select * from a right join b on a.aid = b.bid
FULL JOIN
首先取出a表和b表中所有数据,然后再加上a与b中没有匹配上的数据,空缺的值为null
其他相关:
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,on和where条件的区别如下:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
————————待求证?
外关联是Oracle数据库的专有语句
一般说来,外关联的等值条件等效于Left Outer Join中的on语句;两个where中其他语句是一样的。
但是Left Outer Join中的其他条件(非表连接)出现在On关键词后面还是出现在Where关键词后面是不一样的,这样的语句很难用外关联进行同义转义。
本文介绍了SQL中的JOIN连接类型,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。INNER JOIN返回匹配的行,LEFT JOIN保留左表所有行并补充右表匹配数据,RIGHT JOIN则保留右表所有行,而FULL JOIN结合了内外连接的结果。此外,讨论了ON和WHERE子句在LEFT JOIN中的区别,并提到了外关联在Oracle数据库中的应用。

825

被折叠的 条评论
为什么被折叠?



