- SQL 认证学习资料
- SQL - 简介
- SQL - SQL 考试大纲
- SQL - SQL SELECT 语句
- SQL - 限制和排序数据
- SQL - 使用单行函数
- SQL - 条件表达式
- SQL - 使用组函数
- SQL - 从多个表中获取数据
- SQL - 使用子查询解决查询
- SQL - 使用集合运算符
- SQL - 数据操作
- SQL - 使用 DDL 语句
- SQL - 创建其他模式对象
- SQL 认证题库
- SQL - SQL SELECT 语句
- SQL - 限制和排序数据
- SQL - 使用单行函数
- SQL - 转换函数
- SQL - 条件表达式
- SQL - 使用组函数
- SQL - 从多个表中获取数据
- SQL - 使用子查询解决查询
- SQL - 使用集合运算符
- SQL - 数据操作
- SQL - 使用 DDL 语句
- SQL - 创建其他模式对象
- SQL 认证模拟考试
- SQL 认证 - 模拟考试
- SQL 认证有用资源
- SQL 认证 - 有用资源
- SQL 认证 - 讨论
SQL - 使用 DDL 语句练习题
1.Oracle 数据库中 DDL 的全称是什么?
- 数据删除语言
- 数据定义语言
- 数据委派语言
- 虚拟数据语言
答案:B. DDL 是 SQL 的一个类别,代表数据定义语言。其他 SQL 类型包括 DML、DCL 和 TCL。
2.DDL 语句用于以下哪些 Oracle 数据库对象?
- 表
- 子查询
- 行
- 列
答案:A. DDL 包含 CREATE、ALTER 和 ANALYZE 等命令,用于在数据库模式中创建表、查看存储的子程序和包。
3.Oracle 数据库中包含数据的基本存储单元是什么?
- 视图
- 列
- 查询
- 表
答案:D. 表是 Oracle 数据库中数据的物理存储的基本单元。
4.以下哪个选项最能定义视图?
- 它是表的简写形式
- 它是来自一个或多个表的子集的逻辑表示
- 它只有一行一列
- 以上都不是
答案:B. 视图是一个查询,它像一个窗口一样格式化一个或多个表中包含的数据。视图不包含任何物理数据,而只是一个在运行时创建的查询。
5. 以下哪些是数据库对象?
- 表
- 序列
- 同义词
- 以上所有
答案:D. 物理存储在数据库模式中的对象是数据库对象。
6. 以下哪些数据库对象生成数值?
- 表
- 视图
- 索引
- 序列
答案:D. 序列用于生成唯一的数值,从一个确定的值开始,并以指定的因子递增。可以创建一个序列来生成一系列整数。序列生成的值可以存储在任何表中。序列是使用 CREATE SEQUENCE 命令创建的。
7.以下哪些数据库对象为对象提供替代名称?
- 同义词
- 序列
- 视图
- 索引
答案:A. 同义词为数据库对象提供永久别名。公共同义词可供任何数据库用户使用。私有同义词仅可供创建它的用户使用。同义词是使用 CREATE SYNONYM 命令创建的。同义词是使用 DROP SYNONYM 命令删除的。只有具有 DBA 权限的用户才能删除公共同义词。
8.以下哪些数据库对象可以提高某些查询的性能?
- 表
- 同义词
- 视图
- 索引
答案:D.
9. 什么时候可以创建表?
- 当数据库没有被任何用户使用时
- 当数据库新创建时
- 它可以在任何时候创建,即使用户正在使用数据库
- 以上都不是
答案:C. 可以创建索引以加快查询过程。当存在索引时,DML 操作始终较慢。Oracle 11g 会自动为 PRIMARY KEY 和 UNIQUE 约束创建索引。显式索引是使用 CREATE INDEX 命令创建的。如果查询条件或排序操作基于用于创建索引的列或表达式,则 Oracle 11g 可以自动使用索引。
10. 关于表,以下哪项是正确的?
- 不必指定表的大小
- 每个表的大小相同
- 表可以在线修改
- 以上都不是
答案:A, C.
11. 创建了一个名为 123_A 的表来存储组织中的员工人数。表名有什么错误?
- 表名不能以数字开头
- 这个名字没有错。
- 命名表时不能使用下划线
- 以上都不是
答案:A. 根据对象命名约定,表名必须以字母开头。
12. 表名可以包含多少个字母?
- 1-20 个字符
- 1-10 个字符
- 1-30 个字符
- 1-50 个字符
答案:C. 表名不能超过 30 个字符。
13 以下哪些字符可以用于命名表?
- A 到 Z
- a 到 z
- 0 到 9
- 以上所有
答案:D. 根据 Oracle 的标准命名约定,对象名称可以包含任何大小写的字母。强制要求第一个位置为字母,其余位置可以是字母和数字的混合。
14. 以下哪些特殊字符可以用于命名表?
- @
- #
- $
- _(下划线)
答案:B, C, D. 命名表时,不允许使用其他特殊字符(除了 (#, $, _))。不建议在表名中使用特殊字符。
15. 关于表名,以下哪项是正确的?
- 表可以具有与同一用户拥有的其他对象使用的名称相同的名称
- 序列和表可以具有相同的名称
- 视图和表可以具有相同的名称
- 表名不得重复同一用户拥有的其他对象的名称
答案:D. 根据命名空间,表名不能与任何其他模式对象相同。共享相同命名空间的模式对象包括表、视图、序列、私有同义词、存储过程、存储函数、包、物化视图和用户定义类型。
16.您创建一个表并将其命名为 COUNT。CREATE TABLE 脚本的结果是什么?
- 表将不会创建
- 表将被创建,并且会自动在名称 COUNT_ 后添加下划线
- 将抛出 ORA 错误
- 表 COUNT 将在没有任何错误的情况下创建
答案:A, C. 您不能使用与 Oracle 服务器保留字相同的名称创建表。
17. 您使用带引号的标识符 '' 创建一个表。您将如何引用此表?
- 'table_name'
- "table_name"
- A 或 B 均可
- 以上都不是
答案:B. 如果使用带引号的标识符创建了表名,则必须使用双引号进行寻址。不建议使用带引号的标识符。带引号的标识符区分大小写
18. 您创建了一个名为 EMPLOYEES 的表。以下哪些是可能的?
- 可以将其称为 eMPLOYEES
- 可以将其称为 EMPLoyees
- 可以将其称为 employees
- 以上所有
答案:D. 在 Oracle 中,未带引号的对象名称不区分大小写。
19. 以下哪些是创建表的先决条件?
- CREATE TABLE 权限
- 存储空间
- 表中的数据
- 以上都不是
答案:A, B. 用户必须拥有 CREATE TABLE 权限,并且必须有足够的存储空间来分配表段的初始扩展。
20. 创建表的语法是什么?
- CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [,..] );
- CREATE TABLE INTO [schema.] table (column datatype [DEFAULT expr] [,..] );
- CREATE TABLE VALUES [schema.] table (column datatype [DEFAULT expr] [,..] );
- 以上都不是
答案:A.
21. 选择创建表时必须指定的元素。
- 列名
- 列数据类型
- 列大小
- 以上所有
答案:D. 表必须至少包含一列,其数据类型规范以及精度(如果需要)。
22. 一个名为“Kevin”的用户想要访问另一个名为“Jonathan”的用户拥有的表。以下哪些对 Kevin 有效?
- Select * from Kevin.employees;
- Select * from jonathan.employees;
- A 或 B 均可
- 以上都不是
答案:B.
23. 关于模式,以下哪项是正确的?
- 模式由数据库用户拥有,并且与该用户具有相同的名称
- 每个用户拥有一个模式
- 模式对象包括数据库链接
- 以上所有
答案:D. 数据库中的用户空间称为模式。模式包含用户拥有或访问的对象。每个用户可以拥有自己的单个模式。
24. 关于表,以下哪项是正确的?
- 为表提供了默认值
- 在 INSERT 语句期间,可以为表的列提供默认值
- A 或 B 均可
- 以上都不是
答案:B. 可以使用 DEFAULT 关键字在定义期间为列指定默认值。
25. 创建表时,以下哪些可以与 DEFAULT 选项一起使用?
- 字符串
- 表达式
- SQL 函数
- 以上所有
答案:D. 列的默认值可以是文字或使用 SQL 函数的派生值。
26. 以下哪个命令用于查看表的结构?
- UPDATE
- SHOW
- DESCRIBE
- SPOOL
答案:C. DESCRIBE 是一个 SQL*Plus 命令,用于列出表的结构。
27.列上的 CHECK 约束的限制是多少?
- 无限制
- 1
- 2
- 4
答案:A. Oracle 对列上的检查约束没有限制。
28. 以下哪个命令将删除表 employees?(假设表结构如给定)
SQL> DESC employees Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4)
DROP employees
DROP TABLE employees
TRUNCATE employees
- 以上都不是
答案:B.
29. 关于命名空间,以下哪项是正确的?
- 它是对象类型组
- 在命名空间中,所有对象名称都应由模式和名称唯一标识
- 不同命名空间中的相同类型的对象可以共享相同的名称
- 以上所有
答案:D. 命名空间定义了一组对象类型,其中所有名称都必须由模式和名称唯一标识。不同命名空间中的对象可以共享相同的名称。
30. 以下哪些对象类型共享相同的命名空间?
- 同义词
- 表
- 视图
- 以上所有
答案:D.
31. 关于表和索引,以下哪项是正确的?
- 在同一个模式中,索引和表可以具有相同的名称。
- 在同一个模式中,索引和表不能具有相同的名称。
- A和B都不对。
- 以上都不是
答案:A. 由于索引和约束共享相同的命名空间,因此表和索引可以具有相同的名称。
32. 创建表时,哪些说法是正确的?
- 创建表时,应为每一列分配数据类型。
- 为列分配数据类型不是强制性的。
- 必须为表分配数据类型,而不是为列分配数据类型。
- 以上都不是
答案:A. 为了构建表的结构,每一列都必须拥有行为属性,例如数据类型和精度。
33. 假设您创建了一个如下所示的表
CREATE TABLE employees (emp_id NUMBER(4), last_name VARCHAR2 (20) );
Oracle 将为 LAST_NAME 列分配多少空间?
- 如果没有行,则 Oracle 不会为 last_name 列分配任何空间。
- 如果填充了行,则 Oracle 将为 last_name 列分配无限空间。
- A和B都不对。
- 以上选项都不正确。
答案:A.
34. VARCHAR2 数据类型的尺寸范围是多少?
- 1 字节到 2 字节
- 1 字节到 2000 字节
- 1 字节到 4000 字节
- 以上都不是
答案:C. 在 Oracle 11g Release 2 之前,字符串数据类型 VARCHAR2 最多可以包含 4000 字节。
35. CHAR 数据类型的尺寸范围是多少?
- 1 字节到 2 字节
- 1 字节到 2000 字节
- 1 字节到 4000 字节
- 1 字节到 3000 字节
答案:B. 在 Oracle 11g Release 2 之前,字符串数据类型 CHAR 最多可以包含 2000 字节。
36. 关于 CHAR 数据类型,哪些说法是正确的?
- 如果数据长度与列长度不一致,则将被替换为 NULL 值。
- 如果数据长度与列长度不一致,则将用空格填充。
- 数据必须与 CHAR 尺寸中指定的尺寸相同,否则会抛出 ORA 错误。
- 以上都不是
答案:B. CHAR 为值提供固定长度的存储,而 VARCHAR2 是灵活的。如果将长度小于 CHAR 精度的值插入 CHAR 列,则剩余长度将被填充到列值中。
37. 以下哪个是用于可变长度二进制数据的类型?
- VARCHAR
- VARCHAR2
- RAW
- NVARCHAR2
答案:C.
38. NUMBER 数据类型允许的精度是多少?
- 1 到 20
- 1 到 4K
- 1 到 30
- 1 到 38 位数字
答案:D. 在 Oracle 11g Release 2 之前,主要数据类型 NUMBER 的最大精度为 38 位数字。
39. NUMBER 数据类型允许的刻度是多少?
- 1 到 20
- -84 到 100
- -84 到 127
- 以上都不是
答案:C.
40. 以下哪些是日期和时间数据的数据类型?
- TIMESTAMP
- INTERVAL DAY TO SECOND
- TIMESTAMP WITH LOCAL TIMEZONE
- 以上所有
答案:D.
41. 以下哪些数据类型用于大型对象?
- CLOB
- BLOB
- RAW
- 以上所有
答案:A, B. SQL 中的 LOB 数据类型有 BLOB、CLOB 和 BFILE。
42. 如果插入的值比 VARCHAR2 数据类型列定义的长度短,会发生什么情况?
- 它将抛出一个 ORA 错误。
- 它将成功插入,并且该值将占用其所需的尽可能多的空间。
- 它将被插入,并且剩余的空间将用空格填充。
- 以上都不是
答案:B. VARCHAR2 包含可变长度字符数据。
43. Oracle 中的 NUMBER (8, 2) 是什么意思?
- 这意味着总共有 8 位数字,小数点前 6 位,小数点后 2 位。
- 这意味着总共有 10 位数字,小数点前 8 位,小数点后 2 位。
- 这意味着小数点前 2 位,小数点后 8 位。
- 以上都不是
答案:A. p 表示精度,即小数点左侧和右侧的数字总数,最多 38 位;s 或刻度表示小数点右侧的位数。例如:NUMBER(7, 2) 可以存储高达 99999.99 的数值。如果未指定精度或刻度,则该列默认为 38 位精度。
44. 以下哪个查询将创建一个没有行的表?
CREATE TABLE emp AS SELECT 0 from dual;
CREATE TABLE emp AS SELECT * from employees where 1=1;
CREATE TABLE emp AS SELECT * from employees where 1=2;
CREATE TABLE emp AS SELECT 0 from employees;
答案:C. 直接路径操作 CTAS (CREATE TABLE .. AS SELECT..) 可用于复制现有表的结构而不复制数据。
45. 以下哪个语句将向已创建的表中添加一列?
ALTER TABLE table_name add column (job varchar2(20));
ALTER TABLE table_name add job varchar2(20);
ALTER TABLE table_name add (job varchar2(20));
ALTER TABLE table_name add column (job);
答案:C. ALTER TABLE 命令允许用户向表中添加新列。在新建表中创建列的相同规则也适用于向现有表中添加列。新列必须由列名和数据类型(以及宽度,如果适用)定义。还可以分配默认值。区别在于新列添加到现有表的末尾——它将是最后一列。
46. 以下哪个语句将修改已存在列的数据类型?
ALTER TABLE table_name MODIFY (job varchar2(10) );
ALTER TABLE table_name MODIFY job varchar2(10);
ALTER TABLE table_name MODIFY column (job varchar2(10) );
ALTER TABLE table_name MODIFY (job varchar2(10) );
答案:A. ALTER TABLE..MODIFY 用于修改表中的列定义。允许的更改包括增加列精度、在数据类型族内更改数据类型或更改列的默认值。
47. 以下哪个语句将从表中删除一列?
ALTER TABLE table_name DROP (job varchar2(10) );
ALTER TABLE table table_name DROP COLUMN (job varchar2(10) );
ALTER TABLE table table_name DROP COLUMN (job);
ALTER TABLE table_name MODIFY (job varchar2(10) );
答案:C. ALTER TABLE..DROP COLUMN 可用于从表中删除一列。
48. 以下哪个将列 emp_id 重命名为 empno?
ALTER TABLE employees RENAME column emp_id to empno;
ALTER TABLE employees RENAME emp_id to empno;
ALTER TABLE employees RENAME column emp_id to empno;
- 以上都不对;
答案:A. ALTER TABLE..RENAME 可用于重命名表中已存在的列。
49. 您需要将 employees 表标记为只读。要获得所需结果,您将执行以下哪个语句?
ALTER TABLE employees set READ;
ALTER TABLE employees READ ONLY;
ALTER TABLE employees READ_ONLY;
ALTER TABLE employees set READ ONLY;
答案:B. 可以将表标记为只读,使其对 DML 和 DDL 语句处于被动状态。只读功能是在 Oracle 11g 中引入的。
50. 关于 DDL 语句,以下哪些说法是正确的?
- DDL 命令成为正在进行的事务的一部分。
- DDL 命令是自动提交的,并结束正在进行的活动事务。
- 如果 DDL 命令失败,当前事务仍将提交。
- 如果 DDL 命令失败,当前事务将回滚。
答案:B. 只有在 DDL 命令成功执行且没有错误时,它才是自动提交的。如果 DDL 命令失败,则会话中的正在进行的事务仍然处于活动状态,并且不会提交到数据库中。
51. 如果在发出 DDL 的表上存在活动事务,会发生什么情况?
- 事务回滚。
- 事务提交并终止。
- A 和 B 都正确。
- 以上都不是
答案:B.
52. 以下哪个命令将删除 SQL 语句中未使用的列?
ALTER TABLE tablename DROP COLUMN column_name;
ALTER TABLE tablename DROP unused columns;
ALTER TABLE tablename set unused column;
ALTER TABLE tablename DROP columns;
答案:C. SET UNUSED 命令仅删除表中未使用的列,并且速度更快。
53. 当尝试删除标记为只读的表时会发生什么情况?
- 它将抛出一个错误。
- 它将不再是只读的,但也不能被删除。
- 它将被删除,不会出现错误。
- 它将保持不变。
答案:C. DROP 命令会影响未设置为只读的表的字典定义,因此可以删除。
考虑以下语句,并回答后面的问题 54 和 55。
CREATE TABLE departments (dept_id NUMBER (2), dept_name VARCHAR2(14), create_date DATE DEFAULT SYSDATE);
54. 如果从语句中删除 DEFAULT 子句规范会发生什么情况?
- 脚本将抛出错误,因为 DATE 列必须指定默认值。
- 系统生成的默认值将分配给该列。
- 表将创建,并且 CREATE_DATE 列没有默认值。
- 以上都不是
答案:C.
55. 关于以上语句,哪些说法是正确的?
- 它将自动提交会话中的事务。
- 它将在模式中创建 DEPARTMENTS 表。
- 它将为 CREATE_DATE 列设置默认值。
- 以上都不是
答案:A, B, C.
56. BLOB 数据类型列最多可以保存多少数据?
- 1 KB
- 2 GB
- 4 GB
- 3 KB
答案:C. 根据 Oracle 11g,BLOB 中可以容纳的最大数据大小为 4GB。
57. CLOB 和 BLOB 数据类型有什么区别?(选择最合适的答案)
- CLOB 是字符数据,BLOB 是二进制数据。
- CLOB 是最多 2GB 的字符数据,BLOB 是最多 4GB 的二进制数据。
- CLOB 是最多 4GB 的字符数据,BLOB 是最多 4GB 的二进制数据。
- 以上都不是
答案:C. CLOB 是字符大型对象,用于存储字符文件,如 PDF、文档和文本文件,而 BLOB 是二进制 LOB,用于存储媒体文件。
58. 以下哪个是 ROWID?
- 它是赋予一组行的序列号,从 1 开始。
- 它是赋予表中行的字母数字地址。
- A 和 B 都正确。
- 以上都不是
答案:B. 它是表示其表中行唯一地址的 Base-64 系统。
59. 用于存储存储在外部文件(最多 4GB)中的二进制数据的类型是什么?
- BLOB
- CLOB
- CFILE
- BFILE
答案:D. BFILE 是一种外部 LOB 类型,用于引用外部媒体文件。内部 LOB 类型是 BLOB 和 CLOB,分别用于存储在数据库中的二进制大型文件和字符大型文件。
60. 使用子查询创建的表有什么特点?
- 使用子查询创建表时,不会复制 VARCHAR2 数据类型列。
- 使用子查询创建表时,不会复制 CLOB 数据类型列。
- 使用子查询创建表时,不会复制 LONG 列。
- 以上都不是
答案:C. 使用 CTAS 方法创建表不会复制 LONG 列。
61. 以下哪个数据类型不能与 GROUP BY 和 ORDER BY 子句一起使用?
- CLOB
- VARCHAR2
- CHAR
- LONG
答案:D. LONG 数据类型不能在 GROUP BY 和 ORDER BY 子句中使用。
62. 表最多可以包含多少个 LONG 列?
- 不能包含。
- 最多 2 个。
- 至少 2 个。
- 只能 1 个。
答案:D. 表最多只能包含一列 LONG 类型列。
63. 以下哪个数据类型不能在 SQL 中受约束?
- VARCHAR2
- LONG
- CHAR
- DATE
答案:B. 无法在 LONG 类型列上创建约束。
64. 如果需要带有小数秒的日期,可以使用以下哪个数据类型?
- DATE
- VARCHAR2
- TIMESTAMP
- 以上都不是
答案:C. TIMESTAMP 数据类型提供了更精确的日期值信息。它提供小数秒和时区信息。
65. 您需要在列中存储天、小时、分钟和秒的间隔。哪个数据类型可以帮助您?
- TIMESTAMP
- INTERVAL YEAR TO MONTH
- INTERVAL DAY TO SECOND
- 以上都不是
答案:C.
66. 您需要查找 2011 年 6 月和 2012 年 6 月有多少员工入职。以下哪个数据类型可以帮助您?
- INTERVAL DAY TO SECOND
- TIMESTAMP
- DATE
- INTERVAL YEAR TO MONTH
答案:D.
67. 关于约束,哪些说法是正确的?
- 它们在行级别强制执行规则。
- 它们在表级别强制执行规则。
- 创建表时必须创建约束。
- 以上都不是
答案:B. 约束是对添加到表的**数据**应用的规则。它表示业务规则、策略或流程。违反约束的数据不会添加到表中。约束可以在创建表时作为 CREATE TABLE 命令的一部分包含在内,也可以使用 ALTER TABLE 命令添加到现有表中。基于复合列(多于一列)的约束必须使用表级方法创建。
68. 约束如何提供帮助?
- 它们限制表的存储容量,从而节省数据库空间
- 它们阻止对表的修改
- 如果存在依赖项,则它们会阻止删除表
- 以上都不是
答案:C. 约束是对添加到表的**数据**应用的规则。它表示业务规则、策略或流程。违反约束的数据不会添加到表中。
69. RAW 数据类型列可以存储的最大长度的可变长度二进制字符串是多少?
- 10 GB
- 1 TB
- 2 GB
- 4 GB
答案:C.
70. 以下哪些是 Oracle 中有效的约束?
- INDEX
- GENERAL
- UNIQUE
- PRIMARY KEY
答案:C, D. NOT NULL 约束只能使用列级方法创建。PRIMARY KEY 约束不允许在指定的列中出现重复值或 NULL 值。一个表中只能有一个 PRIMARY KEY 约束。FOREIGN KEY 约束要求列条目与表中引用的列条目匹配或为 NULL。UNIQUE 约束类似于 PRIMARY KEY 约束,但允许在指定的列中存储 NULL 值。CHECK 约束确保数据在添加到表之前满足给定条件。
71. 以下哪些 DML 操作会考虑列上的约束?
- INSERT
- UNION
- DELETE
- UPDATE
答案:A, C, D. 所有 DML 操作都遵守表列上的约束。
72. 什么时候可以创建约束?
- 创建表时
- 创建表后
- A 和 B 都正确。
- 以上都不是
答案:C. 约束可以在创建表时作为 CREATE TABLE 命令的一部分包含在内,也可以使用 ALTER TABLE 命令添加到现有表中。
73. 约束存储在哪里?
- 在 SGA 中
- 在表中
- 在数据字典中
- 以上都不是
答案:C.
74. 你创建了一个约束但没有命名它。将为该约束分配什么默认名称?
- SYS_Cn
- SYS_constraint
- SYS_Const
- SYS_C0
答案:A. 默认情况下,Oracle 会为约束分配一个通用名称 SYS_Cn,其中 n 是一个整数,用于保持约束名称的唯一性。
75. 列级约束和表级约束在功能上有什么区别?
- 列级约束应用于表的**所有**列
- 表级约束应用于表的**所有**列
- 它们在功能上相同,只有语法不同
- 以上都不是
答案:C. 从功能上讲,表级约束和列级约束的工作方式类似。复合约束只能在表级定义。
76. 关于列级约束,以下哪一项是正确的?
- 它们可以在创建表之前创建
- 它们可以在定义列之前创建
- 它们在定义列时包含在内
- 以上都不是
答案:C. 列级约束与列规范一起定义。
77. 关于 SQL 中的 NOT NULL 约束,以下哪一项是正确的?
- 它们应该在表级定义
- 它们应该在列级定义
- 它们应该只定义在一个列上
- 它们应该只定义在一行上
答案:B. NOT NULL 约束只能使用列级方法创建。
请考虑以下语句并回答后续的第 78 和 79 题
CREATE TABLE employees ( emp_id NUMBER (6) CONSTRAINT emp_emp_id_PK PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(20), hire_date DATE );
78. 在上述语句中创建了哪种类型的约束?
- 列级约束
- 表级约束
- 命名约束
- 规范约束
答案:A. 列级约束是在列定义时创建的。
79. 可以对上述语句进行哪些修改以使其成为表级约束?
- CONSTRAINT emp_emp_id_PK PRIMARY KEY
- CONSTRAINT emp_emp_id_PK PRIMARY KEY (EMP_ID)
- CONSTRAINT emp_emp_id_PK EMP_ID PRIMARY KEY
- CONSTRAINT PRIMARY KEY emp_emp_id_PK
答案:B.
80. 关于 PRIMARY KEY 约束,以下哪一项是正确的?
- 它会隐式地将 NOT NULL 约束应用于其定义所在的列
- 它会隐式地将 UNIQUE KEY 约束应用于其定义所在的列
- 它会隐式地将 CHECK 约束应用于其定义所在的列
- 它会隐式地将 DEFAULT 约束应用于其定义所在的列
答案:A. PRIMARY KEY 约束不允许在指定的列中出现重复值或 NULL 值。一个表中只能有一个 PRIMARY KEY 约束。
81. 关于 UNIQUE KEY 约束,以下哪一项是正确的?
- UNIQUE KEY 约束和 PRIMARY KEY 约束相同
- 如果列上没有定义 NOT NULL,则 UNIQUE KEY 约束允许 NULL 值
- 当在列上定义 UNIQUE KEY 约束时,可以有两行内容完全相同
- 以上都不是
答案:B. UNIQUE 约束类似于 PRIMARY KEY 约束,但允许在指定的列中存储 NULL 值。
请考虑以下语句并回答后续的第 82 和 83 题
CREATE TABLE employees ( emp_id NUMBER (6) first_name VARCHAR2(20), last_name VARCHAR2(20), job VARCHAR2(20), hire_date DATE CONSTRAINT emp_job_UK UNIQUE (job));
82. 以下哪个语句解释了上面的 CREATE TABLE 脚本?
- 此表不能有两个相同的作业 ID
- 此表可以有两个或多个相同的作业 ID
- 此表可以在 JOB 列中包含 NULL 值
- 以上都不是
答案:A, C. JOB 列上的 UNIQUE 约束将限制重复值,但允许空值。
83. 如果将约束 emp_job_UK 修改为 emp_job_PK PRIMARY KEY (job),结果会怎样?
- 只有当 JOB 列中没有 NULL 值时,此更改才能发生
- 此更改可以在没有任何限制的情况下发生
- 此更改将更改列 JOB 的值
- 以上都不是
答案:A.
84. 关于 UNIQUE key 约束,以下哪一项是正确的?
- 当在列上定义 UNIQUE 约束时,会隐式地创建一个唯一的键索引
- 当在列上定义 UNIQUE 约束时,会隐式地创建一个 PRIMARY KEY 约束
- 当在列上定义 UNIQUE 约束时,会隐式地创建一个 NOT NULL 约束
- 以上都不是
答案:A. 当对表实施唯一约束时,Oracle 会在列上内部创建一个唯一键索引以限制值的重复。
85. 以下关于索引的哪一项是正确的?
- 如果对表执行 UPDATE 语句,则也需要手动更新索引
- 如果对表执行 DELETE 语句,则也需要手动删除索引
- 删除表时,索引会自动删除
- 如果对表执行 UPDATE 语句,则相应的索引也会更新。
答案:C, D.
86. 以下哪个 CREATE TABLE 语句有效?
CREATE TABLE EMPLOYEES (emp_id NUMBER (2) PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(20), hire_date DATE NOT NULL);
CREATE TABLE EMPLOYEES (emp_id NUMBER (2) PRIMARY KEY NOT NULL, first_name VARCHAR(20), last_name VARCHAR(20), hire_date DATE NOT NULL PRIMARY KEY);
CREATE TABLE EMPLOYEES (emp_id NUMBER (2) PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(20), hire_date DATE NOT NULL UNIQUE);
CREATE TABLE EMPLOYEES (emp_id NUMBER (2), first_name VARCHAR(20), last_name VARCHAR(20), hire_date DATE NOT NULL, CONSTRAINT emp_emp_id_PK PRIMARY KEY (emp_id));
答案:A, C, D. 所有 CREATE TABLE 脚本都是有效的。
87. 一个表可以有多少个 PRIMARY KEY 约束?
- 0
- 无限
- 2
- 1
答案:D. 一个表只能有一个主键。
88. 你想在 EMP_ID 上设置一个 CHECK 约束,使其等于通过其获取值的序列的当前值。以下哪个语句可以帮助你实现这一点?
- Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.CURRVAL);
- Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.NEXTVAL);
- Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (EMPNO.CURRVAL);
- 以上都不是
答案:D. 你不能在 CHECK 约束中使用 CURRVAL、NEXTVAL、LEVEL 和 ROWNUM 伪列
89. 以下哪个命令可以帮助将外键值转换为 NULL?
- ON DELETE CASCADE
- ON DELETE SET NULL
- CASCADE
- REFERENCES
答案:B.
90. 你需要向 EMPLOYEES 表添加一个约束,该约束限制添加薪水低于 10000 的员工。以下哪个命令可以提供所需的结果?
ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK CHECK (salary >= 10000);
ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK (salary>10000);
ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK (salary = 10000);
ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK (salary < 10000);
答案:A.
91. 你需要向 EMPLOYEES 表添加一个约束,该约束强制所有员工的 HIRE_DATE 等于 SYSDATE-7。以下哪个语句可以提供所需的结果?
ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7);
ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7);
ALTER TABLE employees ADD emp_emp_sal_CHECK CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7);
- 以上都不是
答案:D. 你不能在 CHECK 约束中使用 SYSDATE、UID、USER 和 USERENV 函数。
请考虑以下查询并回答后续的第 92 到 94 题
CREATE TABLE EMPLOYEES (emp_id NUMBER (2), first_name VARCHAR(20), last_name VARCHAR(20), dept_id NUMBER (10), hire_date DATE DEFAULT SYSDATE CONSTRAINT emp_emp_id_PK PRIMARY KEY (emp_id, hire_date) CONSTRAINT emp_dept_FK FOREIGN KEY (dept_id) REFERENCES departments (dept_id) );
92. 以下哪个语句解释了 CREATE TABLE 脚本?
- 在 DEPT_ID 列的表级上定义了一个 FOREIGN KEY 约束
- 定义的 FOREIGN KEY 约束引用了 DEPARTMENTS 表中的 DEPT_ID
- A 和 B 都正确。
- 以上都不是
答案:C. 当我们为引用完整性定义 FOREIGN KEY 约束时,会使用 FOREIGN KEY 和 REFERENCES 关键字。
93. 当你删除 EMPLOYEES 表时,你需要删除 DEPARTMENTS 表中的所有依赖行。以下哪个命令可以解决此问题?(请考虑给定的表结构)
SQL> DESC employees Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
- ON DELETE SET NULL
- ON DELETE CASCADE
- DELETE ALL
- FOR UPDATE
答案:B. 如果在约束定义中包含 ON DELETE CASCADE,并且从父表中删除了记录,则子表中的任何相应记录也会自动删除。
94. 如以下所示,EMPLOYEES 表中有 5 名员工在 10 部门工作。来自管理部门的执行人员发出以下查询。
DELETE FROM departments WHERE dept_id = 10;
此查询的结果是什么?(假设表结构如所示)
SQL> DESC employees Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
- 完整性约束错误
- 执行成功
- A和B都不对。
- 以上都不是
答案:A. DEPARTMENTS 中的 DEPT_ID 是 EMPLOYEES 表中的外键,并且 10 部门中存在员工,因此除非找到子记录,否则无法从父表中删除值。