- 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許可權才能刪除索引。