数据库考试(小题+知识点)

Posted 咸鱼的小世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库考试(小题+知识点)相关的知识,希望对你有一定的参考价值。

1.基本关系代数运算有哪些?

关系代数中,
集合运算符有:交(∩),并(∪),差(-),笛卡尔积(×)
专门的关系运算符有:选择(σ),投影(π),连接(▷◁),除(÷)
其中,基本关系代数运算是:并(∪),差(-),笛卡尔积(×),选择(σ),投影(π)

2.假设有关系R和S,关系代数表达式R-(R-S)表示的是

  1. R×S
  2. R-S
  3. R∩S
  4. R∪S

这题体现了:其他运算可以由基本关系代数运算表示。
基本关系代数运算

3.关系数据库中的投影操作是指

  • 关系数据库中的投影操作是指从关系中抽出特定字段
  • 关系数据库中的选择操作是指从关系中抽出特定记录

4.关系代数运算是以( 集合运算)为基础的运算 。

  • 关系演算是以 谓词运算 为基础的运算

5.下面的选项不是关系数据库基本特征的是( )。

  1. 与行的次序无关
  2. 不同的列应有不同的数据类型
  3. 不同的列应有不同的列名
  4. 与列的次序无关

6.自然连接是构成新关系的有效方法。一般情况下,当对关系R和S使用自然连接时,要求R和S含有一个或多个共有的________

  • A. 行
  • B. 元组
  • C. 记录
  • D. 属性
我的答案: D:属性;正确答案: D:属性;

7.在通常情况下,下面的关系中不可以作为关系数据库的关系是_______.

  • A. R3(学生号,学生名,宿舍号)
  • B. R4(学生号,学生名,简历)
  • C. R2(学生号,学生名,班级号)
  • D. R1(学生号,学生名,性别)
我的答案: B:R4(学生号,学生名,简历);正确答案: B:R4(学生号,学生名,简历);
解析:
  • 在关系数据库中,一个关系必须满足以下几个条件:
  • 1. 每个属性具有原子性,即每个属性不能再分解;
  • 2. 关系中的每个元组都是唯一的,不能重复;
  • 3. 关系中的属性是无序的,不能直接引用某个属性。
  • 在本题中,A、C、D三个关系都满足以上三个条件,可以作为关系数据库的关系。而B关系中的简历属性不具备原子性,无法直接处理和引用,因此不符合关系数据库的要求,不能作为关系数据库的关系。

8.关系代数中的连接操作是由( )操作组合而成 。

  • A. 投影和笛卡尔积
  • B. 选择和投影
  • C. 投影、选择、笛卡尔积
  • D. 选择和笛卡尔积

9.现有如下关系: 患者(患者编号,患者姓名,性别,出生日期,所在单位) 医疗(患者编号,医生编号,医生姓名,诊断日期,诊断结果) 其中,医疗关系中的外码是( )。

  • A. 患者姓名
  • B. 患者编号和患者姓名
  • C. 医生编号和患者编号
  • D. 患者编号
我的答案: D:患者编号;正确答案: D
解析:
  • 外码应是另一个关系的主码,
  • 如再增加一个关系:医生(医生编号),则医生编号也是医疗关系的外码

10.一个关系数据库文件中的各条记录__________。

  • A. 前后顺序可以任意颠倒,不影响库中的数据关系
  • B. 前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同
  • C. 前后顺序不能任意颠倒,一定要按照输入的顺序排列
  • D. 前后顺序不能任意颠倒,一定要按照关键字段值的顺序排列
我的答案: A:前后顺序可以任意颠倒,不影响库中的数据关系;正确答案: A:前后顺序可以任意颠倒,不影响库中的数据关系;
答案解析:

11.有两个关系R(A,B,C)和S(B,C,D),将R和S进行自然连接,得到的结果包含几个列。

  • A. 6
  • B. 5
  • C. 2
  • D. 4
我的答案: D:4;正确答案: D:4;

12.关系模型中,一个码是( )。

  • A. 由一个或多个属性组成,其值能够惟一标识关系中一个元组
  • B. 可以由多个任意属性组成
  • C. 以上都不是
  • D. 至多由一个属性组成
我的答案: A:由一个或多个属性组成,其值能够惟一标识关系中一个元组;正确答案: A:由一个或多个属性组成,其值能够惟一标识关系中一个元组;
答案解析:

13.关系操作中,操作的对象和结果是____

  • A. 列
  • B. 记录
  • C. 集合
  • D. 元组
我的答案: C:集合;正确答案: C:集合;

 14.一张职工表,包含“性别”属性,要求该属性只能取“男”或“女”,这属于___

  • A. 实体完整性
  • B. 用户定义的完整性
  • C. 参照完整性
  • D. 关系不变性
我的答案: B:用户定义的完整性;正确答案: B:用户定义的完整性;

15.关系模型的三类完整性约束是什么?它们是什么意思?

  • 关系模型的三类完整性约束是指实体完整性参照完整性用户定义的完整性,它们的意思如下:
  • 1. 实体完整性:关系模型中的每个实体必须具有一个可以唯一标识该实体的主键,而且主键值不能为空。实体完整性保证了表中每个实体的唯一性和完整性,也保证了表中数据的一致性。
  • 2. 参照完整性:在多个表之间建立引用关系时,被引用表的数据必须存在于引用表中。参照完整性保证了数据的正确性和一致性。
  • 3. 用户定义的完整性:根据需求自定义的完整性约束,可以对某些属性的取值范围或某些特定条件进行限制,以确保数据的正确性和一致性。例如,在一个表中限制某个属性取值必须是数字或者日期等。

16.关系模型中,非主属性不可能出现在任何候选码中

  • A. 对
  • B. 错

我的答案: 对正确答案: 对

17.什么是主码、外码、候选码、全码?

超键

在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键)

主码(主键,主关键字,primary key)

主关键字是表的行的唯一标识的候选关键字。一个表只有一个主关键字。 主键可以由一个字段,也可以由多个字段组成,分别称为单字段主键多字段主键。并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。

外码(外键,外关键字,foreign key)(不含多余属性的超键)

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。(图中,上面的是从表,下面的是主表)

 

候选码(candidate key)

  • 若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为(超级码)候选码。
  • 例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么学号和姓名,班级都是(超级码)候选码。
  • 简单的说,候选码(超级码)就是可以被选为主码的属性或属性组。当一个关系有N个属性或属性组可以唯一标识时,则说明该关系有N个候选码,可以选定其中一个作为主码。
  • 候选码中出现过的属性称为主属性非主属性就是不包含在任何候选码中的属性
  • 例如:关系 工人(工号,身份证号,姓名,性别,部门).显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。其他的“姓名”“性别”“部门”就是非主属性。(如果主码是一个属性组,那么属性组中的属性都是主属性)

全码(all key)

  • 关系模型的所有属性组 组成 该关系模式的 候选码,称为全码。即所有属性当作一个码。若关系中只有一个候选码,且这个候选码中包含全部属性,则该候选码为全码
  • 如,关系模式R(T,C,S),属性T表示教师,属性C表示课程,属性S表示学生。假如设一个教师可以讲授多门课程,某门课程可以有多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要区分关系中的每一个元组,这个关系模式R的码(主键)应为全属性T、C和S,即All-key

18.SQL语言是_____语言

  • A. 网络数据库
  • B. 非数据库
  • C. 层次数据库
  • D. 关系数据库
我的答案: D:关系数据库;正确答案: D:关系数据库;

19.关于SQL语言,下列说法正确的是

  • A. SQL采用的是面向记录的操作方式,以记录为单位进行操作
  • B. SQL作为嵌入式语言语法与独立的语言有较大差别
  • C. 数据控制功能不是SQL语言的功能之一
  • D. SQL是非过程化的语言,用户无须指定存取路径
我的答案: D:SQL是非过程化的语言,用户无须指定存取路径;正确答案: D

20. 数据库中建立索引是为了

  • A. 加快建表速度
  • B. 提高安全性
  • C. 节省存储空间
  • D. 加快存取速度
我的答案: D:加快存取速度;正确答案: D

21.下列说法不正确的是

  • A. 基本表和视图中都存储数据
  • B. 可以从基本表或视图上定义视图
  • C. 可以使用SQL对基本表和视图进行操作
  • D. 基本表和视图一样,都是关系
我的答案: A:基本表和视图中都存储数据;正确答案: A

22.SQL数据操纵语句包括SELECT,INSERT,UPDATE,DELETE等,最重要且使用最频繁的是_____

  • A. INSERT
  • B. DELETE
  • C. UPDATE
  • D. SELECT
我的答案: D:SELECT;正确答案: D

23.SQL具有两种使用方式,交互式SQL和______

  • A. 提示式SQL
  • B. 解释式SQL
  • C. 多用户SQL
  • D. 嵌入式SQL
我的答案: D:嵌入式SQL;正确答案: D
  • SQL具有两种使用方式,交互式SQL和嵌入式SQL。
  • 交互式SQL是通过命令行或图形界面等方式,直接输入SQL语句与数据库进行交互操作的方式。而嵌入式SQL是将SQL语句嵌入到编程语言中,通过编程语言对数据库进行操作的方式。
  • 嵌入式SQL可以使得应用程序与数据库进行无缝连接,从而实现更加灵活、高效的数据操作。
  • 提示式SQL和解释式SQL都不是SQL的使用方式。
  • 提示式SQL是一种交互式SQL的变种,可以通过提示符引导用户输入SQL命令。
  • 解释式SQL是一种SQL语言的解释器,可以将SQL语句解释成可以执行的代码。

24.SQL,修改表结构的是_____

  • A. ALTER
  • B. CREATE
  • C. INSERT
  • D. UPDATE
我的答案: A:ALTER;正确答案: A:ALTER;

 25.视图是数据库系统三级模式中的()

  • A. 模式映像
  • B. 内模式
  • C. 模式
  • D. 外模式
我的答案: D:外模式;正确答案: D
  • 视图(View)是从一个或几个基本表(视图)中导出的表。它是一种虚拟的表,不是一个实际存在的表,数据库中只存放视图的定义,而不存放视图对应的数据,数据仍存放在原来的基本表中。
  • 视图是基于 SQL 查询语句的结果集所创建的,一但基本表中的数据变化,从视图中查询出的数据也就随之改变了。
  • 视图像一个窗口,可看到自己感兴趣的数据及其变化
  • 定义:
    CREATE VIEW testview
    AS 
    SELECT语句

26.SQL,实现数据检索的语句是____

  • A. DELETE
  • B. UPDATE
  • C. SELECT
  • D. INSERT
我的答案: C:SELECT;正确答案: C

27.对表中数据进行删除的操作是()

  • A. DELETE
  • B. UPDATE
  • C. DROP
  • D. ALTER
我的答案: A:DELETE;正确答案: A

 28.以下试题基于这样的三个表即学生表S、课程表C和学生选课表SC,它们的结构如下

S(S#, SN, SEX, AGE, DEPT)
C(C#, CN)
SC(S#, C#, GRADE)
其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名, GRADE为成绩
检索选修4门以上课程的学生总成绩(不统计不及格的课)并按总成绩降序排列出来。正确的 SELECT语句是

  • A. SELECT S#, SUM(GRADE)
    FROM SC
    WHERE GRADE>=60
    ORDER BY 2 DESC
    GROUP BY S#
    HAVING COUNT(*)>=4
  • B. SELECT S#, SUM(GRADE)
    FROM SC
    WHERE GRADE>=60
    GROUP BY S#
    ORDER BY 2 DESC
    HAVING COUNT(*)>=4
  • C. SELECT S#, SUM(GRADE)
    FROM SC
    WHERE GRADE>=60
    HAVING COUNT(*)>=4
    GROUP BY S#
    ORDER BY 2 DESC
  • D. SELECT S#, SUM(GRADE)
    FROM SC
    WHERE GRADE>=60
    GROUP BY S#
    HAVING COUNT(*)>=4
    ORDER BY 2 DESC
我的答案: D:SELECT S#, SUM(GRADE) FROM SCWHERE GRADE>=60GROUP BY S#HAVING COUNT(*)>=4ORDER BY 2 DESC;正确答案: D
 

29.关系运算中花费时间可能最长的是

  • A. 笛卡尔积
  • B. 选择
  • C. 除
  • D. 投影
我的答案: A:笛卡尔积;正确答案: A

30.自然连接与等值连接的差别在于()

  • A. 等值连接要求相等的分量一定是公共属性,而后者则相反
  • B. 等值连接不把重复的属性除去;而自然连接要把重复的属性除去
  • C. 自然连接不把重复的属性除去;而等值连接要把重复的属性除去
  • D. 等值连接与自然连接本质完全一样
我的答案: B:等值连接不把重复的属性除去;而自然连接要把重复的属性除去;正确答案: B

31.(填空题)设有学生成绩数据库XSCJ,
Student(学号,姓名,专业名,性别,出生时间,总学分,备注)。
Course(课程号,课程名,开课学期,学时,学分)
StuCourse(学号,课程号,成绩)。
试写出以下操作的SQL语句:
查询修读“计算机基础”的学生姓名;注意在SQL语言中,字符串“计算机基础”要写成\'计算机基础\'
SELECT ____填空 ____1____FROM Student a, Course b, StuCourse c
WHERE ____填空 ____2____AND ____填空 ____3____AND ____填空 ____4____

正确答案:
(1) 第1空:
姓名
第2空:
b.课程号=c.课程号
第3空:
a.学号=c.学号
第4空:
b.课程名=\'计算机基础\'

32.嵌套查询是指讲一个查询块嵌套在另一个查询块的WHILE子句或____子句中。

答案:
(1) HAVING

33.等值连接一定是自然连接,但自然连接不一定是等值连接。

  • A. 对
  • B. 错
答案: B.错
1、自然连接一定是等值连接,但等值连接不一定是自然连接。
2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。
3、等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
 

Java开发工程师(Web方向) - 03.数据库开发 - 期末考试

期末考试

 

编程题

本编程题包含4个小题,覆盖知识点从基础的JDBC、连接池到MyBatis。

1(10分)

有一款在线教育产品“天天向上”主要实现了在手机上查看课程表的功能。该产品的后端系统有一张保存了所有客户课程信息的数据库表,表结构如下:

请使用JDBC编写一段程序,实现读取用户名为“ZhangSan”的同学的所有课程名称,输出到控制台终端。

答:

数据库:

/usr/local/mysql/bin
./mysql -u root -p
mysql> CREATE DATABASE final_assignment;
mysql> grant all privileges on final_assignment.* to matt@localhost;
mysql> quit
./mysql -u matt -p;
mysql> use final_assignment;
mysql> CREATE TABLE Enrollment (
    -> id int auto_increment primary key,
    -> UserName varchar(100) not null,
    -> courseName varchar(100) not null
    -> );
mysql> INSERT INTO Enrollment VALUES (null, "ZhangSan", "Math");
mysql> INSERT INTO Enrollment VALUES (null, "Lisi", "Math");
mysql> INSERT INTO Enrollment VALUES (null, "ZhangSan", "Graphics");

 JDBC程序:

public class curriculum {

    static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
    static final String URL = "jdbc:mysql://localhost/final_assignment";
    static final String USER_NAME = "matt";
    static final String PASSWORD = "matt";
    
    public static void curriculumDataProcessing() throws ClassNotFoundException {
        Connection conn = null;
        PreparedStatement ptmt = null;
        ResultSet rs = null;
        
        String sql = "select CourseName from Enrollment where UserName = ?";
        String userName = "ZhangSan";
        
        Class.forName(DRIVER_NAME);
        
        try {
            conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
            ptmt = conn.prepareStatement(sql);
            ptmt.setString(1, userName);
//            System.out.println(ptmt.toString());
            rs = ptmt.executeQuery();
            
            while (rs.next()) {
                System.out.println(rs.getString("courseName"));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(conn!=null) conn.close();
                if(ptmt!=null) ptmt.close();
                if(rs!=null) rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws ClassNotFoundException {
        curriculumDataProcessing();
    }
}

输出:

 

 
2(10分)

使用游标方式读取题目1中所有用户的所有课程的课程名称和用户名称,输出到控制台终端。

答:

在题1的代码中修改:

static final String URL = "jdbc:mysql://localhost/final_assignment?useCursorFetch=true";

String sql = "select UserName, CourseName from Enrollment";

ptmt.setFetchSize(2);

System.out.println(rs.getString("userName") + ": " + rs.getString("courseName"));

删除ptmt.setString(1, userName);

public class CurriculumFetchQ2 {

    static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
    static final String URL = "jdbc:mysql://localhost/final_assignment?useCursorFetch=true";
    static final String USER_NAME = "matt";
    static final String PASSWORD = "matt";
    
    public static void curriculumDataProcessing() throws ClassNotFoundException {
        Connection conn = null;
        PreparedStatement ptmt = null;
        ResultSet rs = null;
        
        String sql = "select UserName, CourseName from Enrollment";
        
        Class.forName(DRIVER_NAME);
        
        try {
            conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
            ptmt = conn.prepareStatement(sql);
            ptmt.setFetchSize(2);
            rs = ptmt.executeQuery();
            
            while (rs.next()) {
                System.out.println(rs.getString("userName") + ": " + rs.getString("courseName"));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(conn!=null) conn.close();
                if(ptmt!=null) ptmt.close();
                if(rs!=null) rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws ClassNotFoundException {
        curriculumDataProcessing();
    }
}

 

3(10分)

使用DBCP数据库连接池实现题目1中需要完成的功能。

答:

1. add external jar -> commons-dbcp2-2.1.1.jar

2. 

package com.sheng.database.finalassignment;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbcp2.BasicDataSource;

public class CurriculumDBCPQ3 {

    public static BasicDataSource ds = null;
    
    public static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost/final_assignment";
    public static final String USER_NAME = "matt";
    public static final String PASSWORD = "matt";
    
    public static void dbpoolInit() throws ClassNotFoundException {
        // initialization
        ds = new BasicDataSource();
        
        ds.setDriverClassName(DRIVER_NAME);
        ds.setUrl(URL);
        ds.setUsername(USER_NAME);
        ds.setPassword(PASSWORD);
        ds.setMaxTotal(2);
    }
    
    public static void curriculumDataProcessing() {
        Connection conn = null;
        PreparedStatement ptmt = null;
        ResultSet rs = null;
        
        String sql = "select CourseName from Enrollment where UserName = ?";
        String userName = "ZhangSan";
        
        try {
            conn = ds.getConnection();
            ptmt = conn.prepareStatement(sql);
            ptmt.setString(0, userName);
            rs = ptmt.executeQuery();
            
            while(rs.next()) {
                System.out.println(rs.getString("courseName"));
            }
        
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn!=null) conn.close();
                if (ptmt!=null) ptmt.close();
                if (rs!=null) rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    public void run() {
        long start = System.currentTimeMillis();
        while(System.currentTimeMillis() - start < 10000) {
            curriculumDataProcessing();
        }
    }
    
    public static void main (String[] args) throws ClassNotFoundException {
        dbpoolInit();
        for (int i = 0; i < 10; i++) {
            curriculumDataProcessing();
        }
    }    
}
4(10分)

由于录入课程错误,现在需要编写一段程序,实现将“ZhangSan”的“math”课程交给“LiSi”,

你需要完成将“ZhangSan”的“math”课程记录删除,然后新插入一个“LiSi”的“math”课程,且两个过程要作为一个事务执行。

答:

package com.sheng.database.finalassignment;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class CurriculumTransactionQ4 {

    static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
    static final String URL = "jdbc:mysql://localhost/final_assignment";
    static final String USER_NAME = "matt";
    static final String PASSWORD = "matt";
    
    public static void updateDataInfoByTransaction () throws ClassNotFoundException {
        Connection conn = null;
        PreparedStatement ptmt1 = null;
        PreparedStatement ptmt2 = null;
        
        String sql1 = "DELETE FROM Enrollment WHERE userName=? AND courseName=?";
        String sql2 = "INSERT INTO Enrollment VALUES (null, ?, ?)";
        String userName1 = "ZhangSan";
        String userName2 = "ZhangSan";
        String courseName = "Math";
        
        Class.forName(DRIVER_NAME);
        try {
            conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
            conn.setAutoCommit(false);
            
            ptmt1 = conn.prepareStatement(sql1);
            ptmt1.setString(1, userName1);
            ptmt1.setString(2, courseName);
            ptmt1.execute();
            
            ptmt2 = conn.prepareStatement(sql2);
            ptmt2.setString(1, userName2);
            ptmt2.setString(2, courseName);
            ptmt2.execute();
            
            conn.commit();
            
        } catch (SQLException e) {
            if(conn!=null) {
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) conn.close();
                if (ptmt1 != null) ptmt1.close();
                if (ptmt2 != null) ptmt2.close();
            } catch (SQLException e) { 
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) throws ClassNotFoundException {
        updateDataInfoByTransaction();
    }
}

运行后的数据库表内容:

 

 

 

 

以上是关于数据库考试(小题+知识点)的主要内容,如果未能解决你的问题,请参考以下文章

中级审计师考试多选题究竟如何计分?

Java开发工程师(Web方向) - 03.数据库开发 - 期末考试

计算机系统结构2021期末复习考试重点大纲

计算机系统结构2021期末复习考试重点大纲

2017年上半年教师资格证考试《幼儿保教知识与能力》真题

Android应用程序开发期末考试试卷