- 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.关于关系数据库,ACID 指的是什么?
- 准确性、一致性、隔离性、数据库
- 准确性、并发性、隔离性、持久性
- 原子性、一致性、隔离性、持久性
- 原子性、并发性、隔离性、持久性
答案:C.所有 Oracle 事务都符合数据库事务的基本属性,即 ACID 属性。原子性表示事务的所有任务都执行或都不执行。没有部分事务。一致性意味着事务将数据库从一个一致状态转换到另一个一致状态。隔离性意味着事务的影响在事务提交之前对其他事务不可见。持久性意味着已提交事务所做的更改是永久性的。事务完成后,数据库通过其恢复机制确保事务的更改不会丢失。
2. 在 Oracle SQL 中,DML 代表什么?
- 持久性管理语言
- 数据库管理语言
- 数据库操作语言
- 以上都不是
答案:C.DML 代表数据操作语言。
3. 以下哪些是 Oracle 数据库中的 DML 命令?
- SELECT
- GROUP BY
- INTERSECT
- INSERT
答案:A、D.严格来说,SELECT 是一个 DML 命令,因为它是操作表中数据的必需子句之一。
4.以下哪个 DML 命令可以被认为是单个语句中 INSERT 和 UPDATE 的混合?
- INTERSECT
- INSERT
- SELECT
- MERGE
答案:D.MERGE 可以在 Oracle 的单个语句中执行 INSERT 和 UPDATE 操作。
5. MERGE 语句在 SQL 中可以执行哪些操作?
- INSERT
- DELETE
- GROUP BY
- 以上都不是
答案:A、B.在某些情况下,MERGE 还可以执行 DELETE 操作,以及 INSERT 和 UPDATE。
6.以下哪个命令是 DDL(数据定义语言)命令,但通常与 DML 命令一起考虑?
- DELETE
- INSERT
- TRUNCATE
- 以上都不是
答案:C.TRUNCATE 是一个 DDL 命令。它无条件地删除表中的记录。它不属于任何正在进行的事务的一部分,会话中的未提交事务在执行 TRUNCATE 后会提交。
7.以下哪些命令主要操作数据?
- MINUS
- UPDATE
- TRUNCATE
- 以上所有
答案:B、C.UPDATE 是一个 DML 语句,用于修改表中的列值。TRUNCATE 通过无条件地删除它们来操作数据。
8. 以下哪个命令用于使用数据填充表行?
- DELETE
- INSERT
- SELECT
- UPDATE
答案:B.INSERT 命令用于在表中插入行。
9. 关于 INSERT 语句,哪个说法是正确的?(选择最合适的答案)
- 它一次可以插入一个表的一行数据
- 它一次可以插入一个表的许多行数据
- 它一次可以插入多个表的许多行数据
- 以上所有
答案:C.INSERT 语句能够一次在一个表中插入一行或多行数据。
10.关于在表中插入行,哪个说法是正确的?
- 行可以随机插入
- 可以在表中插入任意数量的行,没有任何限制
- 通常,行是根据称为约束的某些规则插入到表中的
- 以上所有
答案:C.约束是对列强加的业务规则,以确保进入列的数据的行为。在 INSERT 过程中会验证这些约束的数据。
11. 关于 Oracle SQL 中的 INSERT 语句,哪个说法是正确的?(选择最合适的答案)
- INSERT 语句可以覆盖对表设置的任何约束
- 如果已经对表设置了约束,则不能对该表使用 INSERT 语句
- 只有在表上已经设置了约束时,才能对该表使用 INSERT 语句
- INSERT 语句永远不会插入违反约束的行。
答案:D.如果 INSERT 语句中包含的任何数据违反了约束,Oracle 将引发异常。
考虑来自 EMPLOYEES 表及其结构的以下数据集,并回答问题 12、13 和 14
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)
EMPLOYEE_ID FIRST_NAME JOB_ID ------------------- ------------------ -------- 5100 BRUCE CLERK 5101 JESSICA SALESMAN 5102 DEBBY SALESMAN
12. 检查 EMPLOYEES 表的结构。您发出以下命令
INSERT INTO EMPLOYEES (employee_id , first_name , job_id) VALUES (5100, 'BRUCE', 'CLERK');
假设 EMPLOYEE_ID 列上存在重复值检查约束,上述语句的结果是什么?
- 它将插入另一行,值为 5100 BRUCE CLERK
- 它将插入另一行,值为 51002 BRUCE CLERK
- 它将抛出一个“约束违反”ORA 错误
- 以上都不是
答案:C.由于值“5100, BRUCE, CLERK”的行已经存在于表中,因此使用相同数据集的 insert 语句是不可能的。
13.您对上面显示的数据集发出以下命令
INSERT INTO EMPLOYEES (employee_id , first_name , job_id) VALUES (51003,'BRUCE','CLERK');
此语句的输出是什么?
- 它将插入新的一行,值为 51003 BRUCE CLERK
- 它将抛出一个 ORA 错误,因为不可能有另一个名为 BRUCE 的 CLERK
- 它将抛出一个“约束违反”ORA 错误
- 以上都不是
答案:A.由于 FIRST_NAME 和 job_id 列上没有约束,因此 INSERT 将在没有任何错误的情况下工作
14. 您对上面显示的数据集发出以下命令
INSERT INTO EMPLOYEES (employee_id , first_name , job_id ) VALUES (51003,'BRUCE', NULL);
此语句的输出是什么?
- 它将插入新的一行,值为 51003 BRUCE CLERK
- 它将抛出一个 ORA 错误,因为不可能有另一个名为 BRUCE 的 CLERK
- 它将抛出一个“约束违反”ORA 错误
- 它将插入新的一行,值为 51003 BRUCE NULL
答案:D.由于 FIRST_NAME 和 JOB_ID 列上没有 NOT NULL 约束,因此将插入 NULL 值。
15. 关于在表中插入行,以下哪一项说法是正确的?
- 用户无法交互地插入行
- 可以使用替换变量编写查询,以便用户交互地插入行
- 当提示用户插入行时,插入不起作用,并抛出 ORA 错误
- 以上都不是
答案:B.INSERT 语句可以使用替换变量来提示用户在运行时输入值。它提供了一种交互式的方式将数据插入表中
16.以下哪些可以用于在表中插入行?
- SELECT
- INSERT
- 子查询
- 以上所有
答案:D.INSERT 语句可以使用显式 INSERT、INSERT-SELECT 或子查询方法将数据插入表中。
17. 以下哪一项是将行插入表中的常用技术?(选择最合理和合适的答案)
- 使用 SELECT 子句
- 手动将每个值键入 INSERT 子句
- 使用集合运算符
- 以上都不是
答案:A.使用 SELECT 子句是将行插入表中最常用的技术。它减少了为每一列手动键入值的麻烦。
18.以下哪个命令用于更改表中已经存在的行?
- INSERT
- UNION
- UPDATE
- SELECT
答案:C.UPDATE 是一个 DML 语句,用于修改表中的列值。
19.关于 UPDATE 命令,哪个说法是正确的?
- 它一次只能更新一行
- 它一次只能更新 100 行
- 它一次可以批量更新无限行
- 以上都不是
答案:C.UPDATE 可以根据 WHERE 子句条件一次更新多行或多行。
20.以下哪个子句决定要更新多少行?
- SELECT
- WHERE
- FROM
- 以上所有
答案:B.UPDATE 语句使用 WHERE 子句来捕获需要更新的行集。
21.关于 UPDATE 语句,以下哪一项说法是正确的?(选择最合适的答案)
- UPDATE 只能更新一个表中的行
- UPDATE 可以更新多个表中的行
- 单个 UPDATE 命令不能影响多个表中的行
- 以上都不是
答案:A、C.UPDATE 语句只影响一个表中的行,而不是多个表。
考虑来自 EMPLOYEES 表及其结构的以下数据集。回答接下来的问题 22 到 24。
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)
EMPLOYEE_ID FIRST_NAME JOB_ID ------------------- ------------------ -------- 5100 BRUCE CLERK 5101 JESSICA SALESMAN 5102 DEBBY SALESMAN
22. 您需要将 Bruce(员工 ID 7389)的 JOB_ID 更改为“ACCOUNTANT”。您将执行以下哪个语句?
UPDATE employees SET job_id = 'ACCOUNTANT' WHERE employee_id = 7389;
INSERT INTO EMPLOYEES (employee_id , first_name , job_id ) VALUES (5100,'BRUCE', 'ACCOUNTANT');
UPDATE employees SET job_id = 'ACCOUNTANT' WHERE job_id = 'CLERK';
UPDATE employees SET job_id = 'ACCOUNTANT';
答案:A.选项 B 失败,因为它将所有职员的职位代码修改为 ACCOUNTANT。选项 C 是错误的,因为它将所有员工的职位代码更新为 ACCOUNTANT。
根据以下操作回答问题 23 和 24:
您对 EMPLOYEES 表发出以下查询,数据集如上所示。
UPDATE employees Set job_id = NULL Where employee_id = 51000;
数据集将如下所示:(假设 EMPLOYEE_ID 列上存在重复值约束)
EMPLOYEE_ID FIRST_NAME JOB_ID ------------------- ------------------ -------- 5100 BRUCE 5101 JESSICA SALESMAN 5102 DEBBY SALESMAN
23. 假设您执行 UPDATE 语句将 Bruce 的 JOB_ID 更新为“SALESMAN”(关于上面显示的数据集)。查询的结果是什么?
- Bruce 的职位代码仍然为 NULL
- Bruce 的职位代码将修改为“SALESMAN”
- ORA 错误
- 无操作
答案:B.UPDATE 将新值添加到 NULL 值,将 NULL 更改为新值
24. 您执行 UPDATE 语句将员工 ID 7389 更新为 7900。在提交事务之前,您按其 ID“7389”查询员工。结果是什么?
- 更新将成功,而选择将显示 7389。
- 更新将成功,而选择将显示无记录。
- EMPLOYEE_ID 上的约束不允许更新。
- 它将成功更新,但 EMPLOYEE_ID 7389 的所有值都将变为 NULL。
答案:B.会话中的查询与正在进行的事务一致。如果在不同的会话中执行相同的查询,它将显示员工记录 ID 为 7389,因为第一个会话中的活动事务尚未提交。
25. 以下哪一项是 UPDATE 语句的典型用途?(选择最合适的答案)
- 检索一行并更新该行的一列或多列
- 修改某些列的所有行
- 修改表的所有列的所有行
- 以上都不是
答案:A.虽然 UPDATE 语句可以修改所有行中的所有列值,但通常它用于选择一行并更新一列或多列。
26. 以下哪些做法适当地描述了如何使用 UPDATE 语句选择要更新的行集?
- 如果要更新某些行,可以使用 PRIMARY KEY 约束
- 如果要更新所有行,可以考虑使用WHERE子句。
- 要更新一组行,请使用WHERE子句;要更新表的全部行,请在表上设置主键约束。
- 以上都不是
答案:C。
27. 下列哪些列通常不会更新?
- 表中的LONG类型列
- 表中的LOB列
- 同时用作另一个表中外键引用的主键列
- 以上所有
答案:C. 通常情况下,用作其他表外键引用的主键列不应更新。虽然可以通过延迟约束来更新它们,但这通常不推荐。
考虑以下EMPLOYEES表的数据集和结构,并回答接下来的问题28和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)
EMPLOYEE_ID FIRST_NAME JOB_ID ------------------- ------------------ -------- 5100 BRUCE NULL 5101 JESSICA SALESMAN 5102 DEBBY SALESMAN
28. 你发出以下UPDATE语句:
UPDATE employees SET job_id = NULL;
上述语句的结果是什么?
- 数据集的第一行将更新为NULL。
- 第一行的第3列将更新为NULL。
- 所有行的第3列将更新为NULL。
- 将抛出ORA错误。
答案:C. 没有WHERE子句的UPDATE语句将更新表的所有行。
29. 你发出以下UPDATE语句:
UPDATE employees SET employee_id = NULL; WHERE job_id = 'CLERK';
上述语句的结果是什么?(这里EMPLOYEE_ID列通过添加约束被标记为必填)
- 数据集的第一列将更新为NULL。
- 第一行的第3列将更新为NULL。
- 所有行的第3列将更新为NULL。
- 将抛出ORA错误。
答案:D. 更新列值时必须遵守列上的约束。在给定的UPDATE语句中,将抛出错误,因为EMPLOYEE_ID列是EMPLOYEES表的主键,这意味着它不能为NULL。
30. 下列哪个命令可用于从表中删除现有记录?
- UPDATE
- INSERT
- MINUS
- DELETE
答案:D. DELETE用于删除表中的记录,可以选择性地基于条件。作为DML语句,它是事务的一部分。
31. 关于DELETE语句,下列哪一项是正确的?
- DELETE语句必须带有WHERE子句。
- DELETE语句不必写WHERE子句。
- DELETE可以一次删除多个表中的数据。
- 以上都不是
答案:B. WHERE子句谓词在DELETE语句中是可选的。如果省略WHERE子句,则将删除表的所有行。
32. 当我们在表上发出DELETE语句时,会发生什么?(选择最合适的答案)
- 弹出提示,询问用户是否确定要删除请求的行。
- 立即删除DELETE语句中给定条件的行。
- 立即删除请求的行,无需任何提示。
- 以上都不是
答案:C. 作为活动事务或新事务的一部分,将删除表中的行。
33. 考虑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)
EMPLOYEE_ID FIRST_NAME JOB_ID ------------------- ------------------ -------- 5100 BRUCE 5101 JESSICA SALESMAN 5102 DEBBY SALESMAN
你需要删除employee_id为51001的行中的JOB_ID列中的数据。以下哪个查询是正确的?
UPDATE employees SET job_id = NULL WHERE employee_id = 51001;
DELETE job_id FROM employees WHERE employee_id = 51001;
DELETE FROM employees;
- 以上都不是
答案:D. 你不能使用DELETE语句删除特定行中的特定列值。基于给定的条件,整行将被删除。列中不需要的值可以更新为NULL。选项“A”接近正确,但在问题的上下文中并不正确。
34. UPSERT语句和MERGE语句有什么区别?
- 没有区别。
- UPSERT是MERGE语句的最新术语,MERGE语句已过时。
- UPSERT可以执行MERGE无法执行的删除操作。
- MERGE执行INSERT、UPDATE和DELETE操作,UPSERT只执行UPDATE和INSERT操作。
答案:D. UPSERT是一个过时的语句,MERGE以新的功能取代了它。
35. MERGE命令与INSERT、UPDATE和DELETE命令有什么区别?
- MERGE语句比单独执行每个操作(INSERT、UPDATE、DELETE)消耗更多时间。
- 在Oracle 10g之后,MERGE已过时。
- MERGE可以在一个表上执行所有三个操作,而INSERT、UPDATE和DELETE一次只执行一个操作。
- 以上都不是。
答案:C. MERGE语句可以在单个语句中嵌入表上的所有三个操作,而INSERT、UPDATE和DELETE一次只执行一个操作。
36. 下列哪些对象可以作为MERGE语句中的数据源?
- 只有表。
- 只有子查询。
- 表或子查询。
- A或B。
答案:C. MERGE可以很好地与表或子查询一起使用。
37. 下列哪个语句等效于TRUNCATE语句?(选择最合适的答案)
- DELETE语句。
- UPDATE语句。
- 没有WHERE子句的DELETE语句。
- 以上都不是
答案:C. TRUNCATE在一个命令中删除所有行。
38. 下列哪些情况表明发生了DML操作?
- 向表中添加新行时。
- 组合两个查询时。
- 截断表时。
- 以上都不是
答案:A. 当表中的现有行被插入、修改或删除时,这是通过DML语句完成的。
39. 下列哪个选项最能定义事务?
- 事务包含数据库模式上的DDL语句。
- 事务包含数据库会话中的COMMIT或ROLLBACK。
- 事务包含一组DML语句或一个DDL或DCL或TCL语句,以构成数据库会话中逻辑工作单元。
- 事务包含数据库不同会话中的一组DML和DDL语句。
答案:C. 数据库事务包含一个或多个DML语句,构成数据中的一致更改,或一个DDL语句或一个DCL命令(GRANT或REVOKE)。它从第一个DML语句开始,以DCL或DDL或TCL(COMMIT或ROLLBACK)命令结束。请注意,DDL和DCL命令具有自动提交功能。
40. 构成逻辑工作单元的一组DML语句称为什么?
- ACID特性
- UNION
- UNION ALL
- 事务
答案:D。
41. 活动事务中的DML语句在执行时遇到错误会发生什么?
- 整个事务回滚。
- 事务中的DML是互斥的,因此可以继续执行。
- 事务中的其他DML被中断,并等待直到错误解决。
- 以上都不是
答案:A. 如果活动事务中的任何DML语句遇到错误,整个事务最终将回滚。
42. 关于INSERT语句中的VALUES关键字,哪个说法是正确的?
- VALUES可以在INSERT期间一次添加多行。
- VALUES一次只能添加100行。
- 如果使用INSERT关键字,则必须使用VALUES。
- VALUES一次只添加一行。
答案:A. VALUES关键字用于在INSERT语句中显式指定列值时。
考虑以下语句和表结构。回答接下来的问题43到45。
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)
INSERT INTO departments (department_id , department_name , manager_id, location_id ) VALUES (100, 'Human Resources', 121, 1000);
43. 上述语句将插入多少行?
- 0
- 2
- 3
- 1
答案:D. 使用VALUES关键字时,它一次只插入一行。
44. 根据上述INSERT语句,值将按什么顺序插入?
- Location_id , manager_id, department_name , department_id
- department_id , department_name , manager_id, location_id
- department_id , manager_id, department_name , location_id
- department_id , department_name , location_id , manager_id
答案:B. 如果在INSERT子句中提到列,则VALUES关键字应按相同的顺序包含值。
45. 假设上述语句修改如下:
INSERT INTO departments VALUES (100, 'Human Resources', 121, 1000);
此修改的结果是什么?假设DEPARTMENTS表有四列,分别是department_id、DEPARTMENT_NAME、MANAGER_ID和LOCATION_ID。
- 它将值插入DEPARTMENTS表的所有列中,假设列值按表中列的相同顺序提供。
- 它将抛出一个ORA错误,因为列名没有显式提及。
- 它将抛出一个ORA错误,因为VALUES子句在INSERT中使用错误。
- 以上都不是
答案:A. 在INSERT语句中包含列名是可选的,前提是值必须符合表中列的数量和顺序。
46. 下面的INSERT语句的结果是什么?(考虑表结构)
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)
INSERT INTO EMPLOYEES (employee_id , hire_date) VALUES (210,"21-JUN-2013");
- 它只插入员工的employee_id和入职日期,其余所有列留空。
- 它只插入employee_id。
- 它将抛出一个ORA错误。
- 以上都不是
答案:C. 日期文字格式有错误。它应该用单引号而不是双引号括起来。
47. 下面的INSERT语句的结果是什么?(考虑给定的表结构)
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)
INSERT INTO EMPLOYEES (employee_id , first_name) VALUES (210,"Bryan");
- 它只插入Bryan的employee_id和名字,其余所有列留空。
- 它只插入名字。
- 它将抛出一个ORA错误。
- 以上都不是
答案:C. 字符串文字格式有错误。它应该用单引号而不是双引号括起来。
48. 假设你需要将O'Callaghan作为员工表的姓插入。以下哪个查询可以得到所需的结果?(考虑给定的表结构)
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)
INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,'O'callahan');
INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,'O"callahan');
INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,'O' 'Callahan');
INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,"O'callahan");
答案:C。
49. 下面的INSERT语句的结果是什么?(考虑给定的表结构)
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)
INSERT INTO EMPLOYEES (employee_id , first_name) VALUES ("210",'Bryan');
- 它将抛出一个数值错误。
- 它只插入Bryan的employee_id和名字,其余所有列为NULL。
- 它只插入employee_id。
- 以上都不是
答案:A. 数值不应包含在引号中。
50. 下面的INSERT语句的结果是什么?(考虑给定的表结构)
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)
INSERT INTO departments VALUES (200,'Accounts', NULL, NULL);
- 它将抛出一个ORA错误。
- 它将成功执行,但列中可能会插入错误的值
- 它将成功执行
- 以上都不是
答案:C。可以在 VALUES 子句中使用 NULL 值来交替填充列值。
51. 下面的 INSERT 语句的结果是什么?(假设 department_id 列存在 NOT NULL 约束,并考虑给定的表结构)
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)
INSERT INTO departments VALUES (NULL, 'Accounts', NULL);
- 它将抛出一个ORA错误。
- 它将成功执行,但结果错误
- 它将成功执行,并得到正确的结果
- 以上都不是
答案:A。不能将 NULL 值插入非空列。
52. 下面的 INSERT 语句的结果是什么?(假设 department_id 列存在 NOT NULL 约束,并考虑给定的表结构)
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)
INSERT INTO departments VALUES (200, 34, NULL);
- 它将成功执行,但结果错误
- 它将抛出一个ORA错误。
- 它将成功执行,并得到正确的结果
- 以上都不是
答案:B。值的 数据类型与表中列的数据类型不匹配。
53. 以下哪个命令用于永久保存表中已更改的数据?
- ROLLBACK
- COMMIT
- INSERT
- UPDATE
答案:B。TCL 命令 COMMIT 用于通过使所有挂起的数据更改在表中永久化来结束会话中的当前活动事务。
54. 以下哪个命令允许撤消已更改的数据?
- ROLLBACK
- COMMIT
- INSERT
- UPDATE
答案:A。TCL 命令 ROLLBACK 用于通过丢弃所有挂起的数据更改来结束会话中的当前活动事务。
55. 以下哪个命令允许在活动事务中启用标记?
- ROLLBACK
- COMMIT
- SAVEPOINT
- 以上都不是
答案:C。SAVEPOINT 标记事务中的一个点,该点将事务划分为较小的部分。
56. 以下哪个命令可以阻止其他用户更改表?
- ROLLBACK
- COMMIT
- LOCK TABLE
- SAVEPOINT
答案:C。
57. 关于尝试将值插入虚拟列的 INSERT 语句,哪个说法是正确的?(选择最合适的答案)
- 它不能向虚拟列插入值
- 它可以插入值
- 它会抛出一个 ORA 错误
- 以上所有
答案:A。虚拟列是始终根据列规范中定义的派生表达式自动生成的列。用户无法显式插入其值。
58. 以下哪个命令允许用户使用单个语句插入多行?
- INSERT
- INSERT ALL
- UNION ALL
- 以上都不是
答案:B。可以使用 INSERT ALL 执行批量插入操作。
59. 以下哪个是通过子查询插入行的语法?
INSERT INTO tablename [{column_name,..}] subquery;
INSERT INTO tablename VALUES [{column_name,..}] subquery;
- A 和 B
- 以上都不是
答案:A。
考虑以下 EMPLOYEES 表的示例,并回答接下来的问题 60 到 63
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)
60. 以下哪个查询将成功执行?
UPDATE employees SET salary = salary + 1000 WHERE to_char (hire_date, 'YYYY') > '2006';
UPDATE employees SET salary = salary + 1000 WHERE to_date (hire_date, 'YYYY') > '2006';
UPDATE employees SET salary = salary + 1000 WHERE hire_date > to_date (substr ('01-jan-200',8));
UPDATE employees SET salary = salary + 1000 WHERE hire_date in (to_date ('JUN 01 11', to_date ('JUL 01 11'));
答案:A。
61. 由于组织结构调整,要求您在最终决定公开之前将所有员工的部门 ID 更新为 NULL。只有 JOB_ID 为 NULL 的记录才应更新。以下哪个查询有效?
UPDATE employees SET department_id = NULL Where job_id = NULL;
UPDATE employees SET department_id = NULL Where job_id = TO_NUMBER(NULL);
UPDATE employees SET department_id = NULL Where job_id IS NULL;
UPDATE employees SET department_id = TO_NUMBER (' ', 9999) Where job_id = TO_NUMBER(NULL);
答案:C。使用 IS NULL 运算符检查列值是否为空。
62. 您需要将基本员工数据添加到 EMPLOYEES 表中。基本数据包含姓氏“Bond”和部门 ID 300。以下哪个语句会给出正确的结果?
INSERT INTO employees (employee_id , last_name, department_id ) (100,'Bond', (select department_id from departments where department_id = 300));
INSERT INTO employees (employee_id , last_name, department_id ) VALUES (100,'Bond', (select department_id from departments where department_id = 300));
INSERT INTO employees (employee_id , last_name, department_id ) VALUES ('100','Bond',300);
- 以上都不是
答案:B, C。子查询可以在 INSERT 语句中工作,前提是它们返回的数据类型为标量值,该值与使用它们的列匹配或兼容。
63. 您执行以下查询
DELETE FROM EMPLOYEES;
假设在任何会话中 EMPLOYEES 表上都没有活动事务,以下哪个语句是正确的?
- 它删除表的所有行和结构
- 它删除所有可以回滚的行
- 它永久删除所有行
- 以上都不是
答案:B。作为 DML 语句,DELETE 操作引起的数据更改只有在会话中发出 COMMIT 后才会永久生效。
64. 考虑 COUNTRY 表的结构,如下所示
SQL> desc countries Name Null? Type ----------------------- -------- ---------------- COUNTRY_ID NOT NULL CHAR(2) COUNTRY_NAME VARCHAR2(40) REGION_ID NUMBER
您在一个会话中发出以下语句。
INSERT INTO COUNTRIES (1, 'Whales') / INSERT INTO COUNTRIES (2, 'England') / SAVEPOINT A; UPDATE COUNTRIES SET country_id= 100 where country_id= 1 / SAVEPOINT B; DELETE FROM COUNTRIES where country_id= 2 / COMMIT / DELETE FROM COUNTRIES where country_id= 100 /
当为用户会话发出 ROLLBACK TO SAVEPOINT 命令时会发生什么?
- 回滚会生成错误
- 仅回滚 DELETE 语句
- 没有 SQL 语句被回滚
- 以上都不是
答案:A, C。由于有两个保存点 - A 和 B,并且 ROLLBACK 命令没有指定实际的保存点标记,因此 Oracle 会抛出错误。
65. 如果用户发出 DML 命令并突然退出 SQL Developer 而不进行 COMMIT 或 ROLLBACK,结果会怎样?(假设会话不是自动提交)
- 自动提交
- 自动回滚
- 可能是 COMMIT 或 ROLLBACK 来结束事务
- 以上都不是
答案:B。当事务因系统故障中断时,整个事务将自动回滚。
66. 以下哪些命令/语句可以结束事务?
- COMMIT
- SELECT
- SAVEPOINT
- CREATE
答案:A, D。除了 TCL 命令(即 COMMIT 或 ROLLBACK)之外,DDL 命令和 DCL 命令还具有自动提交功能。如果在同一会话中执行 DDL 语句,则活动事务将被提交。
67. 事务何时完成?
- 执行 ROLLBACK 时
- 执行 COMMIT 时
- 执行 TRUNCATE 时
- 以上所有
答案:D。如果在会话中执行 TCL、DCL 或 DDL 命令,则事务完成。
68. 检查给定的表结构并考虑以下查询
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)
INSERT INTO EMPLOYEES (department_id ) VALUES (select department_id FROM departments);
上述查询的结果是什么?
- EMPLOYEES 表和 departments 表中的列不匹配
- 在子查询中必须使用 WHERE 子句
- 当使用子查询时,不能将 VALUES 关键字与 INSERT 子句一起使用
- 以上都不是
答案:C。VALUES 关键字用法错误。它只能在您手头有列数据且必须插入到表中的情况下使用。
69. 检查给定的表结构并考虑以下查询
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 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)
UPDATE (select employee_id , job_id from employees) SET hire_date = '01-JAN-13' WHERE employee_id = (select employee_id FROM job_history);
关于给定查询,以下哪个说法是正确的?
- 它不会执行,因为我们不能在单个 UPDATE 语句中使用两个表
- 它不会执行,因为 UPDATE 不能使用子查询
- 它将在指定的列上执行限制
- 它不会执行,因为在 WHERE 子句中使用了子查询
答案:C。
70. 提交事务时会发生什么?
- 事务期间所做的更改将为特定用户会话保存
- 事务期间所做的更改将被丢弃
- 如果事务是 DDL,则提交不起作用
- 以上都不是
答案:D。提交事务会将挂起的数据更改永久保存到数据库中。
71. 以下哪个原因是使用字符串的最佳原因?
- 使用子查询
- 语法错误
- 访问权限
- 约束冲突
答案:C, B, D。对不存在的对象/列的引用,空间问题可能是其他原因。
72. 当 INSERT 语句尝试将记录插入旧表时会发生什么?
- 所有列都将获得 NULL 值
- 将自动创建一个同名的新表,并将插入值
- INSERT 无法工作,它会抛出一个 ORA 错误
- 以上都不是
答案:C。
73. 名为“Jonathan Adams”的用户能够从 EMPLOYEES 表中选择列,但他无法向 EMPLOYEES 插入记录。原因可能是什么?
- Jonathan 连接到不支持 INSERT 语句的数据库
- INSERT 语句不能应用于 EMPLOYEES 表
- Jonathan 具有 SELECT 权限,但没有向 EMPLOYEES 表进行 INSERT 的权限
- 以上都不是
答案:C。用户可以根据其职责享受表访问权限。一个人可能只有对表的读取权限,而另一个人可能同时拥有读取和写入权限。
74. 假设要将 100 万行插入 AUDIT 表中。INSERT 事务对前 1000 行成功运行,并抛出 ORA 错误“违反约束”。插入到前 1000 行中的值会发生什么?
- 它们将保持原样
- 它们都将被删除
- 它们都将被回滚
- 以上都不是
答案:C。如果事务期间的任何 DML 语句遇到错误,则整个事务将回滚。
检查表结构并考虑以下查询,并回答接下来的问题 75、76 和 77
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)
INSERT INTO departments values (15, NULL);
75. 此语句的结果是什么?
- 它将插入一行,其中 department_id = 15,所有其他值均为 NULL
- 它将成功执行,但在表中插入 0 行
- 它将抛出 ORA 错误,因为列数和值数不匹配
- 以上都不是
答案:C。DEPARTMENTS 表包含四列,但 INSERT 语句仅为两列提供值,也没有提及列。因此,会抛出 ORA 错误。
76. 关于上述 INSERT 语句,哪个说法是正确的?
- 如果在 INSERT 语句中未提及列,则值将按位置插入列中
- 必须在 INSERT 语句后提及列
- A 和 B
- 以上都不是
答案:A。如果在 INSERT 语句中未指定列,Oracle 会按顺序和位置将每个值映射到表中的列。
77. 关于上述语句,如果表被修改以添加新列会发生什么?
- 语句仍然有效
- 语句执行将抛出错误,因为列数和值数将不匹配
- 不会有任何变化,语句将像以前一样执行
- 以上都不是
答案:B。由于之前没有指定列,因此问题仍然存在。列值映射不匹配将抛出 ORA 错误。
检查下面给出的表结构,并考虑以下查询,然后回答接下来的问题 78 和 79
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
INSERT INTO employees (employee_id , last_name, hire_date) VALUES (100, 'ADAMS','21-DEC-12');查询 2
INSERT INTO employees (employee_id , last_name, hire_date) VALUES (100, upper('ADAMS'),to_date('21-DEC-12','DD-MON-YY'));
78. 以上两个查询哪个更好?
- 两者都更好
- 只有查询1更好
- 只有查询2更好
- 所有查询都不正确
答案:C。 查询2更好,因为它将日期值插入为日期,而不是字符串。尽管Oracle会执行字符串字面量到日期的隐式转换,但不推荐这样做。
79. 以下哪个查询等效于上面给出的查询2?
INSERT INTO employees (employee_id , last_name, hire_date) VALUES (101-1, upper('ADAMS'),to_date('21-DEC-12','DD-MON-YY'));
INSERT INTO employees (employee_id , last_name, hire_date) VALUES (99+1, upper('ADAMS'),to_date('22-DEC-12','DD-MON-YY') +1 );
INSERT INTO employees (employee_id , last_name, hire_date) VALUES (100, upper('ADAMS'),to_date('21-DEC-12','DD-MON-YY') - 1);
INSERT INTO employees (employee_id , last_name, hire_date) VALUES (100, upper('ADAMS'),to_date('28-DEC-12','DD-MON-YY')-7 );
答案:A、C、D。 可以使用算术运算/函数插入如上所示的值。
80. 您需要将数据从一个表复制到另一个表。可以使用哪些方法?
- 您可以使用COPY命令
- 您可以使用INSERT命令
- 您可以使用UPDATE命令
- 以上都不是
答案:B。 直接路径操作INSERT-AS-SELECT (IAS) 是将数据从一个表复制到另一个表最常用的方法。
81. 以下哪个语句会将数据从JOB_HISTORY表复制到JOB_HISTORY_ARCHIVE表?(考虑给出的表结构)
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)
INSERT INTO job_history values (select * from job_history);
INSERT INTO JOB_HISTORY_ARCHIVE values (select * from job_history_archive);
INSERT INTO JOB_HISTORY_ARCHIVE select * from job_history;
- 以上都不是
答案:C。选项“C”正确地展示了IAS(INSERT-AS-SELECT)方法的用法。
检查给定的表结构。考虑以下查询并回答后面的问题82和83
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)
INSERT ALL WHEN job_id = 'SA_REP' then INTO employees (employee_id , department_id , salary, hire_date) VALUES (employee_id , 10, salary, hire_date) WHEN job_id <> 'SA_REP' then INTO employees (employee_id , department_id , salary, hire_date) VALUES (employee_id , 20, salary, hire_date) SELECT employee_id , department_id , job_id, salary, commission_pct , hire_date FROM employees WHERE hire_date > sysdate - 30;
82. 解释上述INSERT语句的输出。
- 抛出一个错误
- 它将插入所有在sysdate一个月前被雇佣的员工的记录。
- 它将插入10部门所有销售代表的记录
- 以上都不是
答案:B、C。INSERT ALL可以对目标表进行条件插入。
83. 将哪些员工的数据插入到20部门?
- 销售代表
- 会计
- A或B。
- 以上都不是
答案:B。根据INSERT ALL语句,job_id不是“销售代表”的员工的详细信息。
84. 以下查询的结果是什么?(考虑给出的表结构)
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)
INSERT INTO employees (employee_id , salary) VALUES (&employee_id , &salary); COMMIT;
- 语法错误,因为在DML语句中不能使用替换变量
- 系统将提示用户输入员工ID和薪水,但替换变量无法将数据插入表中
- 系统将提示用户输入员工ID和薪水,并将成功在EMPLOYEES表中创建记录
- 以上都不是
答案:C。替换变量可以很好地与DML语句一起使用。
85. 评估以下按指定顺序在一个用户会话中执行的SQL语句
CREATE SEQUENCE id_seq; SELECT id_seq.nextval FROM dual; INSERT INTO employees (employee_id ,first_name,job_id ) VALUES (ord_seq.CURRVAL, 'Steyn','Trainee'); UPDATE employees SET employee_id = id_seq.NEXTVAL WHERE first_name = 'Steyn' AND job_id ='Trainee';
上述语句的结果是什么?
- CREATE SEQUENCE命令会抛出错误,因为没有指定序列的最小值和最大值
- 所有语句都将成功执行,并且employee_id列将包含员工STEYN的值2。
- CREATE SEQUENCE命令不会执行,因为没有指定序列的起始值和增量值。
- 所有语句都将成功执行,并且employee_id列将具有员工STEYN的值20,因为默认CACHE值为20。
答案:B。
86. UPDATE语句中使用的子查询有什么限制?
- 子查询应该是一个多行子查询
- 子查询应该是一个单行子查询
- 没有限制
- 子查询可以是单行子查询或多行子查询
答案:B。在UPDATE语句中使用时,子查询不应返回多行
检查给定的表结构并考虑以下查询,然后回答后面的问题87和88
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)
UPDATE employees SET salary = (SELECT salary FROM employees WHERE employee_id =7382);
87. 上述查询的结果是什么?
- 执行时会抛出ORA错误
- 所有员工的薪水都将更新为与员工7382相同的薪水
- 所有员工的薪水都将更新为NULL
- 以上都不是
答案:B。查询结果可用于更新表中的列值。
88. 假设员工7382不存在于EMPLOYEES表中。查询的结果是什么?
- 由于无法将查询结果更新到列,因此执行时会抛出ORA错误
- 所有员工的薪水都将更新为NULL
- 由于员工7382不存在,因此会引发ORA异常“NO_DATA_FOUND”
- 以上都不是
答案:B。UPDATE语句不会引发任何异常,除了语法错误。
检查给定的表结构并考虑以下查询,然后回答后面的问题89和90
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)
UPDATE employees set salary = (select salary from employees where last_name = 'Adams');
89. 查询的结果是什么?
- 它成功执行
- 表的所有行都具有相同的薪水
- 执行时可能会抛出ORA错误“TOO_MANY_ROWS”
- 以上都不是
答案:C。子查询可能会返回多于一行,从而导致错误。
90. 上述查询中的哪些更改可以确保不会发生错误?
- 使用单行函数(如MAX、MIN或AVG)将多行结果减少为标量结果
- 在SALARY列上添加主键约束
- 无需更改
- 以上都不是
答案:A。
检查给定的表结构并考虑以下查询,然后回答后面的问题91和92
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)
UPDATE employees SET salary = (select max (salary) from employees where last_name = 'Adams');
91. 上述查询的结果是什么?
- 它将更新所有员工的薪水,使其等于名为Adam的员工的薪水
- 它将更新所有员工的薪水,使其等于所有姓“Adam”的员工的平均薪水
- 它将更新0行
- 它将只更新一行
答案:B。可以使用算术函数MAX或MIN与子查询一起获取标量值并避免错误。
92. 假设上述子查询被以下内容替换
SELECT distinct salary from employees where last_name = 'Adam';
上述主查询的结果是什么?
- 它将成功执行,但结果不正确
- 它将成功执行,并给出正确的结果
- 它将抛出一个ORA错误。
- 以上都不是
答案:C。它会报错,因为有很多姓“Adam”的人,所以会有很多不同的薪水。
检查给定的表结构并考虑以下查询,然后回答后面的问题93和94
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)
UPDATE employees SET salary = 50000; WHERE job_id in (select job_id from job_history where department_id = 10);
93. 上述语句会做什么?(选择最合适的答案)
- 它将把所有员工的薪水都更新为50000
- 它将更新10部门所有员工的薪水
- 它将更新所有员工的薪水,这些员工的job ID与10部门的员工的job ID相似
- 以上都不是
答案:C。
94. 如果将上述WHERE子句替换为以下内容,将会发生什么?
WHERE job_id = (select job_id from job_history where department_id = 10);
- 它将成功执行,但结果不正确
- 它将成功执行,并给出正确的结果
- 它将抛出一个ORA错误。
- 以上都不是
答案:C。等号会引发错误。
检查给定的表结构并考虑以下语句。回答后面的问题95到97。
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)
DELETE FROM employees where last_name = 'A%'; COMMIT;
95. 上述查询的结果是什么?
- 成功执行,但没有删除任何行
- 所有姓氏以“A”开头的员工都将被删除
- ORA错误,因为DELETE语句不能有WHERE谓词
- employees表中的所有行都将被删除
答案:A。DELETE语句可以有WHERE子句谓词。根据条件,记录将从表中删除。
96. 考虑以下语句
DELETE FROM employees where employee_id IS NULL and job_id = NULL; COMMIT;
假设employee_id列上存在NOT NULL约束,上述查询的结果是什么?
- 由于WHERE谓词无效,它将引发ORA错误
- 它将成功执行,并且不会删除任何行
- 它将引发ORA错误,因为多个谓词不能在DELETE语句中工作
- 以上都不是
答案:B。多个谓词可以应用于DML语句UPDATE和DELETE。
97. 考虑以下查询
DELETE FROM employees where department_id = &deptID; COMMIT;
执行上述语句时会发生什么?
- 它将引发错误,因为DML语句不能使用替换变量
- 它将提示用户输入要从表中删除的部门ID,并删除具有给定部门ID的记录
- 它将提示输入部门ID,但事务无法提交
- 以上都不是
答案:B。替换变量可以与DML语句一起使用。
98. 事务的所有部分都应完成,或者一个也不完成。ACID规则的哪个属性符合给定的语句?
- 原子性
- 一致性
- 隔离性
- 持久性
答案:A。ACID指的是数据库事务的基本属性:原子性、一致性、隔离性和持久性。原子性意味着整个动作序列必须全部完成或全部中止。一致性意味着事务将资源从一个一致状态转换到另一个一致状态。隔离性意味着事务的效果在事务提交之前对其他事务不可见。持久性意味着已提交事务所做的更改是永久性的,并且必须能够在系统故障中幸存下来。
99. ACID属性中的持久性原则说明了什么?
- 它指出数据库可能会丢失已完成的事务
- 它指出事务无法完成
- 它指出一旦事务完成,数据库就必须不可能丢失它。
- 以上都不是
答案:C。
100. 不完整的事务应该对所有其他用户不可见。ACID属性的哪个属性说明了这一点?
- 隔离性
- 一致性
- 原子性
- 持久性
答案:A。“I”代表隔离性。
101. 一致性原则说明了什么?
- 它指出查询的结果必须与查询开始时数据库的状态一致
- 它指出不完整的事务应该对所有其他用户不可见
- 它指出一旦事务完成,数据库就必须不可能丢失它
- 以上都不是
答案:A。ACID属性中的“C”代表一致性
102. 以下哪项最能描述事务?
- INSERT 到 COMMIT/ROLLBACK
- UPDATE 到 COMMIT/ROLLBACK
- DELETE 到 COMMIT/ROLLBACK
- INSERT/UPDATE/DELETE 到 COMMIT/ROLLBACK
答案:D。
103. 一个名为“Jonathan”的用户在EMPLOYEES表中插入数据。其他用户何时才能看到这些新数据?
- 当Jonathan授予用户访问权限时
- 当Jonathan在会话中执行ROLLBACK语句时
- 当Jonathan在同一会话中执行COMMIT语句时
- 当Jonathan打开一个新会话并发出COMMIT命令时
答案:C. 必须在同一会话中提交活动事务。
104. 关于事务的嵌套,可以说什么?
- 最多可以嵌套2级
- 最多可以嵌套255级
- 事务嵌套是不可能的
- 只允许嵌套1级
答案:C。
105. 以下哪些原因会终止事务?
- DDL语句
- 退出客户端
- 系统崩溃
- 以上所有
答案:D. DDL语句会自动提交,并结束正在进行的活动事务。