-1

当我们进行这样的查询时

SELECT COUNT(*)
FROM A, B, C
WHERE A.type = B.type
AND B.cost = C.cost

我们可以对结果表说些什么?结果表的大小是多少?如果A有5行,B有8行,C有7行

编辑:我可以得到一些回应而不是降价吗?我对 SQL 完全陌生,需要帮助。

EDIT2:我想要做什么 -了解 WHERE 和 AND 子句的工作原理以及为什么结果表有 8 行

你是如何提出这个特定问题的—— 我正在阅读我的教科书并做其中的问题

我试图解决的问题 -我尝试了谷歌并阅读了各种帖子,但其中大多数只是展示了如何做到这一点,而不是解释实际发生了什么

4

2 回答 2

5

计数将是公共值的数量。例如考虑这个小例子

DECLARE @A Table(Val1 Int)
Insert Into @A Values(1),(2),(3),(4),(5)


DECLARE @B Table(Val2 Int)
Insert Into @B Values(1),(2),(3),(4),(5),(6)


DECLARE @C Table(Val3 Int)
Insert Into @C Values(1),(2),(3),(4),(5),(6),(7)


SELECT COUNT(*)
FROM @A a, @B b, @C c
WHERE a.Val1 = b.Val2
AND b.Val2 = c.Val3

结果是5。因为a.Val1 = b.Val2有 5 个共同元素,即 1,2 3,4,5。现在b.Val2 = c.Val3有 6 个共同元素,即 1,2,3,4,5,6。

然后这两个结果集将相互影响,并尝试获得相交的值,即公共值,同样是 1、2、3、4、5。因此计数为 5

于 2012-10-13T04:25:49.560 回答
1

不出所料,结果集的大小取决于与WHERE条件匹配的 A、B 和 C 实体的 3 元组的数量。

现在,这完全取决于数据。您可能有一组数据,其中 A.type 为 all Apples, B.type 为 all Oranges,并且您的条件永远不会满足,因此您的结果集为空。

在另一个极端,所有行的类型都匹配,因此您最终得到每个可能的组合,或 5*8*7 结果行。

于 2012-10-13T04:31:25.183 回答