7.8 SQL Server内连接查询
SQL Server Inner Join
SQL Server内连接介绍
内连接是SQL Server中最常用的连接之一。内连接子句允许您从两个或多个关联表中查询数据。
看下面产品(products
)和类别(categories
)表:
下面的语句从production.products
中检索产品信息:
SELECT
product_name,
list_price,
category_id
FROM
production.products
ORDER BY
product_name DESC;
查询仅返回类别Id(category_id
)列表,而不是类别名称(category_name
)。要将类别名称包括在结果集中,可以使用以下内连接(INNER JOIN
)子句:
SELECT
product_name,
category_name,
list_price
FROM
production.products p
INNER JOIN production.categories c
ON c.category_id = p.category_id
ORDER BY
product_name DESC;
在此查询中:
p
和c
分别是production.products
表和production.categories
表的别名。这样就可以通过别名引用表,而不是通过表名。比如c.category_id
而不是production.categories.category_id
.
对于产品表(products
)中的每一行数据,内连接子句都会在分类表(categories
)中匹配每一行category_id
相等的行。
- 如果两行在
category_id
列中具有相同的值,内连接将根据SELECT
列表生成一个新行,新行的列来自categories
和products
表的行,并将这个新行输出到结果集中。 - 如果
products
表中的行没有匹配上categories
表中的行,内连接子句将会忽略这些行,并且不会包含到结果集当中。
SQL Server 内连接(INNER JOIN)语法
SELECT
select_list
FROM
T1
INNER JOIN T2 ON join_predicate;
在这种语法中,查询从T1和T2表中检索数据:
- 首先,在FROM子句中指定主表(T1)
- 其次,在内连接子句中指定第二个表(T2)和连接条件。结果集中只包含满足连接条件的行。
内连接子句将表T1的每一行与表T2的行进行比较,以找到满足连接条件的所有行。如果满足连接条件,则两表中的这两个行匹配上,匹配上的行的列值将合并为新行并包含在结果集中。
下表说明了两个表T1(1,2,3)和T2(A,B,C)的内连接。结果包括行:(2,A)和(3,B),因为它们具有相同的图案。
注意:INNER
关键字时可选的:
SELECT
select_list
FROM
T1
JOIN T2 ON join_predicate;
更多的SQL Server内连接示例
下面三个表:产品表(products),分类表(categories),品牌表(brands):
使用两个内连接INNER JOIN
子句从三个表中查询数据:
SELECT
product_name,
category_name,
brand_name,
list_price
FROM
production.products p
INNER JOIN production.categories c ON c.category_id = p.category_id
INNER JOIN production.brands b ON b.brand_id = p.brand_id
ORDER BY
product_name DESC;