📜  数据库管理系统 | 2套

📅  最后修改于: 2021-09-08 15:59:27             🧑  作者: Mango

GATE 2012 考试中提出了以下问题。

1) 下列关于 SQL 查询的哪些语句是正确的?
P: SQL 查询可以包含 HAVING 子句,即使它不包含 GROUP BY 子句
问: SQL 查询只有在具有 GROUP BY 子句时才能包含 HAVING 子句
R: GROUP BY 子句中使用的所有属性都必须出现在 SELECT 子句中
S:并不是所有在 GROUP BY 子句中使用的属性都需要出现在 SELECT 子句中
(A) P 和 R
(B) P 和 S
(C) Q 和 R
(D) Q 和 S

答案 (C)
根据标准 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)“即使没有 GROUP BY 子句,SQL 查询也可以包含 HAVING 子句”是正确的,因为 Have caluse 是在聚合阶段之后应用的,如果要过滤聚合结果,则必须使用 Hading 没有’ t 需要 Group By 子句。没有 GROUP BY 子句的 HAVING 子句在标准 SQL 中是有效且(可以说)有用的语法。考虑这个例子,它是有效的标准 SQL:

SELECT 'T' AS result
   FROM Book
 HAVING MIN(NumberOfPages) < MAX(NumberOfPages);

语句(S)“并非所有在 GROUP BY 子句中使用的属性都需要出现在 SELECT 子句中”是正确的,但是如果我们必须使用 Group By 子句,那么我们可以放入 Select 子句中的内容是有限制的。

2) 鉴于基本的 ER 和关系模型,以下哪个是不正确的?
(A) 实体的一个属性可以有多个值
(B) 实体的属性可以是复合的
(C) 在关系表的一行中,一个属性可以有多个值
(D) 在关系表的一行中,一个属性可以只有一个值或一个 NULL 值

答案 (C)
术语“实体”属于ER模型,术语“关系表”属于关系模型。
A 和 B 都是真的。 ER 模型支持多值属性和复合属性。有关更多详细信息,请参阅此内容。
(C)是假的,(D)是真的。在关系模型中,关系表中的条目可以只有一个值或 NULL。

3) 假设 ( A , B ) 和 ( C , D ) 是两个关系模式。让 r1 和 r2 是对应的关系实例。 B 是在 r2 中引用 C 的外键。如果 r1 和 r2 中的数据满足参照完整性约束,以下哪项总是正确的?

答案 (A)
B 是 r1 中的外键,指的是 r2 中的 C。 r1 和 r2 满足参照完整性约束。因此,存在于 r1 的 B 列中的每个值也必须存在于 r2 的 C 列中。

4) 以下哪项是正确的?
(A) 2NF 中的每个关系也在 BCNF 中
(B) 如果 R 的每个非主属性在功能上完全依赖于 R 的每个键,则关系 R 是 3NF
(C) BCNF 中的每个关系也在 3NF 中
(D) 没有关系可以同时在 BCNF 和 3NF

答案 (C)
BCNF 是更强的 3NF 版本。所以 BCNF 中的每个关系也将在 3NF 中。

请参阅GATE Corner了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。