SQL Server中的表连接查询的类型和用法
在SQL Server中,表连接查询是一种常用的数据操作,它可以将两个或多个表中的数据按照一定的条件进行关联,从而得到所需的结果集。表连接查询有多种类型,根据连接条件的不同,可以分为内连接、外连接、交叉连接和自连接。本文将介绍这四种类型的表连接查询的定义、语法和示例。
内连接(Inner Join)
内连接是最常见的一种表连接查询,它只返回两个表中满足连接条件的记录。例如,如果要查询员工表(Employee)和部门表(Department)中员工姓名、部门名称和工资,可以使用以下语句:
这里使用了INNER JOIN关键字来指定内连接,ON子句来指定连接条件。执行结果如下:
| 张三 | 销售部 | 8000 |
| 李四 | 人事部 | 6000 |
| 王五 | 财务部 | 7000 |
可以看到,只有员工表和部门表中都存在的记录才被返回,没有匹配的记录被忽略。
外连接(Outer Join)
外连接是一种扩展的表连接查询,它除了返回两个表中满足连接条件的记录外,还返回其中一个或两个表中没有匹配的记录,并用NULL值填充。外连接根据返回哪个表中没有匹配的记录,可以分为左外连接、右外连接和全外连接。例如,如果要查询员工表(Employee)和部门表(Department)中员工姓名、部门名称和工资,并且包括没有分配部门的员工和没有员工的部门,可以使用以下语句:
这里使用了FULL OUTER JOIN关键字来指定全外连接,ON子句来指定连接条件。执行结果如下:
| 张三 | 销售部 | 8000 |
| 李四 | 人事部 | 6000 |
| 王五 | 财务部 | 7000 |
| NULL | 研发部 | NULL |
可以看到,除了两个表中都存在的记录外,还返回了员工表中没有分配部门的赵六和部门表中没有员工的研发部,并用NULL值填充。
如果只想返回员工表中没有分配部门的员工或者只想返回部门表中没有员工的部门,可以使用左外连接或右外连接。例如:
1.- 左外连接
2.- 右外连接
交叉连接(Cross Join)
交叉连接是一种特殊的表连接查询,它返回两个表中所有记录的笛卡尔积,即每个表中的每一条记录都与另一个表中的每一条记录进行组合,不需要指定连接条件。例如,如果要查询员工表(Employee)和部门表(Department)中员工姓名和部门名称的所有可能组合,可以使用以下语句:
这里使用了CROSS JOIN关键字来指定交叉连接。