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;

在此查询中:

pc分别是production.products表和production.categories表的别名。这样就可以通过别名引用表,而不是通过表名。比如c.category_id而不是production.categories.category_id.

对于产品表(products)中的每一行数据,内连接子句都会在分类表(categories)中匹配每一行category_id相等的行。

  • 如果两行在category_id列中具有相同的值,内连接将根据SELECT列表生成一个新行,新行的列来自categoriesproducts表的行,并将这个新行输出到结果集中。
  • 如果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;

posted @ 2023-01-29 10:54  平元兄  阅读(233)  评论(0编辑  收藏  举报