学校的数据库模拟考试题。


一、单选

  1. 下列不属于数据库中包含的对象的是( ) A. 存储过程B. 数据表C. 视图D. 服务器

  2. 下列 ( )不是E-R模型的基本要素。 A. 实体B. 属性C. 联系D. 外部关键字

  3. 下面( )选项表示要执行差异备份。 A. RecoveryB. NorecoveryC. DifferentialD. Noint

  4. Having短语不能单独使用,且必须放在( )短语后。 A. Order ByB. FromC. WhereD. Group By

  5. 下列数据类型,在定义时需要指出数据长度的是( )。 A. intB. textC. charD. datetime

  6. SELECT语句中使用( )关键字可以将重复行屏蔽。 A. order byB. havingC. topD. distinct

  7. 执行 带参数的过程,正确的方法为( )。 A. EXEC 过程名 参数B. EXEC 过程名(参数)C. EXEC 过程名=参数D. 以上三种都可以

  8. 在下列系统数据库中,()数据库不允许进行备份操作。 A. masterB. msdbC. modelD. tempdb

  9. 下面对索引的相关描述正确的是( )。 A. 经常被查询的列不适合建索引B. 小型表适合建索引C. 有很多重复值的列不适合建索引D. 是外键或主键的列不适合建索引

  10. 下面的数据库产品中不是关系数据库的是( )。 A. OracleB. SQL ServerC. DBTGD. DB2

二、判断

  1. 不能定义一个CHECK约束后立即在同一个批处理中使用。 (正确/错误)
  2. 默认值是一种数据库对象。 (正确/错误)
  3. 通过T-SQL语句建立表时,希望将某属性定义为主关键字,则应使用UNIQUE子句。 (正确/错误)
  4. 实体是指现实世界客观存在的事物,概念性的事物不能叫做实体。 (正确/错误)
  5. ##LSB表示的是临时表。 (正确/错误)

三、编程题

基础表:

sql
-- 创建学生基本情况表
CREATE TABLE 学生基本情况 (
    学生编号 CHAR(4),
    姓名 NVARCHAR(20) NOT NULL,
    性别 CHAR(2),
    出生日期 DATE,
    籍贯 NVARCHAR(50) -- 后续会被删除
);

-- 创建学生成绩情况表
CREATE TABLE 学生成绩情况表 (
    学号 CHAR(8),
    课程 NVARCHAR(30),
    成绩 DECIMAL(5,2),
);

-- 创建课外小组情况表
CREATE TABLE 课外小组情况表 (
    学号 CHAR(8),
    小组名称 NVARCHAR(30),
);

-- 插入示例数据
INSERT INTO 学生基本情况 VALUES 
('201', '张三', '男', '1987-05-10', '北京'),
('202', '李四', '女', '1988-08-15', '上海'),
('203', '王五', '男', '1987-11-20', '广州');

INSERT INTO 学生成绩情况表 VALUES
('201', '数学', 85.5),
('201', '英语', 78.0),
('202', '数学', 92.0),
('202', '物理', 88.5),
('203', '英语', 76.0);

INSERT INTO 课外小组情况表 VALUES
('201', '篮球社'),
('201', '编程社'),
('202', '舞蹈社'),
('203', '音乐社');
  1. 对学生基本表进行如下操作: (1)删除“籍贯”字段; (2)设置“学生编号”字段的段名称为“学号”; (3)设置“学号”字段的字段大小为8; (4)设置“学号”字段为主键。

  2. 统计1987年出生的学生人数,具体要求如下: (1)显示“出生人数”字段; (2)数据来源为“学生基本情况”表

  3. 查询1987年出生的男生或1988年出生的女生的记录,具体要求如下: (1)显示“姓名,性别,年龄”字段。 (2)数据来源为“学生基本情况”表。

  4. 查询每个课程的平均成绩,具体要求如下: (1)显示“课程、平均成绩”字段 (2)数据来源为“学生成绩情况表”

  5. 将所有的学生成绩减少10分。

  6. 查询学号为“201”的学生成绩情况和参加课外小组的情况,具体要求如下: (1)显示“学号、姓名、小组名称、课程、成绩”字段 (2)数据来源为“学生成绩情况”、“课外小组情况”表。

四、答案

1.单选

  1. 答案:D. 服务器​解析​​:数据库包含的对象主要有数据表、视图、存储过程等,而服务器是运行数据库管理系统的硬件或软件环境,不属于数据库本身包含的对象。
  2. 答案:D. 外部关键字​​解析​​:E-R模型的基本要素包括实体、属性和联系,外部关键字是关系数据库中的概念,用于建立表间关系,不属于E-R模型的基本要素。
  3. 答案:C. Differential​​解析​​:在SQL Server中,Differential表示差异备份,它会备份自上次完整备份以来发生变化的数据。
  4. 答案:D. Group By​​解析​​:HAVING子句用于对分组后的结果进行筛选,必须与GROUP BY子句一起使用,不能单独使用。
  5. 答案:C. char​​解析​​:char是定长字符串类型,定义时需要指定长度;int、text和datetime类型在定义时不需要指定长度。
  6. 答案:D. distinct​​解析​​:DISTINCT关键字用于消除SELECT查询结果中的重复行。
  7. 答案:A. EXEC 过程名 参数​​解析​​:在SQL Server中,执行带参数的存储过程可以使用"EXEC 过程名 参数"或"EXEC 过程名 @参数名=参数值"的形式,但选项B的括号形式不正确。
  8. 答案:D. tempdb​​解析​​:tempdb是SQL Server的临时数据库,每次启动SQL Server时都会重新创建,不需要也不允许进行备份操作。
  9. 答案:C. 有很多重复值的列不适合建索引​​解析​​:有很多重复值的列建索引效果不好,因为索引的选择性低;经常被查询的列适合建索引;小型表通常不需要建索引;外键和主键列通常需要建索引。
  10. 答案:C. DBTG​​解析​​:DBTG是网状数据库模型的标准,不是关系数据库产品;Oracle、SQL Server和DB2都是关系数据库管理系统。

2.判断

  1. ​不能定义一个CHECK约束后立即在同一个批处理中使用。​
    ​答案:正确​
    ​解析​​:不能定义一个CHECK约束后,立即在同一个批处理中使用。 这意味着当你在SQL批处理中定义了一个表的CHECK约束后,你不能在同一组SQL命令中立即尝试插入或更新数据来测试这个约束是否生效。 这是因为SQL Server需要先完成整个批处理的编译和执行计划准备,包括约束的创建,之后才能应用这些改变。 因此,如果你想测试刚创建的约束,需要在新的批处理中执行数据操作语句。

  2. ​默认值是一种数据库对象。​
    ​答案:正确​
    ​解析​​:默认值可以作为独立的数据库对象创建(使用CREATE DEFAULT),然后绑定到列上,也可以直接在列定义中使用DEFAULT约束。两种形式都存在,但题目描述的是"默认值对象"这种形式。

  3. ​通过T-SQL语句建立表时,希望将某属性定义为主关键字,则应使用UNIQUE子句。​
    ​答案:错误​
    ​解析​​:定义主键应使用PRIMARY KEY子句,UNIQUE约束用于保证非主键列的唯一性。主键约束会自动包含NOT NULL和唯一性约束。

  4. ​实体是指现实世界客观存在的事物,概念性的事物不能叫做实体。​
    ​答案:错误​
    ​解析​​:在数据库概念中,实体不仅包括客观存在的事物,也包括抽象概念(如订单、比赛等)和事物间的联系。E-R模型中的实体可以是具体或抽象的。

  5. ##LSB表示的是临时表。​
    ​答案:正确​
    ​解析​​:SQL Server中以##开头的表名表示全局临时表,它在所有会话中都可见,直到创建它的最后一个会话结束才会被删除。

3.编程

sql
-- 1.对学生基本表进行如下操作
-- (1) 删除"籍贯"字段
ALTER TABLE 学生基本表 DROP COLUMN 籍贯;

-- (2) 设置"学生编号"字段的段名称为"学号"
EXEC sp_rename '学生基本表.学生编号', '学号', 'COLUMN';

-- (3) 设置"学号"字段的字段大小为8
ALTER TABLE 学生基本表 ALTER COLUMN 学号 CHAR(8) not null;

-- (4) 设置"学号"字段为主键
ALTER TABLE 学生基本表 ADD CONSTRAINT PK_学生基本表 PRIMARY KEY (学号);

-- 2.统计1987年出生的学生人数
SELECT COUNT(*) AS 出生人数
FROM 学生基本情况
WHERE YEAR(出生日期) = 1987;

-- 3.查询1987年出生的男生或1988年出生的女生的记录
SELECT 姓名, 性别, YEAR(GETDATE()) - YEAR(出生日期) AS 年龄
FROM 学生基本情况
WHERE (YEAR(出生日期) = 1987 AND 性别 = '男') 
   OR (YEAR(出生日期) = 1988 AND 性别 = '女');
-- 4.查询每个课程的平均成绩
SELECT 课程, AVG(成绩) AS 平均成绩
FROM 学生成绩情况表
GROUP BY 课程;

-- 5.将所有的学生成绩减少10分
UPDATE 学生成绩情况表
SET 成绩 = 成绩 - 10;

-- 6.查询学号为"201"的学生成绩和课外小组情况
SELECT s.学号, s.姓名, e.小组名称, sc.课程, sc.成绩
FROM 学生基本情况 s
LEFT JOIN 学生成绩情况表 sc ON s.学号 = sc.学号
LEFT JOIN 课外小组情况表 e ON s.学号 = e.学号
WHERE s.学号 = '201';