Transact-SQL 参考
FROM 子句

指定从其中检索行的表。需要 FROM 子句,除非选择列表只包含常量、变量和算术表达式(没有列名)。有关更多信息,请参见 FROM

语法

[ FROM { < table_source > } [ ,...n ] ]

< table_source > ::=

    table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
    | view_name [ [ AS ] table_alias ]
    | rowset_function [ [ AS ] table_alias ]
    | OPENXML
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
    | < joined_table >

< joined_table > ::=
     < table_source > < join_type > < table_source > ON < search_condition >
    | < table_source > CROSS JOIN < table_source >
    | < joined_table >

< join_type > ::=
    [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
    [ < join_hint > ]
    JOIN

参数

< table_source >

指定用于 SELECT 语句的表、视图、派生表和联接表。

table_name [[AS] table_alias ]
指定表名和可选别名。
view_name [ [ AS ] table_alias ]
指定名称、视图和可选别名。
rowset_function [ [AS] table_alias ]
是行集函数名和可选别名。有关行集函数列表的更多信息,请参见行集函数
OPENXML
在 XML 文档上提供行集视图。有关更多信息,请参见 OPENXML
WITH ( < table_hint > [ ,...n ] )
指定一个或更多表提示。有关表提示的更多信息,请参见 FROM
derived_table [ [ AS ] table_alias ]
是嵌套 SELECT 语句,可从指定的数据库和表中检索行。
column_alias
替换结果集内列名的可选别名。

<joined_table>

是两个或更多表的积的结果集。例如:

SELECT *
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
    RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
        ON tab3.c1 = tab4.c1
        ON tab2.c3 = tab4.c3

对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。

<join_type>

指定联接操作的类型。

INNER
指定返回所有相匹配的行对。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。
LEFT [OUTER]
指定除所有由内联接返回的行外,所有来自左表的不符合指定条件的行也包含在结果集内。来自左表的输出列设置为 NULL。
RIGHT [OUTER]
指定除所有由内联接返回的行外,所有来自右表的不符合指定条件的行也包含在结果集内。来自右表的输出列设置为 NULL。
FULL [OUTER]
如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为 NULL。除此之外,结果集中还包含通常由内联接返回的所有行。
<join_hint>
指定联接提示或执行算法。如果指定了 <join_hint>,也必须明确指定 INNER、LEFT、RIGHT 或 FULL。有关联接提示的更多信息,请参见 FROM
JOIN
表示联接所指定的表或视图。

ON <search_condition>

指定联接所基于的条件。此条件可指定任何谓词,但通常使用列和比较运算符。例如:

SELECT ProductID, Suppliers.SupplierID
    FROM Suppliers JOIN Products 
    ON (Suppliers.SupplierID = Products.SupplierID)

当条件指定列时,列不必有相同的名称或相同的数据类型。但是如果数据类型不同,则它们必须是兼容或可由 Microsoft® SQL Server™ 进行隐性转换的类型。如果数据类型不能隐式转换,则条件必须使用 CAST 函数显式转换数据类型。

有关搜索条件和谓词的更多信息,请参见搜索条件

CROSS JOIN

指定两个表的矢量积。返回同样的行,就像要联接的表只列于 FROM 子句中,并且未指定 WHERE 子句。例如,这两个查询返回的结果集都由 T1T2 中所有行的完全联接组成:

SELECT * FROM T1, T2
SELECT * FROM T1 CROSS JOIN T2