【问题标题】:why 9 rows are fetch from this query?为什么从这个查询中获取 9 行?
【发布时间】:2011-06-09 02:33:19
【问题描述】:
Given 2 tables T1 and T2.
T1  T2 
A   1 
B   2
C   3
You make a query SELECT * FROM T1, T2.
What is the no: of rows that are fetched from this query? 

答案是 9

【问题讨论】:

  • 你有这 9 行作为输出?
  • 谷歌:sql 隐式“CROSS JOIN”

标签: sql mysql sql-server


【解决方案1】:

此查询结果为cartesian product,因为未提供其他条件。第一个表中的每一行都与第二个表中的每一行匹配。

结果是

A 1
A 2
A 3
B 1
B 2
B 3
C 1
C 2
C 3

【讨论】:

    【解决方案2】:

    因为第一个表的每条记录都与第二个表的每条记录一起返回,结果没有被过滤。

    确切的输出将是:

    T1  T2 
    A   1 
    A   2
    A   3 
    B   1
    B   2
    B   3
    C   1
    C   2
    C   3
    

    (顺序可能有所不同)

    【讨论】:

      【解决方案3】:

      这是一个笛卡尔积:从一个表中选择所有行 (3) 并从另一个表中选择所有行 (3) 并将它们组合起来,因此 3*3=9。

      【讨论】:

        【解决方案4】:

        这就是你要求它做的事情。你得到了来自T1 的所有行和来自T2 的所有行。它们不只是加在一起——例如,如果列不同,这将不起作用,尽管您可以使用UNION 来做到这一点——它们被合并为所谓的“笛卡尔积”。您基本上可以从两个表中获得所有行组合。还有3*3 = 9

        【讨论】:

        • @Downvoter:出于礼貌,请发表评论解释反对票。
        猜你喜欢
        • 1970-01-01
        • 2011-10-18
        • 2011-03-11
        • 2011-12-21
        • 2020-03-19
        • 2014-03-12
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多