SQL常用的几种连接(JOIN)小结

SQL常用的几种连接(JOIN)小结,第1张

连接运算是8种关系运算中的一种。

五种JOIN方式:

1.INNER JOIN or JOIN2.OUTER JOIN

2.1LEFT OUTER JOIN or LEFT JOIN

2.2RIGHT OUTER JOIN or RIGHT JOIN

2.3FULL OUTER JOIN or FULL JOIN3.NATURAL JOIN4.CROSS JOIN5.SELF JOINPS:JOIN中的简写为语法糖,实际中写出来方便读一点而已12345678910

两种连接条件:

1.Equi JOIN    1.1NATURAL    1.2USING(a,b)    1.3=    ...2.Theta JOIN    2.1>=    2.2<=    2.3>   ...PS:USING(...)指定需要哪些列相等。ON则可以指定任意的连接条件(=,>=,<=,!=,>,<...)123456789101112

JOIN or INNER JOIN

返回两个表中同时满足条件的元组对,不满足的将被丢弃。

OUTER JOIN

LEFT OUTER JOIN

返回左表所有行以及右表满足条件的行,左表有值右表无值填充为null

RIGHT OUTER JOIN

返回右表所有行以及左表满足条件的行,右表有值左表无值填充为null

FULL OUTER JOIN

返回所有表的所有行,在满足条件的行之外,左表满足右表不满足或者相反,均填充null

NATURAL JOIN

1、来自两个关系的元组对在共同属性上的值相同。(不限于一个共同属性,也可以是多个共同属性)

2、去掉重复的属性(列)。

3、列出属性的顺序:先是共同属性,然后是第一个关系的属性,最后是第二个关系的属性。

为了防止两个表有多个共同属性时natural join 会忽略部分需要的元组对,应使用join…using(…),以指定需要哪些列相等

join…using(…)连接只能局限在指定的属性上

CROSS JOIN

返回笛卡儿积

SELF JOIN

相当于A JOIN A

最后放一张图:

JOIN连接组合两个表中的字段记录,包括三种:  

INNER JOIN运算式:连接组合两个表中的字段记录。 

 

LEFT JOIN运算式:连接组合两个表中的字段记录,并将包含了LEFT JOIN左边表中的全部记录。 

 

RIGHT JOIN运算式:连接组合两个表中的字段记录,并将包含了RIGHT JOIN右边表中的全部记录。 

 

 

INNER JOIN设定两个表相关连的运算式,以连接组合两个表中的字段记录。 

 

INNER JOIN语法如下: 

 

FROM 表1 INNER JOIN 表2 ON 表1.字段1 比较运算子 表2.字段2 

 

两个表连接的字段,譬如 [表1.字段1=表2.字段2],必须具有相同的字段类型,但是字段名称不需要相同。 

 

例如,自动编号字段类型可以连接Long 的字段类型,但是单精整数字段类型不能连接双精整数的字段类型。 

 

比较运算子可为=、<、>、<=、>=、或<>。 

 

JOIN连接的字段,不可以包含MEMO字段类型或OLE对象类型,否则会发生错误。 

 

在一个JOIN表达式中,可以连结多个ON子句: 

 

SELECT fields 

FROM 表1 INNER JOIN 表2 

ON 表1.字段1 比较运算子 表2.字段1 AND 

ON 表1.字段2 比较运算子 表2.字段2) OR 

ON 表1.字段3 比较运算子 表2.字段3) 

 

JOIN表达式中,可以为巢状式: 

 

SELECT fields 

FROM 表1 INNER JOIN 

(表2 INNER JOIN [( ]表3 

[INNER JOIN [( ] 表x [INNER JOIN ...)] 

ON 表3.字段3 比较运算子 表x.字段x)] 

ON 表2.字段2 比较运算子 表3.字段3) 

ON 表1.字段1 比较运算子 表2.字段2 

 

在一个INNER JOIN中,可以包括巢状式的LEFT JOIN或RIGHT JOIN,但是在一个LEFT JOIN或RIGHT JOIN中不能包括巢状式的INNER JOIN。

数据库中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 employee.DepartmentID = department.DepartmentID

等价于:

隐式连接:SELECT  * from   employee,department WHERE employee.DepartmentID = department.DepartmentID

注:当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 employee.departmentId = department.departmentId

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 employee.departmentId = department.departmentId

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

和上面等价的实例:

select * from employee left join department on employee.departmentId = department.departmentId

union all

select * from employee right join department on employee.departmentId = department.departmentId

注:SQLite 不支持右连接。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存