SQL - 資料操作問題



1.關於關係資料庫,ACID 指的是什麼?

  1. 準確性、一致性、隔離性、資料庫
  2. 準確性、併發性、隔離性、永續性
  3. 原子性、一致性、隔離性、永續性
  4. 原子性、併發性、隔離性、永續性

答案:C.所有 Oracle 事務都符合資料庫事務的基本屬性,即 ACID 屬性。原子性表示事務的所有任務都執行或都不執行。沒有部分事務。一致性意味著事務將資料庫從一個一致狀態轉換到另一個一致狀態。隔離性意味著事務的影響在事務提交之前對其他事務不可見。永續性意味著已提交事務所做的更改是永久性的。事務完成後,資料庫透過其恢復機制確保事務的更改不會丟失。

2. 在 Oracle SQL 中,DML 代表什麼?

  1. 永續性管理語言
  2. 資料庫管理語言
  3. 資料庫操作語言
  4. 以上都不是

答案:C.DML 代表資料操作語言。

3. 以下哪些是 Oracle 資料庫中的 DML 命令?

  1. SELECT
  2. GROUP BY
  3. INTERSECT
  4. INSERT

答案:A、D.嚴格來說,SELECT 是一個 DML 命令,因為它是操作表中資料的必需子句之一。

4.以下哪個 DML 命令可以被認為是單個語句中 INSERT 和 UPDATE 的混合?

  1. INTERSECT
  2. INSERT
  3. SELECT
  4. MERGE

答案:D.MERGE 可以在 Oracle 的單個語句中執行 INSERT 和 UPDATE 操作。

5. MERGE 語句在 SQL 中可以執行哪些操作?

  1. INSERT
  2. DELETE
  3. GROUP BY
  4. 以上都不是

答案:A、B.在某些情況下,MERGE 還可以執行 DELETE 操作,以及 INSERT 和 UPDATE。

6.以下哪個命令是 DDL(資料定義語言)命令,但通常與 DML 命令一起考慮?

  1. DELETE
  2. INSERT
  3. TRUNCATE
  4. 以上都不是

答案:C.TRUNCATE 是一個 DDL 命令。它無條件地刪除表中的記錄。它不屬於任何正在進行的事務的一部分,會話中的未提交事務在執行 TRUNCATE 後會提交。

7.以下哪些命令主要操作資料?

  1. MINUS
  2. UPDATE
  3. TRUNCATE
  4. 以上所有

答案:B、C.UPDATE 是一個 DML 語句,用於修改表中的列值。TRUNCATE 透過無條件地刪除它們來操作資料。

8. 以下哪個命令用於使用資料填充錶行?

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

答案:B.INSERT 命令用於在表中插入行。

9. 關於 INSERT 語句,哪個說法是正確的?(選擇最合適的答案)

  1. 它一次可以插入一個表的一行資料
  2. 它一次可以插入一個表的許多行資料
  3. 它一次可以插入多個表的許多行資料
  4. 以上所有

答案:C.INSERT 語句能夠一次在一個表中插入一行或多行資料。

10.關於在表中插入行,哪個說法是正確的?

  1. 行可以隨機插入
  2. 可以在表中插入任意數量的行,沒有任何限制
  3. 通常,行是根據稱為約束的某些規則插入到表中的
  4. 以上所有

答案:C.約束是對列強加的業務規則,以確保進入列的資料的行為。在 INSERT 過程中會驗證這些約束的資料。

11. 關於 Oracle SQL 中的 INSERT 語句,哪個說法是正確的?(選擇最合適的答案)

  1. INSERT 語句可以覆蓋對錶設定的任何約束
  2. 如果已經對錶設定了約束,則不能對該表使用 INSERT 語句
  3. 只有在表上已經設定了約束時,才能對該表使用 INSERT 語句
  4. 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 列上存在重複值檢查約束,上述語句的結果是什麼?

  1. 它將插入另一行,值為 5100 BRUCE CLERK
  2. 它將插入另一行,值為 51002 BRUCE CLERK
  3. 它將丟擲一個“約束違反”ORA 錯誤
  4. 以上都不是

答案:C.由於值“5100, BRUCE, CLERK”的行已經存在於表中,因此使用相同資料集的 insert 語句是不可能的。

13.您對上面顯示的資料集發出以下命令

INSERT INTO EMPLOYEES (employee_id  , first_name , job_id) VALUES (51003,'BRUCE','CLERK');

此語句的輸出是什麼?

  1. 它將插入新的一行,值為 51003 BRUCE CLERK
  2. 它將丟擲一個 ORA 錯誤,因為不可能有另一個名為 BRUCE 的 CLERK
  3. 它將丟擲一個“約束違反”ORA 錯誤
  4. 以上都不是

答案:A.由於 FIRST_NAME 和 job_id 列上沒有約束,因此 INSERT 將在沒有任何錯誤的情況下工作

14. 您對上面顯示的資料集發出以下命令

INSERT INTO EMPLOYEES (employee_id  , first_name , job_id ) VALUES (51003,'BRUCE', NULL);

此語句的輸出是什麼?

  1. 它將插入新的一行,值為 51003 BRUCE CLERK
  2. 它將丟擲一個 ORA 錯誤,因為不可能有另一個名為 BRUCE 的 CLERK
  3. 它將丟擲一個“約束違反”ORA 錯誤
  4. 它將插入新的一行,值為 51003 BRUCE NULL

答案:D.由於 FIRST_NAME 和 JOB_ID 列上沒有 NOT NULL 約束,因此將插入 NULL 值。

15. 關於在表中插入行,以下哪一項說法是正確的?

  1. 使用者無法互動地插入行
  2. 可以使用替換變數編寫查詢,以便使用者互動地插入行
  3. 當提示使用者插入行時,插入不起作用,並丟擲 ORA 錯誤
  4. 以上都不是

答案:B.INSERT 語句可以使用替換變數來提示使用者在執行時輸入值。它提供了一種互動式的方式將資料插入表中

16.以下哪些可以用於在表中插入行?

  1. SELECT
  2. INSERT
  3. 子查詢
  4. 以上所有

答案:D.INSERT 語句可以使用顯式 INSERT、INSERT-SELECT 或子查詢方法將資料插入表中。

17. 以下哪一項是將行插入表中的常用技術?(選擇最合理和合適的答案)

  1. 使用 SELECT 子句
  2. 手動將每個值鍵入 INSERT 子句
  3. 使用集合運算子
  4. 以上都不是

答案:A.使用 SELECT 子句是將行插入表中最常用的技術。它減少了為每一列手動鍵入值的麻煩。

18.以下哪個命令用於更改表中已經存在的行?

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

答案:C.UPDATE 是一個 DML 語句,用於修改表中的列值。

19.關於 UPDATE 命令,哪個說法是正確的?

  1. 它一次只能更新一行
  2. 它一次只能更新 100 行
  3. 它一次可以批次更新無限行
  4. 以上都不是

答案:C.UPDATE 可以根據 WHERE 子句條件一次更新多行或多行。

20.以下哪個子句決定要更新多少行?

  1. SELECT
  2. WHERE
  3. FROM
  4. 以上所有

答案:B.UPDATE 語句使用 WHERE 子句來捕獲需要更新的行集。

21.關於 UPDATE 語句,以下哪一項說法是正確的?(選擇最合適的答案)

  1. UPDATE 只能更新一個表中的行
  2. UPDATE 可以更新多個表中的行
  3. 單個 UPDATE 命令不能影響多個表中的行
  4. 以上都不是

答案: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”。您將執行以下哪個語句?

  1. UPDATE employees
    SET job_id  = 'ACCOUNTANT'
    WHERE employee_id   = 7389;
  2. INSERT INTO EMPLOYEES (employee_id  , first_name , job_id ) VALUES (5100,'BRUCE', 'ACCOUNTANT');
  3. UPDATE employees
    SET job_id  = 'ACCOUNTANT'
    WHERE job_id  = 'CLERK';
  4. 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”(關於上面顯示的資料集)。查詢的結果是什麼?

  1. Bruce 的職位程式碼仍然為 NULL
  2. Bruce 的職位程式碼將修改為“SALESMAN”
  3. ORA 錯誤
  4. 無操作

答案:B.UPDATE 將新值新增到 NULL 值,將 NULL 更改為新值

24. 您執行 UPDATE 語句將員工 ID 7389 更新為 7900。在提交事務之前,您按其 ID“7389”查詢員工。結果是什麼?

  1. 更新將成功,而選擇將顯示 7389。
  2. 更新將成功,而選擇將顯示無記錄。
  3. EMPLOYEE_ID 上的約束不允許更新。
  4. 它將成功更新,但 EMPLOYEE_ID 7389 的所有值都將變為 NULL。

答案:B.會話中的查詢與正在進行的事務一致。如果在不同的會話中執行相同的查詢,它將顯示員工記錄 ID 為 7389,因為第一個會話中的活動事務尚未提交。

25. 以下哪一項是 UPDATE 語句的典型用途?(選擇最合適的答案)

  1. 檢索一行並更新該行的一列或多列
  2. 修改某些列的所有行
  3. 修改表的所有列的所有行
  4. 以上都不是

答案:A.雖然 UPDATE 語句可以修改所有行中的所有列值,但通常它用於選擇一行並更新一列或多列。

26. 以下哪些做法適當地描述瞭如何使用 UPDATE 語句選擇要更新的行集?

  1. 如果要更新某些行,可以使用 PRIMARY KEY 約束
  2. 如果要更新所有行,可以考慮使用WHERE子句。
  3. 要更新一組行,請使用WHERE子句;要更新表的全部行,請在表上設定主鍵約束。
  4. 以上都不是

答案:C。

27. 下列哪些列通常不會更新?

  1. 表中的LONG型別列
  2. 表中的LOB列
  3. 同時用作另一個表中外部索引鍵引用的主鍵列
  4. 以上所有

答案: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;

上述語句的結果是什麼?

  1. 資料集的第一行將更新為NULL。
  2. 第一行的第3列將更新為NULL。
  3. 所有行的第3列將更新為NULL。
  4. 將丟擲ORA錯誤。

答案:C. 沒有WHERE子句的UPDATE語句將更新表的所有行。

29. 你發出以下UPDATE語句:

UPDATE employees 
SET employee_id   = NULL;
WHERE job_id  = 'CLERK';

上述語句的結果是什麼?(這裡EMPLOYEE_ID列透過新增約束被標記為必填)

  1. 資料集的第一列將更新為NULL。
  2. 第一行的第3列將更新為NULL。
  3. 所有行的第3列將更新為NULL。
  4. 將丟擲ORA錯誤。

答案:D. 更新列值時必須遵守列上的約束。在給定的UPDATE語句中,將丟擲錯誤,因為EMPLOYEE_ID列是EMPLOYEES表的主鍵,這意味著它不能為NULL。

30. 下列哪個命令可用於從表中刪除現有記錄?

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

答案:D. DELETE用於刪除表中的記錄,可以選擇性地基於條件。作為DML語句,它是事務的一部分。

31. 關於DELETE語句,下列哪一項是正確的?

  1. DELETE語句必須帶有WHERE子句。
  2. DELETE語句不必寫WHERE子句。
  3. DELETE可以一次刪除多個表中的資料。
  4. 以上都不是

答案:B. WHERE子句謂詞在DELETE語句中是可選的。如果省略WHERE子句,則將刪除表的所有行。

32. 當我們在表上發出DELETE語句時,會發生什麼?(選擇最合適的答案)

  1. 彈出提示,詢問使用者是否確定要刪除請求的行。
  2. 立即刪除DELETE語句中給定條件的行。
  3. 立即刪除請求的行,無需任何提示。
  4. 以上都不是

答案: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列中的資料。以下哪個查詢是正確的?

  1. UPDATE employees
    SET job_id  = NULL
    WHERE employee_id   = 51001;
  2. DELETE job_id  FROM employees
    WHERE employee_id   = 51001;
  3. DELETE FROM employees;
  4. 以上都不是

答案:D. 你不能使用DELETE語句刪除特定行中的特定列值。基於給定的條件,整行將被刪除。列中不需要的值可以更新為NULL。選項“A”接近正確,但在問題的上下文中並不正確。

34. UPSERT語句和MERGE語句有什麼區別?

  1. 沒有區別。
  2. UPSERT是MERGE語句的最新術語,MERGE語句已過時。
  3. UPSERT可以執行MERGE無法執行的刪除操作。
  4. MERGE執行INSERT、UPDATE和DELETE操作,UPSERT只執行UPDATE和INSERT操作。

答案:D. UPSERT是一個過時的語句,MERGE以新的功能取代了它。

35. MERGE命令與INSERT、UPDATE和DELETE命令有什麼區別?

  1. MERGE語句比單獨執行每個操作(INSERT、UPDATE、DELETE)消耗更多時間。
  2. 在Oracle 10g之後,MERGE已過時。
  3. MERGE可以在一個表上執行所有三個操作,而INSERT、UPDATE和DELETE一次只執行一個操作。
  4. 以上都不是。

答案:C. MERGE語句可以在單個語句中嵌入表上的所有三個操作,而INSERT、UPDATE和DELETE一次只執行一個操作。

36. 下列哪些物件可以作為MERGE語句中的資料來源?

  1. 只有表。
  2. 只有子查詢。
  3. 表或子查詢。
  4. A或B。

答案:C. MERGE可以很好地與表或子查詢一起使用。

37. 下列哪個語句等效於TRUNCATE語句?(選擇最合適的答案)

  1. DELETE語句。
  2. UPDATE語句。
  3. 沒有WHERE子句的DELETE語句。
  4. 以上都不是

答案:C. TRUNCATE在一個命令中刪除所有行。

38. 下列哪些情況表明發生了DML操作?

  1. 向表中新增新行時。
  2. 組合兩個查詢時。
  3. 截斷表時。
  4. 以上都不是

答案:A. 當表中的現有行被插入、修改或刪除時,這是透過DML語句完成的。

39. 下列哪個選項最能定義事務?

  1. 事務包含資料庫模式上的DDL語句。
  2. 事務包含資料庫會話中的COMMIT或ROLLBACK。
  3. 事務包含一組DML語句或一個DDL或DCL或TCL語句,以構成資料庫會話中邏輯工作單元。
  4. 事務包含資料庫不同會話中的一組DML和DDL語句。

答案:C. 資料庫事務包含一個或多個DML語句,構成資料中的一致更改,或一個DDL語句或一個DCL命令(GRANT或REVOKE)。它從第一個DML語句開始,以DCL或DDL或TCL(COMMIT或ROLLBACK)命令結束。請注意,DDL和DCL命令具有自動提交功能。

40. 構成邏輯工作單元的一組DML語句稱為什麼?

  1. ACID特性
  2. UNION
  3. UNION ALL
  4. 事務

答案:D。

41. 活動事務中的DML語句在執行時遇到錯誤會發生什麼?

  1. 整個事務回滾。
  2. 事務中的DML是互斥的,因此可以繼續執行。
  3. 事務中的其他DML被中斷,並等待直到錯誤解決。
  4. 以上都不是

答案:A. 如果活動事務中的任何DML語句遇到錯誤,整個事務最終將回滾。

42. 關於INSERT語句中的VALUES關鍵字,哪個說法是正確的?

  1. VALUES可以在INSERT期間一次新增多行。
  2. VALUES一次只能新增100行。
  3. 如果使用INSERT關鍵字,則必須使用VALUES。
  4. 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. 上述語句將插入多少行?

  1. 0
  2. 2
  3. 3
  4. 1

答案:D. 使用VALUES關鍵字時,它一次只插入一行。

44. 根據上述INSERT語句,值將按什麼順序插入?

  1. Location_id , manager_id, department_name , department_id
  2. department_id , department_name , manager_id, location_id
  3. department_id , manager_id, department_name , location_id
  4. 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。

  1. 它將值插入DEPARTMENTS表的所有列中,假設列值按表中列的相同順序提供。
  2. 它將丟擲一個ORA錯誤,因為列名沒有顯式提及。
  3. 它將丟擲一個ORA錯誤,因為VALUES子句在INSERT中使用錯誤。
  4. 以上都不是

答案: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"); 
  1. 它只插入員工的employee_id和入職日期,其餘所有列留空。
  2. 它只插入employee_id。
  3. 它將丟擲一個ORA錯誤。
  4. 以上都不是

答案: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"); 
  1. 它只插入Bryan的employee_id和名字,其餘所有列留空。
  2. 它只插入名字。
  3. 它將丟擲一個ORA錯誤。
  4. 以上都不是

答案: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)
  1. INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,'O'callahan'); 
  2. INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,'O"callahan'); 
  3. INSERT INTO EMPLOYEES (employee_id , last_name) VALUES (210,'O' 'Callahan'); 
  4. 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'); 
  1. 它將丟擲一個數值錯誤。
  2. 它只插入Bryan的employee_id和名字,其餘所有列為NULL。
  3. 它只插入employee_id。
  4. 以上都不是

答案: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); 
  1. 它將丟擲一個ORA錯誤。
  2. 它將成功執行,但列中可能會插入錯誤的值
  3. 它將成功執行
  4. 以上都不是

答案: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); 
  1. 它將丟擲一個ORA錯誤。
  2. 它將成功執行,但結果錯誤
  3. 它將成功執行,並得到正確的結果
  4. 以上都不是

答案: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); 
  1. 它將成功執行,但結果錯誤
  2. 它將丟擲一個ORA錯誤。
  3. 它將成功執行,並得到正確的結果
  4. 以上都不是

答案:B。值的 資料型別與表中列的資料型別不匹配。

53. 以下哪個命令用於永久儲存表中已更改的資料?

  1. ROLLBACK
  2. COMMIT
  3. INSERT
  4. UPDATE

答案:B。TCL 命令 COMMIT 用於透過使所有掛起的資料更改在表中永久化來結束會話中的當前活動事務。

54. 以下哪個命令允許撤消已更改的資料?

  1. ROLLBACK
  2. COMMIT
  3. INSERT
  4. UPDATE

答案:A。TCL 命令 ROLLBACK 用於透過丟棄所有掛起的資料更改來結束會話中的當前活動事務。

55. 以下哪個命令允許在活動事務中啟用標記?

  1. ROLLBACK
  2. COMMIT
  3. SAVEPOINT
  4. 以上都不是

答案:C。SAVEPOINT 標記事務中的一個點,該點將事務劃分為較小的部分。

56. 以下哪個命令可以阻止其他使用者更改表?

  1. ROLLBACK
  2. COMMIT
  3. LOCK TABLE
  4. SAVEPOINT

答案:C。

57. 關於嘗試將值插入虛擬列的 INSERT 語句,哪個說法是正確的?(選擇最合適的答案)

  1. 它不能向虛擬列插入值
  2. 它可以插入值
  3. 它會丟擲一個 ORA 錯誤
  4. 以上所有

答案:A。虛擬列是始終根據列規範中定義的派生表示式自動生成的列。使用者無法顯式插入其值。

58. 以下哪個命令允許使用者使用單個語句插入多行?

  1. INSERT
  2. INSERT ALL
  3. UNION ALL
  4. 以上都不是

答案:B。可以使用 INSERT ALL 執行批次插入操作。

59. 以下哪個是透過子查詢插入行的語法?

  1. INSERT INTO tablename [{column_name,..}]
    subquery; 
  2. INSERT INTO tablename  VALUES [{column_name,..}]
    subquery; 
  3. A 和 B
  4. 以上都不是

答案: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. 以下哪個查詢將成功執行?

  1. UPDATE employees
    SET salary = salary + 1000
    WHERE to_char (hire_date, 'YYYY') > '2006'; 
  2. UPDATE employees
    SET salary = salary + 1000
    WHERE to_date (hire_date, 'YYYY') > '2006'; 
  3. UPDATE employees
    SET salary = salary + 1000
    WHERE hire_date > to_date (substr ('01-jan-200',8)); 
  4. 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 的記錄才應更新。以下哪個查詢有效?

  1. UPDATE employees
    SET department_id  = NULL
    Where job_id  = NULL; 
  2. UPDATE employees
    SET department_id  = NULL
    Where job_id  = TO_NUMBER(NULL); 
  3. UPDATE employees
    SET department_id  = NULL
    Where job_id  IS NULL; 
  4. UPDATE employees
    SET department_id  = TO_NUMBER (' ', 9999)
    Where job_id  = TO_NUMBER(NULL); 

答案:C。使用 IS NULL 運算子檢查列值是否為空。

62. 您需要將基本員工資料新增到 EMPLOYEES 表中。基本資料包含姓氏“Bond”和部門 ID 300。以下哪個語句會給出正確的結果?

  1. INSERT INTO employees (employee_id , last_name, department_id ) 
    (100,'Bond',
    (select department_id  from departments where department_id  = 300));  
  2. INSERT INTO employees (employee_id , last_name, department_id ) 
    VALUES (100,'Bond',
    (select department_id  from departments where department_id  = 300));
  3. INSERT INTO employees (employee_id , last_name, department_id ) 
    VALUES ('100','Bond',300);
  4. 以上都不是

答案:B, C。子查詢可以在 INSERT 語句中工作,前提是它們返回的資料型別為標量值,該值與使用它們的列匹配或相容。

63. 您執行以下查詢

DELETE FROM EMPLOYEES; 

假設在任何會話中 EMPLOYEES 表上都沒有活動事務,以下哪個語句是正確的?

  1. 它刪除表的所有行和結構
  2. 它刪除所有可以回滾的行
  3. 它永久刪除所有行
  4. 以上都不是

答案: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 命令時會發生什麼?

  1. 回滾會生成錯誤
  2. 僅回滾 DELETE 語句
  3. 沒有 SQL 語句被回滾
  4. 以上都不是

答案:A, C。由於有兩個儲存點 - A 和 B,並且 ROLLBACK 命令沒有指定實際的儲存點標記,因此 Oracle 會丟擲錯誤。

65. 如果使用者發出 DML 命令並突然退出 SQL Developer 而不進行 COMMIT 或 ROLLBACK,結果會怎樣?(假設會話不是自動提交)

  1. 自動提交
  2. 自動回滾
  3. 可能是 COMMIT 或 ROLLBACK 來結束事務
  4. 以上都不是

答案:B。當事務因系統故障中斷時,整個事務將自動回滾。

66. 以下哪些命令/語句可以結束事務?

  1. COMMIT
  2. SELECT
  3. SAVEPOINT
  4. CREATE

答案:A, D。除了 TCL 命令(即 COMMIT 或 ROLLBACK)之外,DDL 命令和 DCL 命令還具有自動提交功能。如果在同一會話中執行 DDL 語句,則活動事務將被提交。

67. 事務何時完成?

  1. 執行 ROLLBACK 時
  2. 執行 COMMIT 時
  3. 執行 TRUNCATE 時
  4. 以上所有

答案: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); 

上述查詢的結果是什麼?

  1. EMPLOYEES 表和 departments 表中的列不匹配
  2. 在子查詢中必須使用 WHERE 子句
  3. 當使用子查詢時,不能將 VALUES 關鍵字與 INSERT 子句一起使用
  4. 以上都不是

答案: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); 

關於給定查詢,以下哪個說法是正確的?

  1. 它不會執行,因為我們不能在單個 UPDATE 語句中使用兩個表
  2. 它不會執行,因為 UPDATE 不能使用子查詢
  3. 它將在指定的列上執行限制
  4. 它不會執行,因為在 WHERE 子句中使用了子查詢

答案:C。

70. 提交事務時會發生什麼?

  1. 事務期間所做的更改將為特定使用者會話儲存
  2. 事務期間所做的更改將被丟棄
  3. 如果事務是 DDL,則提交不起作用
  4. 以上都不是

答案:D。提交事務會將掛起的資料更改永久儲存到資料庫中。

71. 以下哪個原因是使用字串的最佳原因?

  1. 使用子查詢
  2. 語法錯誤
  3. 訪問許可權
  4. 約束衝突

答案:C, B, D。對不存在的物件/列的引用,空間問題可能是其他原因。

72. 當 INSERT 語句嘗試將記錄插入舊錶時會發生什麼?

  1. 所有列都將獲得 NULL 值
  2. 將自動建立一個同名的新表,並將插入值
  3. INSERT 無法工作,它會丟擲一個 ORA 錯誤
  4. 以上都不是

答案:C。

73. 名為“Jonathan Adams”的使用者能夠從 EMPLOYEES 表中選擇列,但他無法向 EMPLOYEES 插入記錄。原因可能是什麼?

  1. Jonathan 連線到不支援 INSERT 語句的資料庫
  2. INSERT 語句不能應用於 EMPLOYEES 表
  3. Jonathan 具有 SELECT 許可權,但沒有向 EMPLOYEES 表進行 INSERT 的許可權
  4. 以上都不是

答案:C。使用者可以根據其職責享受表訪問許可權。一個人可能只有對錶的讀取許可權,而另一個人可能同時擁有讀取和寫入許可權。

74. 假設要將 100 萬行插入 AUDIT 表中。INSERT 事務對前 1000 行成功執行,並丟擲 ORA 錯誤“違反約束”。插入到前 1000 行中的值會發生什麼?

  1. 它們將保持原樣
  2. 它們都將被刪除
  3. 它們都將被回滾
  4. 以上都不是

答案: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. 此語句的結果是什麼?

  1. 它將插入一行,其中 department_id = 15,所有其他值均為 NULL
  2. 它將成功執行,但在表中插入 0 行
  3. 它將丟擲 ORA 錯誤,因為列數和值數不匹配
  4. 以上都不是

答案:C。DEPARTMENTS 表包含四列,但 INSERT 語句僅為兩列提供值,也沒有提及列。因此,會丟擲 ORA 錯誤。

76. 關於上述 INSERT 語句,哪個說法是正確的?

  1. 如果在 INSERT 語句中未提及列,則值將按位置插入列中
  2. 必須在 INSERT 語句後提及列
  3. A 和 B
  4. 以上都不是

答案:A。如果在 INSERT 語句中未指定列,Oracle 會按順序和位置將每個值對映到表中的列。

77. 關於上述語句,如果表被修改以新增新列會發生什麼?

  1. 語句仍然有效
  2. 語句執行將丟擲錯誤,因為列數和值數將不匹配
  3. 不會有任何變化,語句將像以前一樣執行
  4. 以上都不是

答案: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. 只有查詢1更好
  3. 只有查詢2更好
  4. 所有查詢都不正確

答案:C。 查詢2更好,因為它將日期值插入為日期,而不是字串。儘管Oracle會執行字串字面量到日期的隱式轉換,但不推薦這樣做。

79. 以下哪個查詢等效於上面給出的查詢2?

  1. INSERT INTO employees (employee_id , last_name, hire_date)
    VALUES (101-1, upper('ADAMS'),to_date('21-DEC-12','DD-MON-YY'));
    
  2. INSERT INTO employees (employee_id , last_name, hire_date)
    VALUES (99+1, upper('ADAMS'),to_date('22-DEC-12','DD-MON-YY') +1 );
    
  3. INSERT INTO employees (employee_id , last_name, hire_date)
    VALUES (100, upper('ADAMS'),to_date('21-DEC-12','DD-MON-YY') - 1);
    
  4. 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. 您需要將資料從一個表複製到另一個表。可以使用哪些方法?

  1. 您可以使用COPY命令
  2. 您可以使用INSERT命令
  3. 您可以使用UPDATE命令
  4. 以上都不是

答案: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)
  1. INSERT INTO job_history values (select * from job_history);
  2. INSERT INTO JOB_HISTORY_ARCHIVE values (select * from job_history_archive);
  3. INSERT INTO JOB_HISTORY_ARCHIVE select * from job_history;
  4. 以上都不是

答案: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語句的輸出。

  1. 丟擲一個錯誤
  2. 它將插入所有在sysdate一個月前被僱傭的員工的記錄。
  3. 它將插入10部門所有銷售代表的記錄
  4. 以上都不是

答案:B、C。INSERT ALL可以對目標表進行條件插入。

83. 將哪些員工的資料插入到20部門?

  1. 銷售代表
  2. 會計
  3. A或B。
  4. 以上都不是

答案: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;
  1. 語法錯誤,因為在DML語句中不能使用替換變數
  2. 系統將提示使用者輸入員工ID和薪水,但替換變數無法將資料插入表中
  3. 系統將提示使用者輸入員工ID和薪水,並將成功在EMPLOYEES表中建立記錄
  4. 以上都不是

答案: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';

上述語句的結果是什麼?

  1. CREATE SEQUENCE命令會丟擲錯誤,因為沒有指定序列的最小值和最大值
  2. 所有語句都將成功執行,並且employee_id列將包含員工STEYN的值2。
  3. CREATE SEQUENCE命令不會執行,因為沒有指定序列的起始值和增量值。
  4. 所有語句都將成功執行,並且employee_id列將具有員工STEYN的值20,因為預設CACHE值為20。

答案:B。

86. UPDATE語句中使用的子查詢有什麼限制?

  1. 子查詢應該是一個多行子查詢
  2. 子查詢應該是一個單行子查詢
  3. 沒有限制
  4. 子查詢可以是單行子查詢或多行子查詢

答案: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. 上述查詢的結果是什麼?

  1. 執行時會丟擲ORA錯誤
  2. 所有員工的薪水都將更新為與員工7382相同的薪水
  3. 所有員工的薪水都將更新為NULL
  4. 以上都不是

答案:B。查詢結果可用於更新表中的列值。

88. 假設員工7382不存在於EMPLOYEES表中。查詢的結果是什麼?

  1. 由於無法將查詢結果更新到列,因此執行時會丟擲ORA錯誤
  2. 所有員工的薪水都將更新為NULL
  3. 由於員工7382不存在,因此會引發ORA異常“NO_DATA_FOUND”
  4. 以上都不是

答案: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. 查詢的結果是什麼?

  1. 它成功執行
  2. 表的所有行都具有相同的薪水
  3. 執行時可能會丟擲ORA錯誤“TOO_MANY_ROWS”
  4. 以上都不是

答案:C。子查詢可能會返回多於一行,從而導致錯誤。

90. 上述查詢中的哪些更改可以確保不會發生錯誤?

  1. 使用單行函式(如MAX、MIN或AVG)將多行結果減少為標量結果
  2. 在SALARY列上新增主鍵約束
  3. 無需更改
  4. 以上都不是

答案: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. 上述查詢的結果是什麼?

  1. 它將更新所有員工的薪水,使其等於名為Adam的員工的薪水
  2. 它將更新所有員工的薪水,使其等於所有姓“Adam”的員工的平均薪水
  3. 它將更新0行
  4. 它將只更新一行

答案:B。可以使用算術函式MAX或MIN與子查詢一起獲取標量值並避免錯誤。

92. 假設上述子查詢被以下內容替換

 SELECT distinct salary from employees where last_name = 'Adam'; 

上述主查詢的結果是什麼?

  1. 它將成功執行,但結果不正確
  2. 它將成功執行,並給出正確的結果
  3. 它將丟擲一個ORA錯誤。
  4. 以上都不是

答案: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. 上述語句會做什麼?(選擇最合適的答案)

  1. 它將把所有員工的薪水都更新為50000
  2. 它將更新10部門所有員工的薪水
  3. 它將更新所有員工的薪水,這些員工的job ID與10部門的員工的job ID相似
  4. 以上都不是

答案:C。

94. 如果將上述WHERE子句替換為以下內容,將會發生什麼?

 WHERE job_id = (select job_id from job_history where department_id  = 10);
  1. 它將成功執行,但結果不正確
  2. 它將成功執行,並給出正確的結果
  3. 它將丟擲一個ORA錯誤。
  4. 以上都不是

答案: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. 上述查詢的結果是什麼?

  1. 成功執行,但沒有刪除任何行
  2. 所有姓氏以“A”開頭的員工都將被刪除
  3. ORA錯誤,因為DELETE語句不能有WHERE謂詞
  4. employees表中的所有行都將被刪除

答案:A。DELETE語句可以有WHERE子句謂詞。根據條件,記錄將從表中刪除。

96. 考慮以下語句

DELETE FROM employees where employee_id  IS NULL and job_id = NULL;
COMMIT;

假設employee_id列上存在NOT NULL約束,上述查詢的結果是什麼?

  1. 由於WHERE謂詞無效,它將引發ORA錯誤
  2. 它將成功執行,並且不會刪除任何行
  3. 它將引發ORA錯誤,因為多個謂詞不能在DELETE語句中工作
  4. 以上都不是

答案:B。多個謂詞可以應用於DML語句UPDATE和DELETE。

97. 考慮以下查詢

DELETE FROM employees where department_id  = &deptID;
COMMIT;

執行上述語句時會發生什麼?

  1. 它將引發錯誤,因為DML語句不能使用替換變數
  2. 它將提示使用者輸入要從表中刪除的部門ID,並刪除具有給定部門ID的記錄
  3. 它將提示輸入部門ID,但事務無法提交
  4. 以上都不是

答案:B。替換變數可以與DML語句一起使用。

98. 事務的所有部分都應完成,或者一個也不完成。ACID規則的哪個屬性符合給定的語句?

  1. 原子性
  2. 一致性
  3. 隔離性
  4. 永續性

答案:A。ACID指的是資料庫事務的基本屬性:原子性、一致性、隔離性和永續性。原子性意味著整個動作序列必須全部完成或全部中止。一致性意味著事務將資源從一個一致狀態轉換到另一個一致狀態。隔離性意味著事務的效果在事務提交之前對其他事務不可見。永續性意味著已提交事務所做的更改是永久性的,並且必須能夠在系統故障中倖存下來。

99. ACID屬性中的永續性原則說明了什麼?

  1. 它指出資料庫可能會丟失已完成的事務
  2. 它指出事務無法完成
  3. 它指出一旦事務完成,資料庫就必須不可能丟失它。
  4. 以上都不是

答案:C。

100. 不完整的事務應該對所有其他使用者不可見。ACID屬性的哪個屬性說明了這一點?

  1. 隔離性
  2. 一致性
  3. 原子性
  4. 永續性

答案:A。“I”代表隔離性。

101. 一致性原則說明了什麼?

  1. 它指出查詢的結果必須與查詢開始時資料庫的狀態一致
  2. 它指出不完整的事務應該對所有其他使用者不可見
  3. 它指出一旦事務完成,資料庫就必須不可能丟失它
  4. 以上都不是

答案:A。ACID屬性中的“C”代表一致性

102. 以下哪項最能描述事務?

  1. INSERT 到 COMMIT/ROLLBACK
  2. UPDATE 到 COMMIT/ROLLBACK
  3. DELETE 到 COMMIT/ROLLBACK
  4. INSERT/UPDATE/DELETE 到 COMMIT/ROLLBACK

答案:D。

103. 一個名為“Jonathan”的使用者在EMPLOYEES表中插入資料。其他使用者何時才能看到這些新資料?

  1. 當Jonathan授予使用者訪問許可權時
  2. 當Jonathan在會話中執行ROLLBACK語句時
  3. 當Jonathan在同一會話中執行COMMIT語句時
  4. 當Jonathan開啟一個新會話併發出COMMIT命令時

答案:C. 必須在同一會話中提交活動事務。

104. 關於事務的巢狀,可以說什麼?

  1. 最多可以巢狀2級
  2. 最多可以巢狀255級
  3. 事務巢狀是不可能的
  4. 只允許巢狀1級

答案:C。

105. 以下哪些原因會終止事務?

  1. DDL語句
  2. 退出客戶端
  3. 系統崩潰
  4. 以上所有

答案:D. DDL語句會自動提交,並結束正在進行的活動事務。

廣告
© . All rights reserved.