SQL Server-有人可以解释此查询吗?

时间:2018-08-30 08:51:23

标签: sql-server sql-server-2012

我有一个我听不懂的查询。有人可以向我解释所有这些逗号的情况吗?

SELECT * FROM TABLE1 
LEFT OUTER JOIN TABLE2 ON TABLE1.Column1 = TABLE2.Column1, 
TABLE3, TABLE4, TABLE5, TABLE6 
WHERE [...]

我没有列出一堆或几张桌子的那一部分。通过WHERE部分,我知道它是绑定的,或者至少像“ FROM”用法中那样使用。有人可以给我解释一下它的名称和名称,或者至少有一个指向这种链接形式的文档的链接吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

这意味着您正在使用TABLE1来加入TABLE2LEFT JOIN

因此,如果TABLE2.Column1中有一个TABLE1.Column1的匹配值,则将显示Value,如果没有Match,则该列将存在,但Value将为NULL < / p>

对于所有其他表,您正在使用CROSS JOIN。因此,它将使用从第一次加入获得的记录创建一个Cartesian Product

DECLARE @TABLEA TABLE
(
    ColA INT
)

DECLARE @TABLEB TABLE
(
    ColB INT
)

DECLARE @TABLEC TABLE
(
    ColC INT
)

DECLARE @TABLED TABLE
(
    ColD INT
)

INSERT INTO @TABLEA
VALUES(1),(2),(3)

INSERT INTO @TABLEB
VALUES(4),(5),(6)

INSERT INTO @TABLEC
VALUES(7),(8),(9)

INSERT INTO @TABLED
VALUES(10)

SELECT
    *
    FROM @TABLEA A
        LEFT JOIN @TABLEB B
            ON A.ColA = B.ColB
            ,@TABLEC,@TABLED

在以上示例中,将TableA和TableB左联接,然后将TABLEC和TABLED与结果交叉联接。所以我的最终输出将是

ColA        ColB        ColC        ColD
----------- ----------- ----------- -----------
1           NULL        7           10
1           NULL        8           10
1           NULL        9           10
2           NULL        7           10
2           NULL        8           10
2           NULL        9           10
3           NULL        7           10
3           NULL        8           10
3           NULL        9           10

您可以使用WHERE条款

从任何表中过滤记录