SQL Server中连接表的方法探究

1. 简介

连接操作是在多张表中根据一定的条件将不同表中的数据联系在一起,实现数据间的逻辑关系。在SQL Server中,连接操作是使用join关键字实现的。

2. 内连接(equi-join)

2.1 概述

内连接是指将两张表中满足特定条件的行相连接,得到符合条件的结果。

2.2 语法

SELECT column_name(s)

FROM table1

JOIN table2

ON table1.column_name = table2.column_name;

其中,JOIN和ON是关键字;table1和table2是表名;column_name是列名,表示待连接的列。

2.3 示例

例如,我们有两个表t1和t2:

t1 t2
id name age id gender address
1 Tom 18 1 Male Beijing
2 Lucy 20 2 Female Shanghai
3 Jack 22 3 Male Guangzhou

我们想要找出两张表中id相同的行,可以使用以下查询语句:

SELECT t1.name, t2.gender

FROM t1

JOIN t2

ON t1.id = t2.id;

该语句的执行结果为:

name gender
Tom Male
Lucy Female
Jack Male

3. 外连接(outer join)

3.1 概述

外连接是指将两张表中符合特定条件的行连接在一起,并且保留未连接上的行。

3.2 左外连接(left outer join)

3.2.1 语法

SELECT column_name(s)

FROM table1

LEFT JOIN table2

ON table1.column_name = table2.column_name;

其中,LEFT JOIN表示左外连接。

3.2.2 示例

例如,我们有两个表t1和t2:

t1 t2
id name age id gender address
1 Tom 18 1 Male Beijing
2 Lucy 20 2 Female Shanghai
3 Jack 22 3 Male Guangzhou

我们想要找出两张表中id相同的行,并保留t1中未连接上的行,可以使用以下查询语句:

SELECT t1.name, t2.gender

FROM t1

LEFT JOIN t2

ON t1.id = t2.id;

该语句的执行结果为:

name gender
Tom Male
Lucy Female
Jack Male
NULL NULL

注意到最后一行的结果是NULL NULL,这是因为t1中id为4的行没有和t2中任何行匹配上,所以该行在输出结果中也出现了。

3.3 右外连接(right outer join)

3.3.1 语法

SELECT column_name(s)

FROM table1

RIGHT JOIN table2

ON table1.column_name = table2.column_name;

其中,RIGHT JOIN表示右外连接。

3.3.2 示例

例如,我们有两个表t1和t2:

t1 t2
id name age id gender address
1 Tom 18 1 Male Beijing
2 Lucy 20 2 Female Shanghai
3 Jack 22 3 Male Guangzhou

我们想要找出两张表中id相同的行,并保留t2中未连接上的行,可以使用以下查询语句:

SELECT t1.name, t2.gender

FROM t1

RIGHT JOIN t2

ON t1.id = t2.id;

该语句的执行结果为:

name gender
Tom Male
Lucy Female
Jack Male
NULL NULL

同样地,注意到最后一行的结果是NULL NULL,这是因为t2中id为4的行没有和t1中任何行匹配上,所以该行在输出结果中也出现了。

4. 自连接(self join)

4.1 概述

自连接是指将一张表拆分成两个虚拟的表,并在这两个虚拟的表之间执行连接操作。

4.2 语法

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

其中,table1 T1和table1 T2表示两个虚拟的表,需要在表名后使用别名(T1和T2)标识;condition是连接两张表的条件。

4.3 示例

例如,我们有一个表t:

t
id name manager_id
1 Alice 3
2 Bob 3
3 Charlie NULL
4 Dave 2
5 Eve 1

我们现在想要查询每个员工的manager的name,可以使用以下查询语句:

SELECT emp.name, mgr.name

FROM t emp, t mgr

WHERE emp.manager_id = mgr.id;

该语句的执行结果为:

name name
Alice Charlie
Bob Charlie
Charlie NULL
Dave Bob
Eve Alice

注意到最后一行的结果是Eve Alice,这是因为Eve的manager是Alice,所以该行在输出结果中也出现了。

5. 结语

以上就是SQL Server中连接表的方法探究。除了以上三种常见的连接方法(内连接、左外连接和右外连接),还有一些其他的连接方法(如交叉连接、自然连接等),感兴趣的读者可以继续深入学习。

数据库标签