数据库的内连接和外连接有什么区别

数据库的内连接和外连接有什么区别,第1张

内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

全外连接:左外连接 union 右外连接。

示例:

数据库版本:Oracle

表TESTA,TESTB,TESTC,各有A, B两列。

A.内连接

内连接,即最常见的等值连接,例:

SELECT  

FROM TESTA,TESTB

WHERE TESTAA=TESTBA

结果:

B外连接

外连接分为左外连接,右外连接和全外连接。

1.  左外连接 left outer join 或者 left join

左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

SELECT 

FROM TESTA 

LEFT OUTER JOIN TESTB 

ON TESTAA=TESTBA

结果:

三个表做左外链接:

SELECT 

FROM TESTA 

LEFT OUTER JOIN TESTB 

ON TESTAA=TESTBA

LEFT OUTER JOIN TESTC

ON TESTAA=TESTCA

结果:

2. 右外连接 right outer join 或者 right join

右外连接是在等值连接的基础上加上被连接表的不匹配数据

SELECT 

FROM TESTA 

RIGHT OUTER JOIN TESTB 

ON TESTAA=TESTBA

3全外连接 full outer join 或者 full join

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。

SELECT  

FROM TESTA 

FULL OUTER JOIN TESTB

ON TESTAA=TESTBA

结果:

需要右表中全部内容,左表允许为空时用右外连接

需要左表中全部内容,右表允许为空时用左外连接

例如

emp表有如下字段

ename /did

Rafferty /31

Jones /33

Steinberg /33

Robinson /34

Smith /34

Jasper /NULL

Dept 表有如下字段

did /dName

31 /Sales

33 /Engineering

34 /Clerical

35 /Marketing

如果要查询的内容包括dept表中为空的情况,则用emp表左外连接dept表:

SELECT FROM emp LEFT OUTER JOIN dept

ON empdid = deptdid

empename /empdid /deptdname /deptdid

Jones /33 /Engineering /33

Rafferty /31 /Sales /31

Robinson /34 /Clerical /34

Smith /34 /Clerical /34

Jasper /NULL /NULL /NULL

Steinberg /33 /Engineering /33

如果要查询的内容包括emp表中为空的情况,则用emp表右外连接dept表:

SELECT FROM emp RIGHT OUTER JOIN dept

ON empdid = deptdid

empename /empdid /deptdname /deptdid

Smith /34 /Clerical /34

Jones /33 /Engineering /33

Robinson /34 /Clerical /34

Steinberg /33 /Engineering /33

Rafferty /31 /Sales /31

NULL /NULL /Marketing /35

数据库中join的用法的用法你知道吗?下面我就跟你们详细介绍下数据库中join的用法的用法,希望对你们有用。

数据库中join的用法的用法如下:

一、join的用法

内连接、外连接

示例用表:

雇员表(Employee)

LastNameDepartmentID

Rafferty31

Jones33

Steinberg33

Robinson34

Smith34

JasperNULL

部门表(Department)

DepartmentID部门

31销售部

33工程部

34书记

35市场部

1、内连接:相等连接、自然连接、交叉连接

1)、显式的内连接与隐式连接(inner join == join )

显示连接:SELECT   from   employee join  department on employeeDepartmentID = departmentDepartmentID

等价于:

隐式连接:SELECT   from   employee,department WHERE employeeDepartmentID = departmentDepartmentID

注:当DepartmentID不匹配,就不会往结果表中生成任何数据。

2)、相等连接

提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。

SELECT   from   employee join  department  using (DepartmentID)

注:与显式连接不同在于:DepartmentID只显示一列

3)、自然连接

比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。

自然连接得到的结果表中,两表中名称相同的列只出现一次

select from employee natural join department

注:在 Oracle 里用 JOIN USING 或 NATURAL JOIN 时,如果两表共有的列的名称前加上某表名作为前缀,

则会报编译错误: "ORA-25154: column part of USING clause cannot have qualifier"

或 "ORA-25155: column used in NATURAL join cannot have qualifier"

4)交叉连接(又称笛卡尔连接)

如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B

显示连接:

select from employee cross join department

等价于

隐式连接:

select from employee,department

2、外连接

并不要求连接的两表的每一条记录在对方表中都一条匹配的记录。

1)左连接(left outer join == left join)

若A表与B表左连接,A表对就的B表没有匹配,连接 *** 作也会返回一条记录,对应值为NULL。

如:

Jaspernull null null

Jones3333工程部

Rafferty3131销售部

Robinson3434书记

Smith3434书记

Steinberg3333工程部

若A表对应B表中有多行,则左表会复制和右表匹配行一样的数量,并组合生成连接结果。

如:select from department  left join employee  on employeedepartmentId = departmentdepartmentId

31销售部Rafferty31

33工程部Jones33

33工程部Steinberg33

34书记Robinson34

34书记Smith34

35市场部nullnull

2)、右连接(right outer join == right join)

与左连接同(略)

3)、全连接(full outer join ==full join)

是左右外连接的并集 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 即以 NULL 填充。

select from employee full outer join department on employeedepartmentId = departmentdepartmentId

注:一些数据库系统(如 MySQL)并不直接支持全连接, 但它们可以通过左右外连接的并集(参: union)来模拟实现

和上面等价的实例:

select from employee left join department on employeedepartmentId = departmentdepartmentId

union all

select from employee right join department on employeedepartmentId = departmentdepartmentId

注:SQLite 不支持右连接。

可以,数据库连接方式

自然连接(natural join)

内连接(inner join)

左外连接(left outer join)

右外连接(rignt outer join)

全外连接(full join)

数据表

跨表的连接,一般直接用JOIN ON 也可以用的比较多,因为得到的数据不会出现多余的空数据。

比如A表

AID ANAME

1 111

2 222

3 333

B表

BID BNAME

1 AAA

2 BBB

4 CCC

用join on SELECT FROM A JOIN B ON AAID=BBID出来的只是出现 AID=BID

也可以用right join right join

以上就是关于数据库的内连接和外连接有什么区别全部的内容,包括:数据库的内连接和外连接有什么区别、在对数据库 *** 作中,什么时候用右外联接查询什么情况用左外联接、数据库中join的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10164564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存