- 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 - 创建其他模式对象问题
1. 下列哪个数据库对象在用户和数据之间提供了一层抽象层?
- 表
- 行
- 视图
- 同义词
答案:C,D。视图和同义词本身不存储数据。视图是一个临时或虚拟表,用于检索存储在底层数据库表中的数据。
2. 下列哪个数据库对象可以生成序列号?
- 同义词
- 视图
- 表
- 序列
答案:D。可以创建一个序列来生成一系列整数。序列生成的值可以存储在任何表中。序列使用 CREATE SEQUENCE 命令创建。
3. 关于视图,哪些说法是正确的?
- 它们等于表
- 它们存储来自一个或多个表的数据
- 我们可以在简单视图上执行 SELECT 和其他 DML 操作
- 视图与表共享相同的命名空间,因此表和视图不能具有相同的名称
答案:C,D。不允许对包含分组函数、GROUP BY 子句、ROWNUM伪列或 DISTINCT 关键字的视图执行 DML 操作。
4. 为什么视图有用?(选择最合适的答案)
- 因为它们的名称比表短
- 为了防止用户访问表的列
- 为了简化用户的 SQL
- 以上所有
答案:B,C。视图是一个临时或虚拟表,用于检索存储在底层数据库表中的数据。每次使用视图时都必须执行视图查询。视图可用于简化查询或限制对敏感数据的访问。
5. 在以下哪些情况下,视图上不允许执行 DML 操作?
- 视图包含 GROUP BY 子句
- 基表包含 NOT NULL 列,但在视图查询中未选择
- 视图查询使用 ROWNUM 伪列
- 以上所有
答案:D。不允许对包含分组函数、GROUP BY 子句、ROWNUM 伪列或 DISTINCT 关键字的视图执行 DML 操作。
6. 视图可以从哪里获取数据?
- 来自相同模式的表
- 来自不同模式的表
- A 和 B
- 以上都不是
答案:C。
考虑给定的表结构和以下语句,并回答接下来的第 7 到第 9 个问题
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)
CREATE VIEW emp_details AS SELECT hire_date, job, salary, department_id FROM employees;
7. 您发出以下查询。用户将看到多少列作为以下查询的结果?
SELECT * FROM emp_details WHERE department_id= 100;
- 0
- 1
- 2
- 4
答案:D。由于视图定义基于 EMPLOYEES 表中的四列,因此对包含所有列的视图的查询只会显示这四列。
8. 您需要除了以上 4 列之外还需要获取部门名称。以下哪个查询将为您提供所需的结果?
SELECT E.*, dept_name FROM departments D join emp_details E ON (E.department_id= D.dept_id);
SELECT hire_date, job, salary, dept_name FROM emp_details
- 这是不可能的,视图不能与其他表连接
- 以上都不是
答案:A。视图可以在 SELECT 查询中与其他表或视图连接。
9. 您需要找到最高薪水以及部门名称,以及在视图中选择的 4 列。以下哪个查询将为您提供所需的结果?
Select dept_name, e.salary FROM departments D join emp_details E On (E.department_id= D.dept_id);
Select dept_name, max(salary) FROM departments D join emp_details E On (E.department_id= D.dept_id) Group by dept_name;
- 视图不能出现在使用分组函数的查询中
Select dept_name, max(salary) FROM departments D join emp_details E On (E.department_id= D.dept_id);
答案:B。
10. 关于同义词,以下哪些说法是正确的?
- PUBLIC 和 PRIVATE 同义词可以对同一个表具有相同的名称
- DROP SYNONYM 将删除同义词
- DROP PUBLIC SYNONYM 只能由 SYSDBA 执行
- 以上都不是
答案:A,C。同义词可以是私有同义词,用户使用它来引用他们拥有的对象,也可以是公共同义词,用户使用它来访问其他用户的数据库对象。只有 SYSDBA 或具有 DBA 权限的用户才能创建公共同义词。
11. 关于创建视图,哪些说法是正确的?(选择最合适的答案)
- 视图只能从表中创建
- 视图只能从一个表中创建
- 视图可以从一个或多个表或视图中创建
- 以上都不是
答案:C。包含表达式或函数或连接多个表的视图被认为是复杂视图。复杂视图只能用于更新一个表。
12. 在自己的模式中创建视图需要哪些权限?
- CREATE TABLE 系统权限
- CREATE VIEW 系统权限
- ALTER VIEW 系统权限
- CREATE ANY VIEW 系统权限
答案:B。用户需要 CREATE VIEW 权限才能在其自己的模式中创建视图。
13. 在其他人的模式中创建视图需要哪些权限?
- CREATE ANY VIEW
- CREATE VIEW
- A 和 B
- 以上都不是
答案:A。用户需要 CREATE ANY VIEW 权限才能在其他用户的模式中创建视图。
14. 对象视图或关系视图支持以下哪些内容?
- LOB
- 对象类型
- REF 数据类型
- 以上所有
答案:D。
15. 下列哪些是不同类型的视图?
- 简单视图
- 复杂视图
- A 和 B
- 以上都不是
答案:C。简单视图和复杂视图是两种类型的视图。简单视图基于仅引用一个表且不包含分组函数、表达式或 GROUP BY 子句的子查询。复杂视图基于从一个或多个表检索或派生数据的子查询,并且可以包含函数或分组数据。
16. 关于简单视图,哪些说法是正确的?
- 大多数情况下,可以对简单视图发出 DML 语句
- 只有一个源基表
- 不使用分组函数
- 以上所有
答案:D。简单视图基于仅引用一个表且不包含分组函数、表达式或 GROUP BY 子句的子查询。
17.关于复杂视图,哪些说法是正确的?
- 不能对复杂视图发出 DML 语句
- 包含多个基表
- 不能执行聚合
- 以上所有
答案:D。复杂视图基于从一个或多个表检索或派生数据的子查询,并且可以包含函数或分组数据。
18. 应该使用哪个关键字组合隐式删除视图(如果存在)并创建同名的新视图?
- CREATE VIEW
- REPLACE VIEW
- CREATE OR REPLACE VIEW
- 以上都不是
答案:C。OR REPLACE 选项通知 Oracle 11g 同名视图可能已经存在;如果存在,则应将视图的先前版本替换为新命令中定义的版本。
19. 视图如何在数据字典中存储?
- 作为 WHERE 子句
- 作为 CREATE 语句
- 作为 UPDATE 语句
- 作为 SELECT 语句
答案:D。
20. 下列哪些可以包含单行函数?
- 内联视图
- 简单视图
- 复杂视图
- 复合视图
答案:A,B。单行函数可用于内联视图和简单视图。
21. 下列哪些可以包含一组数据?
- 复合视图
- 简单视图
- 复杂视图
- 以上都不是
答案:C。复杂视图可以在查询中使用分组函数。
22. 关于视图,以下哪些说法是正确的?
- 可以在 CREATE VIEW 语句中嵌入子查询
- 在 CREATE VIEW 语句中使用的子查询必须具有简单的 SELECT 语法
- 当在 CREATE VIEW 语句中使用子查询时,不能使用 WHERE 子句
- 以上都不是
答案:A。视图定义可以使用子查询。
23. 即使基表不存在,以下哪个可以创建视图?
- NOFORCE
- FORCE
- OR REPLACE
- CREATE VIEW
答案:B。如果在 CREATE 子句中包含 FORCE 关键字,则 Oracle 11g 即使任何引用的表不存在也会创建视图。NOFORCE 是 CREATE VIEW 命令的默认模式,这意味着所有表和列都必须有效,否则视图不会创建。
24. 以下哪个命令确保不能对视图执行 DML 操作?
- NOFORCE
- FORCE
- WITH READ ONLY
- OR REPLACE
答案:C。WITH READ ONLY 选项可防止对视图执行任何 DML 操作。当重要的是用户只能查询数据,而不能对其进行任何更改时,通常使用此选项。
25. 关于 CREATE VIEW 语句中的 NOFORCE 选项,哪些说法是正确的?
- 即使基表不存在,它也会创建视图。
- 只有在基表存在时,它才会创建视图。
- 它是创建视图时的默认设置。
- 以上都不是
答案:B,C。NOFORCE 是 CREATE VIEW 命令的默认模式,这意味着所有表和列都必须有效,否则视图不会创建。
26. 关于 OR REPLACE 关键字,哪些说法是正确的?
- 使用此关键字创建视图时,对象权限会丢失
- 不需要重新授予以前在此视图上授予的对象权限
- A 和 B 都不是
- 以上都不是
答案:B。OR REPLACE 选项通知 Oracle 11g 同名视图可能已经存在;如果存在,则应将视图的先前版本替换为新命令中定义的版本。
27. 关于访问以下视图,哪些说法是正确的?(假设给定的表结构)
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)
CREATE VIEW salVU100 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANNUAL_SAL FROM employees E WHERE department_id= 100;
- 必须使用基表中定义的原始列名来访问视图
- 必须使用视图查询中给出的别名来访问视图
- 视图是一个简单视图
- 以上都不是
答案:B,C。如果视图定义包含列的别名,则视图必须引用列别名。
28.关于访问以下视图的说法正确的是什么?(假设给出了表结构)
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)
CREATE VIEW salVU100 (ID_NUMBER, NAME, ANNUAL_SAL) AS SELECT employee_id , last_name, salary*12 FROM employees E WHERE department_id= 100;
- 子查询中别名的数量不必与表达式的数量匹配
- 列出的别名数量必须与子查询中选择的表达式数量匹配
- 创建视图时必须指定别名
- 以上都不是
答案:B。如果在视图标题中指定了别名,则`SELECT`查询中必须选择相同数量的列。
29.考虑以下语句和给定的表结构
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)
CREATE OR REPLACE VIEW empVU100 (ID_NUMBER, NAME, ANNUAL_SAL, DEPT_ID) AS SELECT employee_id , first_name ||' '|| last_name, salary, department_id FROM employees WHERE department_id= 100;
关于上述查询中的列别名,哪个说法是正确的?
- 列别名的顺序与子查询中的列顺序不同
- 列别名的顺序与子查询中的列顺序相同
- 使用`CREATE OR REPLACE`关键字时,列别名是必须的
- 使用`CREATE OR REPLACE`时,我们不能使用连接
答案:B。
考虑以下语句,并回答接下来的第30到34题
CREATE OR REPLACE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.dept_name, MIN(e.salary), MAX(e.salary), AVG (e.salary) FROM employees e JOIN departments d ON (e.department_id= d.dept_id) GROUP BY d.dept_name;
30.关于上述语句,可以说什么?
- 为视图指定了替代名称
- 如果任何列都源自函数或表达式,则必须指定替代名称
- A 和 B
- 以上都不是
答案:C。指定别名名称是良好的编程习惯,可以提高代码和视图查询的可读性。
31.如果上述语句修改如下,将会发生什么?
CREATE OR REPLACE VIEW dept_sum_vu(name, maxsal, minsal, avgsal) AS SELECT d.dept_name, MIN(e.salary), MAX(e.salary), AVG (e.salary) FROM employees e JOIN departments d ON (e.department_id= d.dept_id) GROUP BY d.dept_name;
- 它与原始语句没有区别
- 它将成功执行并给出相同的结果,但别名名称会更改。
- 它将抛出一个ORA错误
- 以上都不是
答案:B。列别名的顺序并不重要,因为它们不具有任何行为属性。
32.确定以下`DELETE`语句的输出。
DELETE FROM dept_sum_vu;
- 它将删除视图
- 它将删除视图中的所有行,但视图的结构将保持不变
- 它将抛出一个ORA错误
- 以上都不是
答案:C。视图`DEPT_SUM_VU`是一个复杂视图。不能对复杂视图执行DML操作。
33.假设您将上述查询修改如下
CREATE OR REPLACE VIEW dept_sum_vu(name, sal) AS SELECT d.dept_name, e.salary FROM employees e JOIN departments d ON (e.department_id= d.dept_id) Where rownum < 10;
修改的影响是什么?
- 可以更新视图来更新`EMPLOYEES`和`DEPARTMENTS`表中的值
- 不能通过视图删除`EMPLOYEES`和`DEPARTMENTS`表中的数据
- 可以通过视图插入`EMPLOYEES`和`DEPARTMENTS`表中的数据
- 可以通过视图向`EMPLOYEES`表添加一列
答案:B。不能对复杂视图执行DML操作。`DEPT_SUM_VU`是一个复杂视图,因为它连接了多个表。在视图上无法执行DDL操作。
34.假设您在上述问题中使用的视图查询中选择不同的部门和员工工资。如果您尝试从视图`dept_sum_vu`中删除行,结果会怎样?
- 行将被删除,不会出现任何错误
- 只有前10行将被删除
- 无法删除行。
- 以上都不是
答案:C。视图`DEPT_SUM_VU`仍然是一个复杂视图,因为它使用了`DISTINCT`关键字。因此,无法对其执行DML操作。
35.何时可以删除视图中的行?
- 无法通过视图删除行
- 它应该是一个简单视图
- 它应该是一个复杂视图
- 以上都不是
答案:B。只有简单视图才能执行DML操作。
36.何时不能修改视图中的数据?
- 当存在分组表达式时
- 当存在`GROUP BY`子句时
- 当在视图查询中使用`ROWNUM`时
- 以上所有
答案:D。在包含组函数、伪列或`DISTINCT`关键字的视图上,`UPDATE`操作是不可能的。
37. `JOB_HISTORY`表由用户“Andy”拥有。“Andy”授予另一个用户“HR”对`JOB_HISTORY`表的`SELECT`权限。哪个语句可以创建同义词`EMP_JOBS`,以便“HR”可以成功执行以下查询?(假设表结构如给定)
SQL> desc job_history Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER(6) START_DATE NOT NULL DATE END_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) DEPARTMENT_ID NUMBER(4)
SELECT * from EMP_JOBS;
- Andy发出 -
CREATE SYNONYM EMP_JOBS for JOB_HISTORY
- HR发出 -
CREATE SYNONYM EMP_JOBS for andy.JOB_HISTORY
- HR发出 -
CREATE PUBLIC SYNONYM EMP_JOBS FOR andy.JOB_HISTORY
- 以上都不是
答案:B。只有`SYSDBA`或具有DBA权限的用户才能创建公共同义词。
38.哪个关键字可以确保对视图执行的DML操作保持在视图的范围内?
- OR REPLACE
- CREATE
- WITH CHECK OPTION
- 以上都不是
答案:C。`WITH CHECK OPTION`约束确保对视图执行的任何DML操作(例如添加行或更改数据)都不会阻止视图访问该行,因为它不再满足`WHERE`子句中的条件。
考虑以下表结构和给定的语句,并回答接下来的第39和40题
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)
CREATE OR REPLACE VIEW empvu100 AS SELECT * FROM employees WHERE department_id= 100 WITH CHECK OPTION CONSTRAINT empvu100_ck;
39.上述语句会做什么?
- 它允许用户对所有部门执行`INSERT`或`UPDATE`操作
- 它允许用户对任何部门ID为100的行执行`INSERT`或`UPDATE`操作
- 用户可以更新`employees`表中的任何行
- 用户可以在`employees`表中无限制地插入行
答案:B。`WITH CHECK OPTION`约束确保对视图执行的任何DML操作(例如添加行或更改数据)都不会阻止视图访问该行,因为它不再满足`WHERE`子句中的条件。如果对部门ID不是100的任何行执行`INSERT`或`UPDATE`操作,则会抛出ORA错误。
40.假设您执行如下所示的`UPDATE`语句
UPDATE empvu100 Set department_id = 200 Where employee_id = 121;
此语句的结果是什么?
- 没有更新任何行
- 抛出一个ORA错误
- A 和 B
- 以上都不是
答案:C。如果更新带有`CHECK OPTION`的视图,并且新记录的值违反了视图的范围,则会引发ORA异常“ORA-01402: view WITH CHECK OPTION where-clause violation”。
41.关于`WITH CHECK CONSTRAINT`,哪个说法是正确的?
- 通过视图执行的`INSERT`或`UPDATE`操作不能创建视图无法选择的行
- 只有通过视图执行的`INSERT`操作不能创建视图无法选择的行
- 只有通过视图执行的`UPDATE`操作不能创建视图无法选择的行
- 以上都不是
答案:A。
42.如何阻止对视图进行DML操作?
- 通过定义`WITH CHECK OPTION`约束
- 通过定义`WITH READ ONLY`选项
- A 和 B 都不是
- 以上都不是
答案:B。`WITH READ ONLY`选项阻止对视图执行任何DML操作。当重要的是用户只能查询数据,而不能更改数据时,经常使用此选项。
考虑表结构和给定的语句,并回答接下来的第43、44和45题
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)
CREATE OR REPLACE empvu100(employee_id , first_name, job) AS SELECT employee_id , last_name, job FROM employees WHERE department_id = 100 WITH READ ONLY;
43.关于上述语句,哪个说法是正确的?
- 视图将不会创建
- 对该视图的`INSERT`操作将抛出一个ORA错误
- 更新部门100中所有员工的行时,将抛出一个ORA错误
- 以上都不是
答案:B,C。不允许对使用`READ ONLY`选项创建的视图执行DML操作。
44.可以从上述视图中删除多少行?
- 视图的所有行
- 只有部门100的所有行
- 没有行
- 以上都不是
答案:C。不允许对使用`READ ONLY`选项创建的视图执行DML操作。
45.以下哪个语句将删除如上创建的视图?
DROP READ ONLY VIEW empvu100;
DROP NOFORCE empvu100;
DROP VIEW empvu100;
- 以上都不是
答案:C。可以使用`DROP VIEW`命令删除只读视图。
46.关于删除视图,哪个说法是正确的?
- 视图中来自基表的列也将被删除
- 视图的定义将从数据库中删除
- 删除视图对底层基表没有影响
- 以上都不是
答案:B,C。
47.用户应该拥有哪些权限才能删除视图?
- CREATE ANY VIEW
- CREATE VIEW
- DROP ANY VIEW
- DROP VIEW
答案:C。
48.关于序列,哪个说法是正确的?
- 它生成整数
- 它是一个可共享的对象
- 可用于创建主键值
- 以上所有
答案:D。当序列缓存在内存中时,它可以提高访问序列值的效率
49.关于序列,哪个说法是正确的?
- 它在安装Oracle数据库时创建
- 它由拥有`CREATE SEQUENCE`系统权限的用户创建
- 它不能被两个以上用户共享
- 数据库断开连接时,它会自动删除。
答案:B,C。用户需要`CREATE SEQUENCE`系统权限才能在其自己的模式中创建序列,其他用户无法共享该序列。
50.关于序列,以下哪个选项是正确的?
- 为一个表生成的序列整数不能被其他表使用
- 序列只能递增
- 如果另一个序列生成相同的整数,则序列将失效
- 一个序列可以被多个表使用,并且它们可以递增或递减
答案:D。
考虑以下语句,并回答接下来的第51到59题
CREATE SEQUENCE dept_deptid_seq INCREMENT BY 100 START WITH 101 MAXVALUE 9999 NOCACHE NOCYCLE;
51.此序列生成的第一个值是什么?
- 1
- 100
- 101
- 9999
答案:C。`START WITH`子句为序列建立起始值。除非在`START WITH`子句中指定了另一个值,否则Oracle 11g将每个序列都从1开始。
52.此序列生成的最后一个值可能是什么?
- 0
- 100
- 101
- 9999
答案:D。`MINVALUE`和`MAXVALUE`子句为序列建立最小值或最大值。
53.此序列生成的第二个值是什么?
- 102
- 100
- 99
- 9999
答案:A。`INCREMENT BY`子句指定两个连续值之间的间隔。如果序列按正值递增,则序列生成的数值按升序排列。但是,如果指定负值,则序列生成的数值按降序排列。如果没有在创建序列时包含`INCREMENT BY`子句,则使用默认设置,即为每个生成的整数增加1。
54.此序列达到最大整数9999后,下一个值是什么?
- 101
- 没有值
- 它将抛出一个ORA错误
- 以上都不是
答案:B。`CYCLE`和`NOCYCLE`选项决定Oracle 11g是否应该在达到最小值或最大值后重新开始从序列中重新发布值。
55.根据上面给出的序列,Oracle将在内存中预分配多少个值?
- 20
- 0
- 100
- 9999
答案:A。
56.您执行以下查询
SELECT dept_depid_seq.NEXTVAL from dual;假设序列生成的最后一个值为200,此查询的结果是什么?
- 200
- 101
- 9999
- 201
答案:D。`NEXTVAL`伪列将生成序列的下一个唯一整数。
57.您执行以下查询
SELECT dept_depid_seq.CURRVAL from dual;假设序列生成的最后一个值为200,此查询的结果是什么?
- 200
- 101
- 9999
- 201
答案:A。`CURRVAL`伪列将生成序列已生成的当前唯一整数。
58.假设您需要将此序列的起始值更改为1000。以下哪个语句会有帮助?
ALTER dept_deptid_seq INCREMENT BY 100 START WITH 1000 MAXVALUE 9999 NOCACHE NOCYCLE;
- 必须删除并重新创建序列才能使序列从1000开始。
ALTER SEQUENCE dept_deptid_seq START WITH 101
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 100 START WITH 101 CYCLE;
答案:B。序列的起始编号不能修改。Oracle会引发异常“ORA-02283: cannot alter starting sequence number”。
59.假设上述序列修改如下
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 100 START WITH 101 MAXVALUE 99 NOCACHE NOCYCLE;
此更改的结果是什么?
- ORA错误
- 修改后序列的最大值现在为99
- A 和 B 都不是
- 以上都不是
答案:A。修改序列时,`MAXVALUE`不能小于`START WITH`值。
60.何时可以在序列中使用`CYCLE`选项?
- 如果我们想更快地清除旧行
- 如果我们不想使用序列生成主键值
- A 和 B
- 以上都不是
答案:C。`CYCLE`和`NOCYCLE`选项决定Oracle 11g是否应该在达到最小值或最大值后重新开始从序列中重新发布值。如果指定了`CYCLE`选项并且Oracle 11g达到了升序序列的最大值或降序序列的最小值,则`CYCLE`选项将再次启动数字循环。
61.关于`NEXTVAL`伪列,哪个说法是正确的?
- 它重新生成序列的`CURRVAL`
- 它返回下一个可用的序列值
- 它可以返回重复值
- 它为不同的用户生成相同的值
答案:B。伪列 NEXTVAL (NEXT VALUE) 用于实际生成序列值。换句话说,它调用序列对象并请求序列中下一个数字的值。生成值后,将其存储在 CURRVAL (CURRENT VALUE) 伪列中,以便您可以再次引用它。
62.关于 CURRVAL 伪列,哪个说法是正确的?
- 相对于序列,可以在 NEXTVAL 之前使用 CURRVAL
- CURRVAL 给出序列的当前值
- CURRVAL 可以给出重复值
- 以上都不是
答案:B。
63.NEXTVAL 和 CURRVAL 可在何时使用?
- INSERT 语句的 SET 子句
- UPDATE 语句的 VALUES 子句
- SELECT 语句的 SELECT 列表(不是子查询的一部分)
- INSERT 语句的 SELECT 列表
答案:C, D。序列可在 SELECT 查询、PL/SQL 游标或 IAS (INSERT-AS-SELECT) 直接操作中使用。
64.NEXTVAL 和 CURRVAL 在何时不可使用?
- 视图的 SELECT 列表
- 带有 DISTINCT 关键字的 SELECT 语句
- SELECT、DELETE 或 UPDATE 语句中的子查询
- 以上所有
答案:D。
请考虑给定的语句,并回答接下来的第 65 和 66 题
CREATE TABLE employees (employee_id NUMBER(4) DEFAULT emp_empid_seq.CURRVAL, department_id NUMBER(4));
65.此语句的结果是什么?(假设 emp_empid_seq 是用于生成员工 ID 值的序列)
- 表将被创建
- department_id 列将包含为员工 ID 生成的序列值
- department_id 列将具有默认值
- ORA错误
答案:D。在列定义的 DEFAULT 子句中不能指定伪列。
66.如果将 CURRVAL 替换为 NEXTVAL,此语句的结果是什么?(假设 emp_empid_seq 用于生成员工 ID 值)
- 表将被创建
- department_id 列将包含为员工 ID 生成的序列值
- department_id 列将具有默认值
- ORA错误
答案:D。在列定义的 DEFAULT 子句中不能指定伪列。
检查给定的图表,其中给出了 Departments 和 Location 表的结构。回答接下来的第 67 和 68 题
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)
SQL> desc locations Name Null? Type ----------------------- -------- ---------------- LOCATION_ID NOT NULL NUMBER(4) STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(12) CITY NOT NULL VARCHAR2(30) STATE_PROVINCE VARCHAR2(25) COUNTRY_ID CHAR(2)
67.您需要在位置 ID 1000 中插入一个名为“HR”的新部门。以下哪个语句可以提供所需的结果?
INSERT INTO departments (dept_id, dept_name, location_id) VALUES (dept_deptid_seq.NEXTVAL, 'HR', 1000);
INSERT INTO departments (dept_id, dept_name, location_id) VALUES (dept_deptid_seq.NEXTVAL, "HR", 1000);
INSERT INTO departments (dept_id, dept_name, location_id) VALUES (dept_deptid_seq.CURRVAL, 'HR', 1000);
- 以上都不是
答案:A。选项 C 将导致“唯一约束冲突”,因为它将尝试插入 DEPARTMENTS 表中已存在的部门 ID 的当前值。
68.假设您在插入第 67 题选项 A 中所示的值之前执行以下查询。查询的结果是什么?
SELECT dept_deptid_seq.CURRVAL FROM DUAL;
- ORA错误
- 它将给出序列的当前值
- A 和 B 都不是
- 以上都不是
答案:B。当用户登录到 Oracle 11g 时,最初不会在 CURRVAL 伪列中存储任何值;当前值为 NULL。发出 NEXTVAL 调用以生成序列值后,CURRVAL 会存储该值,直到生成下一个值为止。CURRVAL 只包含最后生成的值。
69.序列值中如何出现间隙?
- 发生回滚时
- 系统崩溃
- 序列在另一个表中使用
- 以上所有
答案:D。
70.关于缓存序列值,哪个说法是正确的?
- 在 Oracle 中无法缓存序列值
- 达到序列的最大限制时,缓存将被填充
- 第一次引用序列时开始缓存
- 以上都不是
答案:C。如果在创建序列时指定了 NOCACHE 选项,则在收到请求时生成每个数字。但是,如果组织的事务在整个会话中需要大量的顺序编号,则可以使用 CACHE 选项让 Oracle 11g 预先生成一组值并将它们存储在服务器的内存中。然后,当用户请求序列值时,将分配下一个可用值——无需 Oracle 11g 生成该数字。另一方面,如果没有指定 CACHE 选项,Oracle 11g 将假设默认选项 CACHE 20 并自动将 20 个顺序值存储在内存中供用户访问。
71.在插入五个员工详细信息的事务之后,执行以下关于序列 EMP_EMPID_SEQ 的查询。
Select emp_empID_seq.CURRVAL from dual;
假设员工事务回滚。上述查询的结果是什么?
- 员工事务开始时的序列值
- NULL
- 员工事务结束时的序列值
- 以上都不是
答案:C。序列值不受提交或回滚的影响。如果使用序列生成器的事务回滚,则序列值将被浪费并且无法恢复。
72.修改序列需要哪些权限?
- CREATE OR REPLACE 权限
- 序列的 ALTER 权限
- ALTER TABLE 权限
- UPDATE 权限
答案:B。要更改序列,序列必须位于您自己的模式中,或者您必须对序列具有 ALTER 对象权限,或者您必须具有 ALTER ANY SEQUENCE 系统权限。
73.序列被更改时会发生什么?
- 序列已生成的现有整数也将被更改
- 只有将来的整数受到影响
- 序列停止缓存将来的整数
- 以上都不是
答案:B。通过使用 ALTER SEQUENCE 命令,任何更改都只应用于修改后生成的值。
74.假设您需要删除一个序列。以下哪个命令会有帮助?
ALTER SEQUENCE sequence_name START WITH NULL;
DROP sequence_name;
DROP SEQUENCE sequence_name;
- 以上都不是
答案:C。DROP 命令用于删除序列
75.以下哪个权限允许您删除序列?(选择最合适的答案)
- ALTER SEQUENCE
- ALTER TABLE
- DROP SEQUENCE
- DROP ANY SEQUENCE
答案:D。要删除序列,序列必须位于您自己的模式中,或者您必须具有 DROP ANY SEQUENCE 系统权限。
76.关于索引,哪个说法是正确的?
- 索引只能手动创建
- 索引只能自动创建
- A 和 B
- 以上都不是
答案:D。索引可以手动创建,也可以在执行某些操作(例如创建主键或唯一约束)后自动创建。
77.索引使用什么来快速定位数据?
- ROWNUM
- ROWID
- 序列
- 以上都不是
答案:B。Oracle 11g 索引是一个数据库对象,它存储列值和匹配表行的 ROWID 的映射。ROWID 是表行的物理地址。
78.当表的一列上没有索引时会发生什么?
- 数据被快速定位
- 将进行全表扫描
- 表无法创建
- 表无法更改
答案:B。
79.关于索引,以下哪个说法是正确的?
- 索引减少磁盘 I/O
- 索引快速定位数据
- 索引在逻辑上和物理上独立于它们所索引的表
- 以上所有
答案:D。
80.如果删除索引会发生什么?
- 创建索引的列也将被删除
- 创建索引的表也将被删除
- 创建后的索引无法删除
- 由于索引在逻辑上和物理上都是独立的对象,因此可以删除它们而不会影响其他对象
答案:D。索引是在模式中物理存储的对象。删除索引不会影响其他对象。
81.删除表时会发生什么?
- 索引仍然保留,因为它们在逻辑上和物理上都是独立的对象
- 表中的索引也将被删除
- A 和 B 都不是
- 以上都不是
答案:B。
82.索引是如何自动创建的?
- 创建表时
- 更改表时
- 在表的列(或列组)上定义 PRIMARY KEY 时
- 在表定义中定义 UNIQUE KEY 约束时
答案:C, D。
83.可以为以下哪些对象创建同义词?
- 只有表和视图
- 表、视图和序列
- 存储过程、函数或包
- 同义词
答案:B, C, D。您可以为其创建同义词的模式对象可以是以下类型:表或对象表、视图或对象视图、序列、存储过程、函数或包、物化视图、Java 类模式对象、用户定义的对象类型、同义词
84.可以使用什么来引用另一个用户拥有的表?
- INDEX
- TABLE
- SYNONYMS
- SEQUENCES
答案:C。同义词是数据库对象的替代名称或别名。
85.以下哪个是 非唯一索引 的示例?
- PRIMARY KEY
- UNIQUE KEY
- FOREIGN KEY
- 以上都不是
答案:C。
86.以下哪个是索引的主要和基本类型?
- 位图
- B 树
- 唯一
- 非唯一
答案:A, B。B 树(平衡树)索引是 Oracle 中最常用的索引。您可以使用基本的 CREATE INDEX 语句创建此类型的索引。位图索引在结构和用途上与 B 树索引有所不同。此索引对于改进对具有低选择性(低基数或少量不同值)的列的查询非常有用。
87.您需要通过在 EMPLOYEES 表的 FIRST_NAME 上创建索引来加快查询速度。可以使用以下哪个语句?(假设表结构如所示)
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)
CREATE INDEX emp_first_name_idx ON employees (first_name);
CREATE INDEX emp_first_name_idx ON employees first_name;
ALTER INDEX emp_first_name_idx ON employees (first_name);
- 以上都不是
答案:A。
88.在创建索引时,UNIQUE 关键字的作用是什么?
- 它指定创建索引的列的值必须唯一
- 创建索引时不能使用 UNIQUE 关键字
- 它指定创建的索引只能被一个表使用
- 以上都不是
答案:A。当在列上定义 PRIMARY KEY 或 UNIQUE 约束时,通常会自动创建唯一索引。也可以通过在 CREATE INDEX 语句中包含 UNIQUE 关键字来显式创建唯一索引。
89.当您在创建索引时指定关键字 BITMAP 时会发生什么?
- 它为每个不同的键创建一个带有位图的索引。
- 它不会分别为每一行创建索引
- A 和 B
- 以上都不是
答案:C。
90.您编写的查询预计将检索少于 2% 到 4% 的行。为了实现此类查询的查询性能,可以对相关表应用以下哪些方法?(选择最佳答案)
- 索引
- UNION 集合运算符
- MINUS 集合运算符
- 以上都不是
答案:A. 索引是实现查询性能的最佳方法。可以使用索引扫描减少和简化大量的IO操作。
91. 在哪些情况下索引有用?
- 如果表很大
- 如果列的值较少
- 如果列包含大量NULL值
- 如果列的值范围很广
答案:C, D。
92. EMPLOYEES表经常更新。何时可以在此表上创建索引?(选择最合适的答案)
- 如果表经常更新,则不应创建索引
- 应在创建表时创建索引
- A 和 B 都不是
- 以上都不是
答案:A. 对带有索引的表进行频繁或批量DML操作会增加维护索引段的开销,这可能会影响DML操作的性能。
93. 考虑以下查询并回答以下问题。假设EMPLOYEES表的EMPLOYEE_ID、DEPARTMENT_ID和FIRST_NAME列已建立索引。(假设表结构如给定)
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)
SELECT first_name, last_name FROM employees WHERE comm IS NULL;
如果EMPLOYEES表中有100万行,现有索引在这种情况下是否有帮助?
- 是
- 否
- 可能会有帮助
- 以上都不是
答案:B. 当查询谓词不包含已创建索引的列时,不会使用索引。
94. 以下哪项将删除索引?
DELETE FROM index_name;
DROP INDEX index_name;
DROP INDEX;
- 以上都不是
答案:B. 您必须具有DROP ANY INDEX权限才能删除索引。