关于SQL查询,以下哪个陈述是正确的?
P:SQL查询即使没有GROUP BY子句也可以包含HAVING子句
问:仅当SQL查询具有GROUP BY子句时,才能包含HAVING子句
R:GROUP BY子句中使用的所有属性必须出现在SELECT子句中
S:并非GROUP BY子句中使用的所有属性都需要出现在SELECT子句中
(A) P和R
(B) P和S
(C) Q和R
(D) Q和S答案: (B)
说明:根据标准SQL,答案应该是选项(C),它是GATE权限给出的答案密钥。
如果我们谈论不同的SQL实现(例如MySQL),那么选项(B)也是正确的。但有疑问的是,他们似乎在谈论标准SQL,而不是实现。例如下面是
在大多数实现中,P是正确的。 HAVING子句也可以与聚合函数一起使用。如果我们使用不带GROUP BY子句的HAVING子句,则HAVING条件适用于满足搜索条件的所有行。换句话说,满足搜索条件的所有行都组成一个组。有关更多详细信息,请参见此内容。
S是正确的。若要验证S,请尝试在SQL中执行以下查询。
CREATE TABLE temp
(
id INT,
name VARCHAR(100)
);
INSERT INTO temp VALUES (1, "abc");
INSERT INTO temp VALUES (2, "abc");
INSERT INTO temp VALUES (3, "bcd");
INSERT INTO temp VALUES (4, "cde");
SELECT Count(*)
FROM temp
GROUP BY name;
输出:
count(*)
--------
2
1
1
替代方式–
语句(P)“ SQL查询即使没有GROUP BY子句也可以包含HAVING子句”是正确的,因为在聚集阶段之后应用了“ Hallow”运算,如果要过滤聚集结果而“ Having”没有,则必须使用“ Hallow”要求使用“分组依据”子句。没有GROUP BY子句的HAVING子句在标准SQL中是有效的(并且可以说是有用的)语法。考虑以下示例,它是有效的标准SQL:
SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
语句(S)“并非GROUP BY子句中使用的所有属性都需要出现在SELECT子句中”是正确的,但如果必须使用Group By子句,则对我们可以放入Select子句的内容有限制。
这个问题的测验