sql的连接方式,交叉连接、内连接、外连接

交叉连接、内连接和外连接是数据库中用于连接表的三种不同操作。

连接方式描述
交叉连接 (CROSS JOIN)不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配
内连接 (INNER JOIN)根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中。
外连接 (OUTER JOIN)结果集中不仅包含符合连接条件的行,还可能包含左表、右表或两个表中的所有数据行。分为左外连接 (LEFT JOIN)、右外连接 (RIGHT JOIN) 和全外连接 (FULL JOIN)。

一、交叉连接(CROSS JOIN)是内连接的一种特例,不带查询条件。它简单地将两个表的所有记录相互匹配,生成的结果集是两个表的笛卡尔积。(假设A、B两个集合) 用a*b,a∈A,b∈B。

示例:假设有两个表TableA和TableB,表结构如下:

表名列名数据类型
TableAIDINT
TableBNameVARCHAR(50)

使用交叉连接将这两个表连接起来:

SELECT *  
FROM TableA  
CROSS JOIN TableB;

这将生成一个结果集,其中每一行都是TableA和TableB的行的一个组合。例如,如果TableA有3行,TableB有4行,结果集将包含12行。

二、内连接(INNER JOIN)是根据某个条件筛选出符合条件的记录,只连接匹配的行。不符合条件的记录不会出现在结果集中。
示例:假设有两个表Employees和Departments,表结构如下:

表名列名数据类型
EmployeesEmployeeIDINT
EmployeesDepartmentIDINT
DepartmentsDepartmentIDINT
DepartmentsDepartmentNameVARCHAR(50)

使用内连接将这两个表连接起来,并只返回属于同一个部门的员工:

SELECT Employees.EmployeeID, Employees.DepartmentID, Departments.DepartmentName  
FROM Employees  
INNER JOIN Departments  
ON Employees.DepartmentID = Departments.DepartmentID;

这将生成一个结果集,其中每一行都表示属于同一个部门的员工和对应的部门名称。例如,如果有3个员工和2个部门,结果集将包含若干行,但只有属于同一个部门的员工才会出现在结果集中。

三、外连接(OUTER JOIN)的结果集不仅包含符合连接条件的行,还可能包含左表、右表或两个表中的所有数据行。外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。

左外连接会返回左表的所有行,以及与左表匹配的右表的行。如果右表中没有与左表匹配的行,则对应的结果集中的列将显示为NULL。

示例:继续使用前面的示例表格,现在我们使用左外连接连接这两个表,并返回所有员工以及对应的部门名称(如果有的话):

SELECT Employees.EmployeeID, Employees.DepartmentID, Departments.DepartmentName  
FROM Employees  
LEFT JOIN Departments  
ON Employees.DepartmentID = Departments.DepartmentID;

这将生成一个结果集,其中每一行都表示一个员工以及对应的部门信息。如果某个员工没有对应的部门信息(即该员工不属于任何部门),那么结果集中的部门名称列将显示为NULL。例如,如果有3个员工和2个部门,结果集将包含若干行,那些没有对应部门的员工的结果集中的部门名称列将显示为NULL。

右外连接与左外连接类似,但返回的是右表的所有行以及与右表匹配的左表的行。如果左表中没有与右表匹配的行,则对应的结果集中的列将显示为NULL。

示例:使用前面的示例表格,现在我们使用右外连接连接这两个表,并返回所有部门以及对应的员工信息(如果有的话):

SELECT Employees.EmployeeID, Employees.DepartmentID, Departments.DepartmentName  
FROM Employees  
RIGHT JOIN Departments  
ON Employees.DepartmentID = Departments.DepartmentID;

这将生成一个结果集,其中每一行都表示一个部门以及对应的员工信息。如果某个部门没有对应的员工信息(即该部门没有员工),那么结果集中的员工信息列将显示为NULL。例如,如果有3个员工和2个部门,结果集将包含若干行,那些没有对应员工的部门的结果集中的员工信息列将显示为NULL。

全外连接 返回左右表中的所有记录以及左右表中连接字段相等的记录。如果左表或右表中存在与另一张表没有匹配的记录,那么这些未匹配的记录也将包含在结果集中,对应的结果集中的列将显示为NULL。

示例:使用前面的示例表格,现在我们使用全外连接连接这两个表:

SELECT Employees.EmployeeID, Employees.DepartmentID, Departments.DepartmentName  
FROM Employees  
FULL JOIN Departments  
ON Employees.DepartmentID = Departments.DepartmentID;

这将生成一个结果集,其中每一行都表示一个员工以及对应的部门信息。无论员工所属的部门是否存在,该信息都将包含在结果集中。例如,如果有3个员工和2个部门,结果集将包含若干行,那些没有对应部门的员工的结果集中的部门名称列将显示为NULL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值