SQL WHERE和AND子句

时间:2012-10-13 04:14:29

标签: sql

当我们进行此类查询时

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行

你是如何解决这个问题的?我正在阅读我的教科书并在其中提出问题

我试图解决这个问题 - 我尝试了谷歌并阅读了各种帖子,但大多数帖子只是展示了如何做而不是解释实际上开心的事情

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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