具有GROUP BY的SQL EXISTS运算符
我目前正在浏览上的EXISTS操作符示例,遇到了一个不太有意义的示例。代码如下:具有GROUP BY的SQL EXISTS运算符,sql,Sql,我目前正在浏览上的EXISTS操作符示例,遇到了一个不太有意义的示例。代码如下: SELECT cust_code,cust_name,cust_city,grade FROM customer WHERE grade=2 AND EXISTS( SELECT COUNT(*) FROM customer WHERE grade=2 GROUP BY grade HAVING CO
SELECT cust_code,cust_name,cust_city,grade
FROM customer
WHERE grade=2 AND
EXISTS(
SELECT COUNT(*)
FROM customer
WHERE grade=2
GROUP BY grade
HAVING COUNT(*)>2
);
根据我的理解,子查询的计算结果总是TRUE,它与更高的customer表无关,因此将其放在那里似乎无关紧要
有人能解释一下代码在这里要实现什么吗
非常感谢 此代码验证
customer
表中grade=2
至少有两条记录,如果没有,记录将被过滤。存在当grade=2
的记录计数小于或等于2时,将计算为false
。查询检查是否有两条以上的记录grade=2
。如果在外部选择中提到了show列,则第二个子查询首先获取customer表中等级等于2的所有行
SELECT COUNT(*)
FROM customer
WHERE grade=2
下面是查询的下一部分。按年级将所有这些行分组
GROUP BY grade
最后,下面的having count代码排除了其中至少没有2项的任何组
HAVING COUNT(*)>2
因此,您可能会遇到这样一种情况,即许多人都有分数,这将输入到customer表中。如果两个或两个以上的人没有相同的分数,此查询将找不到结果
等级=2且
存在(
选择COUNT()
来自客户
其中等级=2
按年级分组
使COUNT()大于2
);
因此,您的查询将检查Grade=2,并且至少有一行具有以下条件
WHERE grade=2
GROUP BY grade
HAVING COUNT(*)>2
如果这两个条件都不满足,您的查询将不会返回任何结果集如果您有子查询,它将不会返回任何结果,请在w3resource网站中解释。。。。与上面的customer表不相关
您是正确的。虽然它是正确的,但这个例子是可怕的,我想。试图实现吗?谁知道。。。通常,EXISTS
正在使用相关子查询,但此处不使用。EXISTS运算符EXISTS检查子查询结果的存在性。EXISTS子查询测试子查询是否至少获取一行。如果未返回任何数据,则此运算符返回“FALSE”。-更多信息,请访问:http://www.w3resource.com/sql/special-operators/sql_exists.php#sthash.ZYVpVsr6.dpuf
Correct,如果至少有三个这样的客户,则查询会显示等级为2的所有客户,否则不会显示任何客户。
WHERE grade=2
GROUP BY grade
HAVING COUNT(*)>2