您的位置:首页 > 数据库

数据库中查询的各种连接(左连接,右连接,全连接,内连接,交叉连接,自连接)

2016-04-12 17:27 267 查看
左右连接其实就是以哪个表为主(或者说为准),结果集为“主表”的全部记录+“副表”与“主表”相匹配的记录,如果“副表”中没有和“主表”相匹配的记录,则相对应的记录显示为NULL

左连接:左边表全部行+右边表相匹配的行,如果左边表中的某一行,在右边表中没有匹配的行,则显示NULL(left join 或者left outer join)

右连接:和左连接相反。(right join 或者right outer join)

内连接:它返回字段ID(连接条件)同时存在于两个表中的记录,也就是说,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行,内联接消除与另一个表中的任何行不匹配的行。(inner join或者join)

全连接:不管匹配不匹配,全部都显示出来。(full join或者full outer join)

交叉连接:没有WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(cross join不带where)

自连接:给自己取个别名,一个表当两个表来使用。

-------------------------------------

例子

Table A

aid adate

1 a1

2 a2

3 a3

TableB

bid bdate

1 b1

2 b2

4 b4

两个表a,b相连接,要取出id相同的字段

select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.

此时的取出的是:

1 a1 b1

2 a2 b2

那么left join 指:

select * from a left join b on a.aid = b.bid

首先取出a表中所有数据,然后再加上与a,b匹配的的数据

此时的取出的是:

1 a1 b1

2 a2 b2

3 a3 空字符

同样的也有right join

指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据

此时的取出的是:

1 a1 b1

2 a2 b2

4 空字符b4

LEFT JOIN 或LEFT OUTER JOIN。

左向外联接的结果集包括LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

SQL:JOIN之完全用法

外联接可以是左向外联接、右向外联接或完整外部联接。在FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或LEFT OUTER JOIN。

左向外联接的结果集包括LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

RIGHT JOIN 或RIGHT OUTER JOIN。

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL JOIN 或FULL OUTER JOIN。

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何WHERE 或HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: