答题解析

1. 以下不属于SQL分类的是() 分值5分

○A. DDL
○B. TCL
○C. DCL
●D. QCL
○E. DML
回答正确(+5分)

2. 对SCORE表中的COURSE字段求平均值可以使用哪个函数() 分值5分

○A. SUM( COURSE )
●B. AVG( COURSE )
○C. MAX( COURSE )
○D. MIN( COURSE )
○E. COUNT( COURSE )
回答正确(+5分)

3. 以下哪个函数可以实现将日期按照%Y年%m月%d日格式显示() 分值5分

○A. NOW()
●B. DATE_FORMAT()
○C. STR_TO_DATE()
○D. CURDATE()
回答正确(+5分)
解析:
NOW() 获得系统时间(年月日时分秒)
DATE_FORMAT() 日期按格式转字符串
STR_TO_DATE() 字符串按格式转日期
CURDATE() 获得系统日期(年月日)
CURTIME() 获取当前时间(时分秒)
DATE_SUB()日期减少
DATE_ADD()日期增加

4. 关系数据库中主键是() 分值5分

○A. 创建唯一的索引,允许空值
○B. 只允许以表中的第一个字段建立
○C. 允许有多个主键
●D. 标识表中的唯一的记录
回答正确(+5分)
解析:
数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

5. UNIQUE的作用是() 分值5分

●A. 保证各行在该索引上的值都不得重复
○B. 保证各行在该索引上的值都不能为空
○C. 保证设置唯一索引的列不能再设置其他索引
○D. 保证唯一索引不能被删除
回答正确(+5分)
解析:
唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。

6. 以下哪种操作能够实现实体完整性() 分值5分

○A. 设置唯一键
●B. 设置主键
○C. 设置外键
○D. 设置不为NULL
回答正确(+5分)
解析:实体完整性,指定主键
域完整性,根据设计需求设置其他约束如:长度,不为空,唯一,默
值检查等。
参照完整性,设置外键和级联

7. 为数据表创建索引的目的是() 分值5分

●A. 提高查询的检索能力
○B. 归类
○C. 创建唯一索引
○D. 创建主键
回答正确(+5分)
解析:创建索引的主要目的就是增加检索能力加快速度。
1、通过唯一性索引(unique)可确保数据的唯一性;
2、加快数据的检索速度;
3、加快表之间的连接;
4、减少分组和排序时间;
5、使用优化隐藏器提高系统性能。
索引的类别介绍:
1、唯一索引:
唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。
2、主键索引:
数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

8. 以下哪一个不属于事务的特性() 分值5分

○A. 原子性
○B. 隔离性
●C. 瞬时性
○D. 一致性
回答正确(+5分)
解析:
⑴ 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态;一个事务提交操作的数据后,其他事务看到一致的数据结果。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
⑶ 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
关于事务的隔离性数据库提供了多种隔离级别。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

9. 用于将事务处理写入数据库的命令是() 分值5分

●A. COMMIT
○B. ROLLBACK
○C. SAVEPOINT
○D. INSERT
回答正确(+5分)
解析:
Commit 提交事务。事务提交后才会永久写入数据库。持久性,一致性
Rollback 回滚事务。事务回滚后之前的操作内容失效。
Savepoint a 设置回滚点,rollback a 回滚至指定位置。
拓展部份:
数据库的物理存储会分成许多个页(Page),记录都存储在页中,数据每一次IO,操作的最小单位是一个页。数据库运行时,会在内存中维护一个缓冲区(Buffer Pool)。缓冲区缓存部分的页(因为内存有限,所有不能把所有数据都缓存进来)。每次对数据的操作,都需要把磁盘中的页读入缓冲区,然后再进行操作;如果缓冲区中有对应的页,就不需要读磁盘。如果数据库要读入一个页,而此时需要缓冲区已经被用完了,这个时候就要替换出一个页面,腾出一块内存给新读入的页面。如果被换出的页被改过(在内存中每个页会有个Dirty标记,标识当前页面是否被修改过),就要把内存页写入到磁盘中。

10. 以下UNION描述错误的是() 分值5分

○A. 可以连接结果集完全一样的查询语句
○B. 可以对结果集再进行操作
○C. 可以连接结果集不同的查询语句
●D. 两个查询结果集列数量和类型相同就可以连接
回答错误(+0分)
正确答案:
C. 可以连接结果集不同的查询语句
解析:
合并结果集时,只要两个查询结果集的字段数量和类型匹配即可合并。
合并的结果集可以作为子查询结果,继续查询操作
拓展:
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。
Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All
两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。

11. 编写SQL命令创建一张表,要求
1) 创建表EMP( ENO , ENAME , SAL )
2) ENO设置 主键约束
3) ENAME 设置 唯一约束
4) SAL 设置 不为空约束
5) 设置表的默认字符集UTF8 分值5分

CREATE TABLE EMP(
ENO INT(10),
ENAME VARCHAR(20),
SAL FLOAT(10,2)
)CHARACTER SET UTF8;
ALTER TABLE EMP ADD PRIMARY KEY(ENO);
ALTER TABLE EMP ADD CONSTRAINT UK_EMP UNIQUE KEY(ENAME);
ALTER TABLE EMP MODIFY SAL FLOAT(10,2) NOT NULL;
答案解析:
CREATE TABLE EMP(
ENO INT PRIMARY KEY,
ENAME VARCHAR(8) UNIQUE,
SAL INT NOT NULL
) DEFAULT CHARACTER SET UTF8

12. 编写SQL,向上述EMP表中插入一条记录,并查询显示 分值5分

INSERT INTO EMP VALUES(1,’LISI’,100);
SELECT ENO,ENAME,SAL FROM EMP;
答案解析:
INSERT INTO EMP(ENO,ENAME,SAL) VALUES(1,’TOM’,2250);

SELECT ENO,ENAME,SAL FROM EMP ;

13. 编写SQL,将上述EMP表中的员工工资上调100,并查询显示 分值5分

UPDATE EMP SET SAL = SAL + 100 ;
SELECT ENO,ENAME,SAL FROM EMP;
答案解析:
UPDATE EMP SET SAL = SAL + 100 ;

SELECT ENO,ENAME,SAL FROM EMP ;

解析: 加强sql常用语句的练习
业务上就是工资列自身+100
但与java不同,sql没有+=
所以只能sal = sal+100

14. 有下图所示的表数据,完成SQL编写




14.1 关联查询每一个员工的完整信息(包含部门名称),并按照工资倒序排序. 分值5分

MySQL知识点练习 - 图1MySQL知识点练习 - 图2
SELECT E.编号,E.名称,E.部门,E.工资,D.编号,D.名称 FROM 员工表 E INNER JOIN 部门表 D ON E.部门 = D.编号 ORDER BY E.工资 DESC;
答案解析:
SELECT
员工表.编号,
员工表.名称,
工资,
部门,
部门表.名称
FROM
员工表 INNER JOIN 部门表 ON 员工表.部门 = 部门表.编号
ORDER BY 工资 DESC

14.2 查询员工工资大于平均水平的
分值5分
MySQL知识点练习 - 图3MySQL知识点练习 - 图4
SELECT 编号,名称,工资 FROM 员工表 WHERE 工资 > (SELECT AVG(工资) FROM 员工表);

答案解析:
SELECT
编号,
名称,
部门,
工资,
( SELECT AVG(工资) FROM 员工表 ) 平均工资
FROM
员工表
WHERE
工资 > ( SELECT AVG(工资) FROM 员工表 )

14.3 查询部门人数多于1个的部门信息 分值5分
MySQL知识点练习 - 图5MySQL知识点练习 - 图6
SELECT 编号,名称 FROM 部门表 WHERE 编号 = (SELECT 部门 FROM 员工表 GROUP BY 部门 HAVING COUNT(编号) > 1);

答案解析:
SELECT
编号,
名称,
人数
FROM
部门表
INNER JOIN
(SELECT 部门,COUNT(编号) 人数 FROM 员工表 GROUP BY 部门 HAVING
COUNT(编号) > 1)人数表
ON 部门表.编号 = 人数表.部门