SQL - 使用 DDL 语句练习题



1.Oracle 数据库中 DDL 的全称是什么?

  1. 数据删除语言
  2. 数据定义语言
  3. 数据委派语言
  4. 虚拟数据语言

答案:B. DDL 是 SQL 的一个类别,代表数据定义语言。其他 SQL 类型包括 DML、DCL 和 TCL。

2.DDL 语句用于以下哪些 Oracle 数据库对象?

  1. 子查询

答案:A. DDL 包含 CREATE、ALTER 和 ANALYZE 等命令,用于在数据库模式中创建表、查看存储的子程序和包。

3.Oracle 数据库中包含数据的基本存储单元是什么?

  1. 视图
  2. 查询

答案:D. 表是 Oracle 数据库中数据的物理存储的基本单元。

4.以下哪个选项最能定义视图?

  1. 它是表的简写形式
  2. 它是来自一个或多个表的子集的逻辑表示
  3. 它只有一行一列
  4. 以上都不是

答案:B. 视图是一个查询,它像一个窗口一样格式化一个或多个表中包含的数据。视图不包含任何物理数据,而只是一个在运行时创建的查询。

5. 以下哪些是数据库对象?

  1. 序列
  2. 同义词
  3. 以上所有

答案:D. 物理存储在数据库模式中的对象是数据库对象。

6. 以下哪些数据库对象生成数值?

  1. 视图
  2. 索引
  3. 序列

答案:D. 序列用于生成唯一的数值,从一个确定的值开始,并以指定的因子递增。可以创建一个序列来生成一系列整数。序列生成的值可以存储在任何表中。序列是使用 CREATE SEQUENCE 命令创建的。

7.以下哪些数据库对象为对象提供替代名称?

  1. 同义词
  2. 序列
  3. 视图
  4. 索引

答案:A. 同义词为数据库对象提供永久别名。公共同义词可供任何数据库用户使用。私有同义词仅可供创建它的用户使用。同义词是使用 CREATE SYNONYM 命令创建的。同义词是使用 DROP SYNONYM 命令删除的。只有具有 DBA 权限的用户才能删除公共同义词。

8.以下哪些数据库对象可以提高某些查询的性能?

  1. 同义词
  2. 视图
  3. 索引

答案:D.

9. 什么时候可以创建表?

  1. 当数据库没有被任何用户使用时
  2. 当数据库新创建时
  3. 它可以在任何时候创建,即使用户正在使用数据库
  4. 以上都不是

答案:C. 可以创建索引以加快查询过程。当存在索引时,DML 操作始终较慢。Oracle 11g 会自动为 PRIMARY KEY 和 UNIQUE 约束创建索引。显式索引是使用 CREATE INDEX 命令创建的。如果查询条件或排序操作基于用于创建索引的列或表达式,则 Oracle 11g 可以自动使用索引。

10. 关于表,以下哪项是正确的?

  1. 不必指定表的大小
  2. 每个表的大小相同
  3. 表可以在线修改
  4. 以上都不是

答案:A, C.

11. 创建了一个名为 123_A 的表来存储组织中的员工人数。表名有什么错误?

  1. 表名不能以数字开头
  2. 这个名字没有错。
  3. 命名表时不能使用下划线
  4. 以上都不是

答案:A. 根据对象命名约定,表名必须以字母开头。

12. 表名可以包含多少个字母?

  1. 1-20 个字符
  2. 1-10 个字符
  3. 1-30 个字符
  4. 1-50 个字符

答案:C. 表名不能超过 30 个字符。

13 以下哪些字符可以用于命名表?

  1. A 到 Z
  2. a 到 z
  3. 0 到 9
  4. 以上所有

答案:D. 根据 Oracle 的标准命名约定,对象名称可以包含任何大小写的字母。强制要求第一个位置为字母,其余位置可以是字母和数字的混合。

14. 以下哪些特殊字符可以用于命名表?

  1. @
  2. #
  3. $
  4. _(下划线)

答案:B, C, D. 命名表时,不允许使用其他特殊字符(除了 (#, $, _))。不建议在表名中使用特殊字符。

15. 关于表名,以下哪项是正确的?

  1. 表可以具有与同一用户拥有的其他对象使用的名称相同的名称
  2. 序列和表可以具有相同的名称
  3. 视图和表可以具有相同的名称
  4. 表名不得重复同一用户拥有的其他对象的名称

答案:D. 根据命名空间,表名不能与任何其他模式对象相同。共享相同命名空间的模式对象包括表、视图、序列、私有同义词、存储过程、存储函数、包、物化视图和用户定义类型。

16.您创建一个表并将其命名为 COUNT。CREATE TABLE 脚本的结果是什么?

  1. 表将不会创建
  2. 表将被创建,并且会自动在名称 COUNT_ 后添加下划线
  3. 将抛出 ORA 错误
  4. 表 COUNT 将在没有任何错误的情况下创建

答案:A, C. 您不能使用与 Oracle 服务器保留字相同的名称创建表。

17. 您使用带引号的标识符 '' 创建一个表。您将如何引用此表?

  1. 'table_name'
  2. "table_name"
  3. A 或 B 均可
  4. 以上都不是

答案:B. 如果使用带引号的标识符创建了表名,则必须使用双引号进行寻址。不建议使用带引号的标识符。带引号的标识符区分大小写

18. 您创建了一个名为 EMPLOYEES 的表。以下哪些是可能的?

  1. 可以将其称为 eMPLOYEES
  2. 可以将其称为 EMPLoyees
  3. 可以将其称为 employees
  4. 以上所有

答案:D. 在 Oracle 中,未带引号的对象名称不区分大小写。

19. 以下哪些是创建表的先决条件?

  1. CREATE TABLE 权限
  2. 存储空间
  3. 表中的数据
  4. 以上都不是

答案:A, B. 用户必须拥有 CREATE TABLE 权限,并且必须有足够的存储空间来分配表段的初始扩展。

20. 创建表的语法是什么?

  1. CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [,..] );
  2. CREATE TABLE INTO [schema.] table (column datatype [DEFAULT expr] [,..] );
  3. CREATE TABLE VALUES [schema.] table (column datatype [DEFAULT expr] [,..] );
  4. 以上都不是

答案:A.

21. 选择创建表时必须指定的元素。

  1. 列名
  2. 列数据类型
  3. 列大小
  4. 以上所有

答案:D. 表必须至少包含一列,其数据类型规范以及精度(如果需要)。

22. 一个名为“Kevin”的用户想要访问另一个名为“Jonathan”的用户拥有的表。以下哪些对 Kevin 有效?

  1. Select * from Kevin.employees;
  2. Select * from jonathan.employees;
  3. A 或 B 均可
  4. 以上都不是

答案:B.

23. 关于模式,以下哪项是正确的?

  1. 模式由数据库用户拥有,并且与该用户具有相同的名称
  2. 每个用户拥有一个模式
  3. 模式对象包括数据库链接
  4. 以上所有

答案:D. 数据库中的用户空间称为模式。模式包含用户拥有或访问的对象。每个用户可以拥有自己的单个模式。

24. 关于表,以下哪项是正确的?

  1. 为表提供了默认值
  2. 在 INSERT 语句期间,可以为表的列提供默认值
  3. A 或 B 均可
  4. 以上都不是

答案:B. 可以使用 DEFAULT 关键字在定义期间为列指定默认值。

25. 创建表时,以下哪些可以与 DEFAULT 选项一起使用?

  1. 字符串
  2. 表达式
  3. SQL 函数
  4. 以上所有

答案:D. 列的默认值可以是文字或使用 SQL 函数的派生值。

26. 以下哪个命令用于查看表的结构?

  1. UPDATE
  2. SHOW
  3. DESCRIBE
  4. SPOOL

答案:C. DESCRIBE 是一个 SQL*Plus 命令,用于列出表的结构。

27.列上的 CHECK 约束的限制是多少?

  1. 无限制
  2. 1
  3. 2
  4. 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)
  1. DROP employees
  2. DROP TABLE employees
  3. TRUNCATE employees
  4. 以上都不是

答案:B.

29. 关于命名空间,以下哪项是正确的?

  1. 它是对象类型组
  2. 在命名空间中,所有对象名称都应由模式和名称唯一标识
  3. 不同命名空间中的相同类型的对象可以共享相同的名称
  4. 以上所有

答案:D. 命名空间定义了一组对象类型,其中所有名称都必须由模式和名称唯一标识。不同命名空间中的对象可以共享相同的名称。

30. 以下哪些对象类型共享相同的命名空间?

  1. 同义词
  2. 视图
  3. 以上所有

答案:D.

31. 关于表和索引,以下哪项是正确的?

  1. 在同一个模式中,索引和表可以具有相同的名称。
  2. 在同一个模式中,索引和表不能具有相同的名称。
  3. A和B都不对。
  4. 以上都不是

答案:A. 由于索引和约束共享相同的命名空间,因此表和索引可以具有相同的名称。

32. 创建表时,哪些说法是正确的?

  1. 创建表时,应为每一列分配数据类型。
  2. 为列分配数据类型不是强制性的。
  3. 必须为表分配数据类型,而不是为列分配数据类型。
  4. 以上都不是

答案:A. 为了构建表的结构,每一列都必须拥有行为属性,例如数据类型和精度。

33. 假设您创建了一个如下所示的表

CREATE TABLE employees
(emp_id NUMBER(4),
last_name VARCHAR2 (20)
);

Oracle 将为 LAST_NAME 列分配多少空间?

  1. 如果没有行,则 Oracle 不会为 last_name 列分配任何空间。
  2. 如果填充了行,则 Oracle 将为 last_name 列分配无限空间。
  3. A和B都不对。
  4. 以上选项都不正确。

答案:A.

34. VARCHAR2 数据类型的尺寸范围是多少?

  1. 1 字节到 2 字节
  2. 1 字节到 2000 字节
  3. 1 字节到 4000 字节
  4. 以上都不是

答案:C. 在 Oracle 11g Release 2 之前,字符串数据类型 VARCHAR2 最多可以包含 4000 字节。

35. CHAR 数据类型的尺寸范围是多少?

  1. 1 字节到 2 字节
  2. 1 字节到 2000 字节
  3. 1 字节到 4000 字节
  4. 1 字节到 3000 字节

答案:B. 在 Oracle 11g Release 2 之前,字符串数据类型 CHAR 最多可以包含 2000 字节。

36. 关于 CHAR 数据类型,哪些说法是正确的?

  1. 如果数据长度与列长度不一致,则将被替换为 NULL 值。
  2. 如果数据长度与列长度不一致,则将用空格填充。
  3. 数据必须与 CHAR 尺寸中指定的尺寸相同,否则会抛出 ORA 错误。
  4. 以上都不是

答案:B. CHAR 为值提供固定长度的存储,而 VARCHAR2 是灵活的。如果将长度小于 CHAR 精度的值插入 CHAR 列,则剩余长度将被填充到列值中。

37. 以下哪个是用于可变长度二进制数据的类型?

  1. VARCHAR
  2. VARCHAR2
  3. RAW
  4. NVARCHAR2

答案:C.

38. NUMBER 数据类型允许的精度是多少?

  1. 1 到 20
  2. 1 到 4K
  3. 1 到 30
  4. 1 到 38 位数字

答案:D. 在 Oracle 11g Release 2 之前,主要数据类型 NUMBER 的最大精度为 38 位数字。

39. NUMBER 数据类型允许的刻度是多少?

  1. 1 到 20
  2. -84 到 100
  3. -84 到 127
  4. 以上都不是

答案:C.

40. 以下哪些是日期和时间数据的数据类型?

  1. TIMESTAMP
  2. INTERVAL DAY TO SECOND
  3. TIMESTAMP WITH LOCAL TIMEZONE
  4. 以上所有

答案:D.

41. 以下哪些数据类型用于大型对象?

  1. CLOB
  2. BLOB
  3. RAW
  4. 以上所有

答案:A, B. SQL 中的 LOB 数据类型有 BLOB、CLOB 和 BFILE。

42. 如果插入的值比 VARCHAR2 数据类型列定义的长度短,会发生什么情况?

  1. 它将抛出一个 ORA 错误。
  2. 它将成功插入,并且该值将占用其所需的尽可能多的空间。
  3. 它将被插入,并且剩余的空间将用空格填充。
  4. 以上都不是

答案:B. VARCHAR2 包含可变长度字符数据。

43. Oracle 中的 NUMBER (8, 2) 是什么意思?

  1. 这意味着总共有 8 位数字,小数点前 6 位,小数点后 2 位。
  2. 这意味着总共有 10 位数字,小数点前 8 位,小数点后 2 位。
  3. 这意味着小数点前 2 位,小数点后 8 位。
  4. 以上都不是

答案:A. p 表示精度,即小数点左侧和右侧的数字总数,最多 38 位;s 或刻度表示小数点右侧的位数。例如:NUMBER(7, 2) 可以存储高达 99999.99 的数值。如果未指定精度或刻度,则该列默认为 38 位精度。

44. 以下哪个查询将创建一个没有行的表?

  1. CREATE TABLE emp AS SELECT 0 from dual;
  2. CREATE TABLE emp AS SELECT * from employees where 1=1;
  3. CREATE TABLE emp AS SELECT * from employees where 1=2;
  4. CREATE TABLE emp AS SELECT 0 from employees;

答案:C. 直接路径操作 CTAS (CREATE TABLE .. AS SELECT..) 可用于复制现有表的结构而不复制数据。

45. 以下哪个语句将向已创建的表中添加一列?

  1. ALTER TABLE table_name add column (job varchar2(20));
  2. ALTER TABLE table_name add job varchar2(20);
  3. ALTER TABLE table_name add (job varchar2(20));
  4. ALTER TABLE table_name add column (job);

答案:C. ALTER TABLE 命令允许用户向表中添加新列。在新建表中创建列的相同规则也适用于向现有表中添加列。新列必须由列名和数据类型(以及宽度,如果适用)定义。还可以分配默认值。区别在于新列添加到现有表的末尾——它将是最后一列。

46. 以下哪个语句将修改已存在列的数据类型?

  1. ALTER TABLE table_name MODIFY (job varchar2(10) );
  2. ALTER TABLE table_name MODIFY job varchar2(10);
  3. ALTER TABLE table_name MODIFY column (job varchar2(10) );
  4. ALTER TABLE table_name MODIFY (job varchar2(10) );

答案:A. ALTER TABLE..MODIFY 用于修改表中的列定义。允许的更改包括增加列精度、在数据类型族内更改数据类型或更改列的默认值。

47. 以下哪个语句将从表中删除一列?

  1.  ALTER TABLE table_name DROP (job varchar2(10) );
  2. ALTER TABLE table table_name DROP COLUMN (job varchar2(10) );
  3. ALTER TABLE table table_name DROP COLUMN (job);
  4. ALTER TABLE table_name MODIFY (job varchar2(10) );

答案:C. ALTER TABLE..DROP COLUMN 可用于从表中删除一列。

48. 以下哪个将列 emp_id 重命名为 empno?

  1. ALTER TABLE employees RENAME column emp_id to empno;
  2. ALTER TABLE employees RENAME emp_id to empno;
  3. ALTER TABLE employees RENAME column emp_id to empno;
  4. 以上都不对;

答案:A. ALTER TABLE..RENAME 可用于重命名表中已存在的列。

49. 您需要将 employees 表标记为只读。要获得所需结果,您将执行以下哪个语句?

  1. ALTER TABLE employees set READ;
  2. ALTER TABLE employees READ ONLY;
  3. ALTER TABLE employees READ_ONLY;
  4. ALTER TABLE employees set READ ONLY;

答案:B. 可以将表标记为只读,使其对 DML 和 DDL 语句处于被动状态。只读功能是在 Oracle 11g 中引入的。

50. 关于 DDL 语句,以下哪些说法是正确的?

  1. DDL 命令成为正在进行的事务的一部分。
  2. DDL 命令是自动提交的,并结束正在进行的活动事务。
  3. 如果 DDL 命令失败,当前事务仍将提交。
  4. 如果 DDL 命令失败,当前事务将回滚。

答案:B. 只有在 DDL 命令成功执行且没有错误时,它才是自动提交的。如果 DDL 命令失败,则会话中的正在进行的事务仍然处于活动状态,并且不会提交到数据库中。

51. 如果在发出 DDL 的表上存在活动事务,会发生什么情况?

  1. 事务回滚。
  2. 事务提交并终止。
  3. A 和 B 都正确。
  4. 以上都不是

答案:B.

52. 以下哪个命令将删除 SQL 语句中未使用的列?

  1. ALTER TABLE tablename DROP COLUMN column_name;
  2. ALTER TABLE tablename DROP unused columns;
  3. ALTER TABLE tablename set unused column;
  4. ALTER TABLE tablename DROP columns;

答案:C. SET UNUSED 命令仅删除表中未使用的列,并且速度更快。

53. 当尝试删除标记为只读的表时会发生什么情况?

  1. 它将抛出一个错误。
  2. 它将不再是只读的,但也不能被删除。
  3. 它将被删除,不会出现错误。
  4. 它将保持不变。

答案:C. DROP 命令会影响未设置为只读的表的字典定义,因此可以删除。

考虑以下语句,并回答后面的问题 54 和 55。

CREATE TABLE departments 
(dept_id NUMBER (2),
 dept_name VARCHAR2(14),
 create_date DATE DEFAULT SYSDATE); 

54. 如果从语句中删除 DEFAULT 子句规范会发生什么情况?

  1. 脚本将抛出错误,因为 DATE 列必须指定默认值。
  2. 系统生成的默认值将分配给该列。
  3. 表将创建,并且 CREATE_DATE 列没有默认值。
  4. 以上都不是

答案:C.

55. 关于以上语句,哪些说法是正确的?

  1. 它将自动提交会话中的事务。
  2. 它将在模式中创建 DEPARTMENTS 表。
  3. 它将为 CREATE_DATE 列设置默认值。
  4. 以上都不是

答案:A, B, C.

56. BLOB 数据类型列最多可以保存多少数据?

  1. 1 KB
  2. 2 GB
  3. 4 GB
  4. 3 KB

答案:C. 根据 Oracle 11g,BLOB 中可以容纳的最大数据大小为 4GB。

57. CLOB 和 BLOB 数据类型有什么区别?(选择最合适的答案)

  1. CLOB 是字符数据,BLOB 是二进制数据。
  2. CLOB 是最多 2GB 的字符数据,BLOB 是最多 4GB 的二进制数据。
  3. CLOB 是最多 4GB 的字符数据,BLOB 是最多 4GB 的二进制数据。
  4. 以上都不是

答案:C. CLOB 是字符大型对象,用于存储字符文件,如 PDF、文档和文本文件,而 BLOB 是二进制 LOB,用于存储媒体文件。

58. 以下哪个是 ROWID?

  1. 它是赋予一组行的序列号,从 1 开始。
  2. 它是赋予表中行的字母数字地址。
  3. A 和 B 都正确。
  4. 以上都不是

答案:B. 它是表示其表中行唯一地址的 Base-64 系统。

59. 用于存储存储在外部文件(最多 4GB)中的二进制数据的类型是什么?

  1. BLOB
  2. CLOB
  3. CFILE
  4. BFILE

答案:D. BFILE 是一种外部 LOB 类型,用于引用外部媒体文件。内部 LOB 类型是 BLOB 和 CLOB,分别用于存储在数据库中的二进制大型文件和字符大型文件。

60. 使用子查询创建的表有什么特点?

  1. 使用子查询创建表时,不会复制 VARCHAR2 数据类型列。
  2. 使用子查询创建表时,不会复制 CLOB 数据类型列。
  3. 使用子查询创建表时,不会复制 LONG 列。
  4. 以上都不是

答案:C. 使用 CTAS 方法创建表不会复制 LONG 列。

61. 以下哪个数据类型不能与 GROUP BY 和 ORDER BY 子句一起使用?

  1. CLOB
  2. VARCHAR2
  3. CHAR
  4. LONG

答案:D. LONG 数据类型不能在 GROUP BY 和 ORDER BY 子句中使用。

62. 表最多可以包含多少个 LONG 列?

  1. 不能包含。
  2. 最多 2 个。
  3. 至少 2 个。
  4. 只能 1 个。

答案:D. 表最多只能包含一列 LONG 类型列。

63. 以下哪个数据类型不能在 SQL 中受约束?

  1. VARCHAR2
  2. LONG
  3. CHAR
  4. DATE

答案:B. 无法在 LONG 类型列上创建约束。

64. 如果需要带有小数秒的日期,可以使用以下哪个数据类型?

  1. DATE
  2. VARCHAR2
  3. TIMESTAMP
  4. 以上都不是

答案:C. TIMESTAMP 数据类型提供了更精确的日期值信息。它提供小数秒和时区信息。

65. 您需要在列中存储天、小时、分钟和秒的间隔。哪个数据类型可以帮助您?

  1. TIMESTAMP
  2. INTERVAL YEAR TO MONTH
  3. INTERVAL DAY TO SECOND
  4. 以上都不是

答案:C.

66. 您需要查找 2011 年 6 月和 2012 年 6 月有多少员工入职。以下哪个数据类型可以帮助您?

  1. INTERVAL DAY TO SECOND
  2. TIMESTAMP
  3. DATE
  4. INTERVAL YEAR TO MONTH

答案:D.

67. 关于约束,哪些说法是正确的?

  1. 它们在行级别强制执行规则。
  2. 它们在表级别强制执行规则。
  3. 创建表时必须创建约束。

  4. 以上都不是

答案:B. 约束是对添加到表的**数据**应用的规则。它表示业务规则、策略或流程。违反约束的数据不会添加到表中。约束可以在创建表时作为 CREATE TABLE 命令的一部分包含在内,也可以使用 ALTER TABLE 命令添加到现有表中。基于复合列(多于一列)的约束必须使用表级方法创建。

68. 约束如何提供帮助?

  1. 它们限制表的存储容量,从而节省数据库空间
  2. 它们阻止对表的修改
  3. 如果存在依赖项,则它们会阻止删除表
  4. 以上都不是

答案:C. 约束是对添加到表的**数据**应用的规则。它表示业务规则、策略或流程。违反约束的数据不会添加到表中。

69. RAW 数据类型列可以存储的最大长度的可变长度二进制字符串是多少?

  1. 10 GB
  2. 1 TB
  3. 2 GB
  4. 4 GB

答案:C.

70. 以下哪些是 Oracle 中有效的约束?

  1. INDEX
  2. GENERAL
  3. UNIQUE
  4. PRIMARY KEY

答案:C, D. NOT NULL 约束只能使用列级方法创建。PRIMARY KEY 约束不允许在指定的列中出现重复值或 NULL 值。一个表中只能有一个 PRIMARY KEY 约束。FOREIGN KEY 约束要求列条目与表中引用的列条目匹配或为 NULL。UNIQUE 约束类似于 PRIMARY KEY 约束,但允许在指定的列中存储 NULL 值。CHECK 约束确保数据在添加到表之前满足给定条件。

71. 以下哪些 DML 操作会考虑列上的约束?

  1. INSERT
  2. UNION
  3. DELETE
  4. UPDATE

答案:A, C, D. 所有 DML 操作都遵守表列上的约束。

72. 什么时候可以创建约束?

  1. 创建表时
  2. 创建表后
  3. A 和 B 都正确。
  4. 以上都不是

答案:C. 约束可以在创建表时作为 CREATE TABLE 命令的一部分包含在内,也可以使用 ALTER TABLE 命令添加到现有表中。

73. 约束存储在哪里?

  1. 在 SGA 中
  2. 在表中
  3. 在数据字典中
  4. 以上都不是

答案:C.

74. 你创建了一个约束但没有命名它。将为该约束分配什么默认名称?

  1. SYS_Cn
  2. SYS_constraint
  3. SYS_Const
  4. SYS_C0

答案:A. 默认情况下,Oracle 会为约束分配一个通用名称 SYS_Cn,其中 n 是一个整数,用于保持约束名称的唯一性。

75. 列级约束和表级约束在功能上有什么区别?

  1. 列级约束应用于表的**所有**列
  2. 表级约束应用于表的**所有**列
  3. 它们在功能上相同,只有语法不同
  4. 以上都不是

答案:C. 从功能上讲,表级约束和列级约束的工作方式类似。复合约束只能在表级定义。

76. 关于列级约束,以下哪一项是正确的?

  1. 它们可以在创建表之前创建
  2. 它们可以在定义列之前创建
  3. 它们在定义列时包含在内
  4. 以上都不是

答案:C. 列级约束与列规范一起定义。

77. 关于 SQL 中的 NOT NULL 约束,以下哪一项是正确的?

  1. 它们应该在表级定义
  2. 它们应该在列级定义
  3. 它们应该只定义在一个列上
  4. 它们应该只定义在一行上

答案: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. 在上述语句中创建了哪种类型的约束?

  1. 列级约束
  2. 表级约束
  3. 命名约束
  4. 规范约束

答案:A. 列级约束是在列定义时创建的。

79. 可以对上述语句进行哪些修改以使其成为表级约束?

  1. CONSTRAINT emp_emp_id_PK PRIMARY KEY
  2. CONSTRAINT emp_emp_id_PK PRIMARY KEY (EMP_ID)
  3. CONSTRAINT emp_emp_id_PK EMP_ID PRIMARY KEY
  4. CONSTRAINT PRIMARY KEY emp_emp_id_PK

答案:B.

80. 关于 PRIMARY KEY 约束,以下哪一项是正确的?

  1. 它会隐式地将 NOT NULL 约束应用于其定义所在的列
  2. 它会隐式地将 UNIQUE KEY 约束应用于其定义所在的列
  3. 它会隐式地将 CHECK 约束应用于其定义所在的列
  4. 它会隐式地将 DEFAULT 约束应用于其定义所在的列

答案:A. PRIMARY KEY 约束不允许在指定的列中出现重复值或 NULL 值。一个表中只能有一个 PRIMARY KEY 约束。

81. 关于 UNIQUE KEY 约束,以下哪一项是正确的?

  1. UNIQUE KEY 约束和 PRIMARY KEY 约束相同
  2. 如果列上没有定义 NOT NULL,则 UNIQUE KEY 约束允许 NULL 值
  3. 当在列上定义 UNIQUE KEY 约束时,可以有两行内容完全相同
  4. 以上都不是

答案: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 脚本?

  1. 此表不能有两个相同的作业 ID
  2. 此表可以有两个或多个相同的作业 ID
  3. 此表可以在 JOB 列中包含 NULL 值
  4. 以上都不是

答案:A, C. JOB 列上的 UNIQUE 约束将限制重复值,但允许空值。

83. 如果将约束 emp_job_UK 修改为 emp_job_PK PRIMARY KEY (job),结果会怎样?

  1. 只有当 JOB 列中没有 NULL 值时,此更改才能发生
  2. 此更改可以在没有任何限制的情况下发生
  3. 此更改将更改列 JOB 的值
  4. 以上都不是

答案:A.

84. 关于 UNIQUE key 约束,以下哪一项是正确的?

  1. 当在列上定义 UNIQUE 约束时,会隐式地创建一个唯一的键索引
  2. 当在列上定义 UNIQUE 约束时,会隐式地创建一个 PRIMARY KEY 约束
  3. 当在列上定义 UNIQUE 约束时,会隐式地创建一个 NOT NULL 约束
  4. 以上都不是

答案:A. 当对表实施唯一约束时,Oracle 会在列上内部创建一个唯一键索引以限制值的重复。

85. 以下关于索引的哪一项是正确的?

  1. 如果对表执行 UPDATE 语句,则也需要手动更新索引
  2. 如果对表执行 DELETE 语句,则也需要手动删除索引
  3. 删除表时,索引会自动删除
  4. 如果对表执行 UPDATE 语句,则相应的索引也会更新。

答案:C, D.

86. 以下哪个 CREATE TABLE 语句有效?

  1. CREATE TABLE EMPLOYEES 
    (emp_id NUMBER (2) PRIMARY KEY,
    first_name VARCHAR(20),
    last_name VARCHAR(20),
    hire_date DATE NOT NULL); 
  2. 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); 
  3. CREATE TABLE EMPLOYEES 
    (emp_id NUMBER (2) PRIMARY KEY,
    first_name VARCHAR(20),
    last_name VARCHAR(20),
    hire_date DATE NOT NULL UNIQUE);
  4. 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 约束?

  1. 0
  2. 无限
  3. 2
  4. 1

答案:D. 一个表只能有一个主键。

88. 你想在 EMP_ID 上设置一个 CHECK 约束,使其等于通过其获取值的序列的当前值。以下哪个语句可以帮助你实现这一点?

  1. Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.CURRVAL);
  2. Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.NEXTVAL);
  3. Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (EMPNO.CURRVAL);
  4. 以上都不是

答案:D. 你不能在 CHECK 约束中使用 CURRVAL、NEXTVAL、LEVEL 和 ROWNUM 伪列

89. 以下哪个命令可以帮助将外键值转换为 NULL?

  1. ON DELETE CASCADE
  2. ON DELETE SET NULL
  3. CASCADE
  4. REFERENCES

答案:B.

90. 你需要向 EMPLOYEES 表添加一个约束,该约束限制添加薪水低于 10000 的员工。以下哪个命令可以提供所需的结果?

  1. ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK CHECK (salary >= 10000); 
  2. ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK (salary>10000); 
  3. ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK (salary = 10000); 
  4. ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK (salary < 10000); 

答案:A.

91. 你需要向 EMPLOYEES 表添加一个约束,该约束强制所有员工的 HIRE_DATE 等于 SYSDATE-7。以下哪个语句可以提供所需的结果?

  1. ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK  ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7); 
  2. ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7); 
  3. ALTER TABLE employees ADD emp_emp_sal_CHECK CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7); 
  4. 以上都不是

答案: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 脚本?

  1. 在 DEPT_ID 列的表级上定义了一个 FOREIGN KEY 约束
  2. 定义的 FOREIGN KEY 约束引用了 DEPARTMENTS 表中的 DEPT_ID
  3. A 和 B 都正确。
  4. 以上都不是

答案: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)
  1. ON DELETE SET NULL
  2. ON DELETE CASCADE
  3. DELETE ALL
  4. 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)
  1. 完整性约束错误
  2. 执行成功
  3. A和B都不对。
  4. 以上都不是

答案:A. DEPARTMENTS 中的 DEPT_ID 是 EMPLOYEES 表中的外键,并且 10 部门中存在员工,因此除非找到子记录,否则无法从父表中删除值。

广告