外链论坛

 找回密码
 立即注册
搜索
查看: 46|回复: 3

sql中的上下相关、全相关、自相关

[复制链接]

2832

主题

316

回帖

9191万

积分

论坛元老

Rank: 8Rank: 8

积分
91919718
发表于 2024-8-4 15:01:25 | 显示全部楼层 |阅读模式

首要来个图例:

left join(左联接) 返回包含左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包含右表中的所有记录和左表中联结字段相等的记录

inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下:

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

表A记录如下:

aID     aNum

1     a20050111

2     a20050112

3     a20050113

4     a20050114

5     a20050115

表B记录如下:

bID     bName

1     2006032401

2     2006032402

3     2006032403

4     2006032404

8     2006032408

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

1.left join

sql语句如下:

select * from A

left join B

on A.aID = B.bID

结果如下:

aID     aNum     bID     bName

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

5     a20050115    NULL     NULL

(所影响的行数为 5 行)

结果说明:

left join是以A表的记录为基本的,A能够看成左表,B能够看成右表,left join是以左表为准的.

换句话说,左表(A)的记录将会所有暗示出来,而右表(B)只会表示符合搜索要求的记录(例子中为: A.aID = B.bID).

B表记录不足的地区均为NULL.

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

2.right join

sql语句如下:

select * from A

right join B

on A.aID = B.bID

结果如下:

aID     aNum     bID     bName

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

NULL     NULL     8     2006032408

(所影响的行数为 5 行)

结果说明:

仔细观察一下,就会发掘,和left join的结果刚好相反,这次是以右表(B)为基本的,A表不足的地区用NULL填充.

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

3.inner join

sql语句如下:

select * from A

innerjoin B

on A.aID = B.bID

结果如下:

aID     aNum     bID     bName

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

结果说明:

显著,这儿表示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基本,它只表示符合要求的记录.

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

注:

LEFT JOIN操功效于在任何的 FROM 子句中,组合源自表的记录。使用 LEFT JOIN 运算来创建一个左边外边联接。左边外边联接将包括了从第1个(左边)起始的两个表中的所有记录,即使在第二个(右边)表中并相符值的记录。

连接要求可在FROM或WHERE子句中指定,意见在FROM子句中指定连接要求。WHERE和HAVING子句能够包括搜索要求,以进一步筛选连接要求所选的行。

连接可分为以下几类:

内连接。(典型的连接运算,运用像 = 或 <> 之类的比较运算符)。包含相等连接和自然连接。

内连接运用比较运算符按照每一个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。

外连接。外连接能够是左向外连接、右向外连接或完整外边连接。

在FROM子句中指定外连接时,能够由下列几组关键字中的一组指定:

LEFT JOIN 或 LEFT OUTER JOIN。

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

RIGHT JOIN 或 RIGHT OUTER JOIN。

右向外连接是左向外连接的反向连接。将返回右表的所有行。倘若右表的某行在左表中匹配行,则将为左表返回空值。

FULL JOIN 或 FULL OUTER JOIN。

完整外边连接返回左表和右表中的所有行。当某行在另一个表中匹配行时,则另一个表的选取列表列包括空值。倘若表之间有匹配行,则全部结果集行包括基表的数据值。

交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接叫作作笛卡尔积。

例如,下面的内连接检索与某个出版商居住在相同州和城市的作者:

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors AS a INNER JOIN publishers AS p

ON a.city = p.city

AND a.state = p.state

ORDER BY a.au_lname ASC, a.au_fname ASC

FROM 子句中的表或视图可经过内连接或完整外边连接按任意次序指定;然则,用左或右向外连接指定表或视图时,表或视图的次序很重要。相关运用左或右向外连接摆列表的更加多信息,请参见运用外连接。

例子:

a表 id name b表 id job parent_id

1 张3 1 23 1

2 李四 2 34 2

3 王武 3 34 4

a.id同parent_id 存在关系

内连接

select a.*,b.* from a inner join b on a.id=b.parent_id

结果是

1 张3 1 23 1

2 李四 2 34 2

左连接

select a.*,b.* from a left join b on a.id=b.parent_id

结果是

1 张3 1 23 1

2 李四 2 34 2

3 王武 null

右连接

select a.*,b.* from a right join b on a.id=b.parent_id

结果是

1 张3 1 23 1

2 李四 2 34 2

null 3 34 4

完全连接

select a.*,b.* from a full join b on a.id=b.parent_id

结果是

1 张3 1 23 1

2 李四 2 34 2

null 3 34 4

3 王武 null





上一篇:意见保藏!这份MySQL 连接查询超全详解送给你
下一篇:数据库的平常的各样连接解释
回复

使用道具 举报

3129

主题

3万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968654
发表于 2024-9-29 07:38:31 | 显示全部楼层
你的见解独到,让我受益匪浅,期待更多交流。
回复

使用道具 举报

3037

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109078
发表于 2024-10-20 02:54:00 | 显示全部楼层
谢谢、感谢、感恩、辛苦了、有你真好等。
回复

使用道具 举报

2940

主题

3万

回帖

9997万

积分

论坛元老

Rank: 8Rank: 8

积分
99979445
发表于 7 天前 | 显示全部楼层
这夸赞甜到心里,让我感觉温暖无比。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-20 17:46 , Processed in 0.121022 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.