SQL Server多表联合JOIN(联结、联接)查询详解

在WorkFine中,数据关联功能被广泛应用于数据来源选择的过程中,通过联合使得用户能够轻松地从多个数据源中提取并整合所需的信息。通过数据联合功能不仅能够提高设计速度,而且还能减少数据的冗余。

本文旨在让用户通过了解SQL的联合功能,从而对WorkFine的数据源联结更容易理解和应用。

基本语法

在 SQL Server 中,联结(JOIN)是一种用于组合两个或多个表中的行的机制。联结操作允许你根据一个或多个键值将不同表中的相关数据组合在一起。以下是几种常见的 SQL Server 联结类型及其语法示例。

1. 内部联结 (INNER JOIN)

内部联结返回两个表中具有匹配值的行。

SELECT table1.column_name, table2.column_name
FROM table1
	INNER JOIN table2 ON table1.matching_column = table2.matching_column;

2. 左外部联结 (LEFT JOIN 或 LEFT OUTER JOIN)

左外部联结会返回左表的所有行,即使右表中没有匹配的行。如果右表中没有匹配,则结果中的列包含 NULL 值。

SELECT table1.column_name, table2.column_name
FROM table1
	LEFT JOIN table2 ON table1.matching_column = table2.matching_column;

3. 右外部联结 (RIGHT JOIN 或 RIGHT OUTER JOIN)

右外部联结与左外部联结相反,它会返回右表的所有行,即使左表中没有匹配的行。如果左表中没有匹配,则结果中的列包含 NULL 值。

SELECT table1.column_name, table2.column_name
FROM table1
	RIGHT JOIN table2 ON table1.matching_column = table2.matching_column;

4. 全外部联结 (FULL JOIN 或 FULL OUTER JOIN)

全外部联结会返回左表和右表中的所有行。当一方表中没有匹配时,另一方表中的列包含 NULL 值。

SELECT table1.column_name, table2.column_name
FROM table1
	FULL JOIN table2 ON table1.matching_column = table2.matching_column;

5. 交叉联结 (CROSS JOIN)#笛卡尔积

交叉联结返回第一个表中的每一行与第二个表中的每一行的笛卡尔积。

SELECT table1.column_name, table2.column_name
FROM table1
	CROSS JOIN table2;

PS:这个相当于WorkFine内的联合

SQL Server多表联合JOIN(联结、联接)查询详解

示例

假设我们有两个表 EmployeesDepartments,并且希望找到每个员工所属的部门名称。

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

在这个例子中,Employees 表有一个 DepartmentID 字段,Departments 表有一个 ID 字段,这两个字段被用来进行联结。

请注意,实际使用时需要根据你的具体表结构和需求调整这些示例。如果你有特定的表结构,并且想要了解如何在这些表之间执行联结,请提供更详细的信息,我可以帮助你构建具体的 SQL 查询语句。

下面内容是转载自某网站,介绍SQL联合功能的实际应用

前言

  今天主要的内容是要讲解SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别和用法,不用我说其实前面的这些基本SQL语法各位攻城狮基本上都用过。但是往往我们可能用的比较多的也就是左右连接和内连接了,而且对于许多初学者而言不知道什么时候该用哪种语法进行查询,并且对于左右,或者内连接查询的时候关于ON 和Where 的作用也是模糊不清的,说不出其中的一个大概的差别,因此接下来请容我把它们好好描述一遍。

数据库(MS Sql Server)表结构和对应数据

Students 学生表:

SQL Server多表联合JOIN(联结、联接)查询详解

Class 班级表:

SQL Server多表联合JOIN(联结、联接)查询详解

Join(where联立查询)

概念:用于两表或多表之间数据联立查询。

SELECT *
FROM Students s, Class c
WHERE s.ClassId = c.ClassId
SQL Server多表联合JOIN(联结、联接)查询详解

Inner Join(内连接查询)

概念:与Join相同,两表或多表之间联立查询数据,因此我们在使用多表join查询的时候既可以使用where关联,也可以是inner join关联查询。

SELECT *
FROM Students s
	INNER JOIN Class c ON s.ClassId = c.ClassId
SQL Server多表联合JOIN(联结、联接)查询详解

Left Join(左连接查询)

概念:以左表中的数据为主,即使与右表中的数据不匹配也会把左表中的所有数据返回。

SELECT *
FROM Students s
	LEFT JOIN Class c ON s.ClassId = c.ClassId
SQL Server多表联合JOIN(联结、联接)查询详解

Right Join(右连接查询)

概念:与Left Join的用法相反,是以右表中的数据为主,即使左表中不存在匹配数据也会把右表中所有数据返回。

SELECT *
FROM Students s
	RIGHT JOIN Class c ON s.ClassId = c.ClassId
SQL Server多表联合JOIN(联结、联接)查询详解

Full Join(全连接查询)

概念:返回表中所有的数据数据,无论匹配与否。

SELECT *
FROM Students s
	FULL JOIN Class c ON s.ClassId = c.ClassId
SQL Server多表联合JOIN(联结、联接)查询详解

On、Where的异同

这两个概念中也是绝大多数人无法区分到底它们两者之间有何区别,我什么时候使用On,什么时候使用Where,下面将分别展示两者的异同。

ON的使用无论是左右内全都使用到了On来进行关联:

对于Inner Join 的作用就是起到了与where相同的作用条件筛选:

SELECT *
FROM Students s
	INNER JOIN Class c
	ON s.ClassId = c.ClassId
		AND s.Sex = '男'
SQL Server多表联合JOIN(联结、联接)查询详解

对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:

SELECT *
FROM Students s
	LEFT JOIN Class c
	ON s.ClassId = c.ClassId
		AND s.Sex = '男'
SQL Server多表联合JOIN(联结、联接)查询详解

对于Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:

--全连接
SELECT *
FROM Students s
	FULL JOIN Class c ON s.ClassId = c.ClassId
 
--全连接加on查询
SELECT *
FROM Students s
	FULL JOIN Class c
	ON s.ClassId = c.ClassId
		AND s.Sex = '男'
SQL Server多表联合JOIN(联结、联接)查询详解
SQL Server多表联合JOIN(联结、联接)查询详解

Where的用法就不描述了因为这个咱们用的都比较多,下面说明一下两者的概念问题:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(以左连接为例)。
2、where条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。

结论:on用作于生成临时表时的条件筛选,where用作于对临时表中的记录进行过滤。

总结:

  最后我想说的是,有时候我们总认为概念性的东西很简单而忽视了实践。其实往往一些基础性的东西才是为我们往后构建万丈高楼的前提,坚持多实践、多动手,你会发现其实这些问题并不难。

相关文章

© 版权声明
THE END
喜欢就点赞吧
点赞5 分享