内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
全外连接:左外连接 union 右外连接。
示例:
数据库版本:Oracle
表TESTA,TESTB,TESTC,各有A, B两列。
A.内连接
内连接,即最常见的等值连接,例:
SELECTFROM TESTA,TESTB
WHERE TESTAA=TESTBA
结果:
B外连接
外连接分为左外连接,右外连接和全外连接。
1. 左外连接 left outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
SELECTFROM TESTA
LEFT OUTER JOIN TESTB
ON TESTAA=TESTBA
结果:
三个表做左外链接:
SELECTFROM TESTA
LEFT OUTER JOIN TESTB
ON TESTAA=TESTBA
LEFT OUTER JOIN TESTC
ON TESTAA=TESTCA
结果:
2. 右外连接 right outer join 或者 right join
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECTFROM TESTA
RIGHT OUTER JOIN TESTB
ON TESTAA=TESTBA
3全外连接 full outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。
SELECTFROM 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的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)