SQL Server (Transact-SQL) INNER JOIN 关键字(或有时称为简单 JOIN)用于组合两个表的列值,并在存在一个表时返回两个表中的所有行。列之间的匹配。
语法
在 SQL Server (Transact-SQL) 中使用 INNER JOIN 关键字的语法如下:
SELECT table1.column1, table1.column2, table2.column1, table2.column2, ...
FROM table1
INNER JOIN table2
ON table1.matching_column = table2.matching_column;
示例:
考虑名为 Employee 和 Contact_Info 的数据库表,其中包含以下记录:
表 1:Employee表
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
表2:Contact_Info表
Phone_Number | EmpID | Address | Gender |
---|---|---|---|
+1-8054098000 | 2 | Brooklyn, New York, USA | F |
+33-147996101 | 3 | Grenelle, Paris, France | M |
+31-201150319 | 4 | Geuzenveld, Amsterdam, Netherlands | F |
+86-1099732458 | 6 | Yizhuangzhen, Beijing, China | M |
+65-67234824 | 7 | Yishun, Singapore | M |
+81-357799072 | 8 | Koto City, Tokyo, Japan | M |
要根据匹配列EmpID内连接Employee和Contact_Info表,给出查询以下。这将从 Employee 表中获取 Name 和 Age 列,并从 Contact_Info 中获取 Address 列
SELECT Employee.Name, Employee.Age, Contact_Info.Address
FROM Employee
INNER JOIN Contact_Info
ON Employee.EmpID = Contact_Info.EmpID;
这将产生如下所示的结果:
Name | Age | Address |
---|---|---|
Marry | 24 | Brooklyn, New York, USA |
Jo | 27 | Grenelle, Paris, France |
Kim | 30 | Geuzenveld, Amsterdam, Netherlands |
Huang | 28 | Yizhuangzhen, Beijing, China |
要获取表的所有字段,使用 table.* 关键字,例如 - 要获取 Employee 表的所有字段,Employee.* 用于以下查询:
SELECT Employee.*, Contact_Info.Address
FROM Employee
INNER JOIN Contact_Info
ON Employee.EmpID = Contact_Info.EmpID;
以下代码的结果将是:
EmpID | Name | City | Age | Salary | Address |
---|---|---|---|---|---|
2 | Marry | New York | 24 | 2750 | Brooklyn, New York, USA |
3 | Jo | Paris | 27 | 2800 | Grenelle, Paris, France |
4 | Kim | Amsterdam | 30 | 3100 | Geuzenveld, Amsterdam, Netherlands |
6 | Huang | Beijing | 28 | 2800 | Yizhuangzhen, Beijing, China |
连接三个表
要连接三个表,只需重复重复使用 JOIN 关键字。请参阅下面的语法,其中 INNER JOIN 关键字用于连接三个表。任何其他 JOIN 类型都可以以相同的方式使用。同样,它可以用于连接任意数量的表。
语法
在 SQL Server (Transact-SQL) 中使用 INNER JOIN 关键字连接三个表的语法如下:
SELECT table1.column1, table1.column2, ...
table2.column1, table2.column2, ...
table3.column1, table3.column2, ...
FROM table1 INNER JOIN table2
ON table1.matching_column = table2.matching_column
INNER JOIN table3
ON table1.matching_column = table3.matching_column;
示例:
考虑一个包含名为 Employee、Bonus_Paid 和 Contact_Info<的表的数据库/i> 包含以下记录:
表 1:Employee表
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
表2:Bonus_Paid表
EmpID | Bonus |
---|---|
1 | 500 |
2 | 400 |
3 | 450 |
4 | 550 |
5 | 400 |
6 | 600 |
表3:Contact_Info表
Phone_Number | EmpID | Address | Gender |
---|---|---|---|
+1-8054098000 | 2 | Brooklyn, New York, USA | F |
+33-147996101 | 3 | Grenelle, Paris, France | M |
+31-201150319 | 4 | Geuzenveld, Amsterdam, Netherlands | F |
+86-1099732458 | 6 | Yizhuangzhen, Beijing, China | M |
+65-67234824 | 7 | Yishun, Singapore | M |
+81-357799072 | 8 | Koto City, Tokyo, Japan | M |
获取包含EmpID、Name、Bonus的记录和地址,可以使用以下查询:
SELECT Employee.EmpID, Employee.Name,
Bonus_Paid.Bonus, Contact_Info.Address
FROM Employee INNER JOIN Bonus_Paid
ON Employee.EmpID = Bonus_Paid.EmpID
INNER JOIN Contact_Info
ON Employee.EmpID = Contact_Info.EmpID;
这将产生如下所示的结果:
EmpID | Name | Bonus | Address |
---|---|---|---|
2 | Marry | 400 | Brooklyn, New York, USA |
3 | Jo | 450 | Grenelle, Paris, France |
4 | Kim | 550 | Geuzenveld, Amsterdam, Netherlands |
6 | Huang | 600 | Yizhuangzhen, Beijing, China |
要获取上述记录,但条件如 Bonus 应大于等于 500,可以使用以下查询:
SELECT Employee.EmpID, Employee.Name,
Bonus_Paid.Bonus, Contact_Info.Gender,
Contact_Info.Address
FROM Employee INNER JOIN Bonus_Paid
ON Employee.EmpID = Bonus_Paid.EmpID
INNER JOIN Contact_Info
ON Employee.EmpID = Contact_Info.EmpID
WHERE Bonus_Paid.Bonus >= 500;
以下代码的结果将是:
EmpID | Name | Bonus | Address |
---|---|---|---|
4 | Kim | 550 | Geuzenveld, Amsterdam, Netherlands |
6 | Huang | 600 | Yizhuangzhen, Beijing, China |