
- 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. 子查詢是巢狀在另一個查詢的 SELECT、FROM、HAVING 或 WHERE 子句中的完整查詢。子查詢必須用括號括起來,至少包含 SELECT 和 FROM 子句。單行子查詢和多行子查詢是子查詢的主要型別。
2. 關於子查詢,以下哪一項是正確的?
- 它們在主查詢執行後執行
- 它們與主查詢並行執行
- 使用者可以先執行主查詢,然後根據需要執行子查詢
- 它們在主查詢執行前執行。
答案:D. 子查詢總是在主查詢執行之前執行。子查詢先完成。子查詢的結果用作外部查詢的輸入。
3. 關於子查詢的結果,以下哪一項是正確的?
- 執行時通常會忽略子查詢的結果。
- 子查詢的結果不會產生結果,它只是有助於加快主查詢的執行速度
- 子查詢的結果被主查詢使用。
- 子查詢的結果始終為 NULL
答案:C. 子查詢先完成。子查詢的結果用作外部查詢的輸入。
4. 子查詢中必須使用以下哪個子句?
- SELECT
- WHERE
- ORDER BY
- GROUP BY
答案:A. 子查詢就像任何其他查詢一樣,必須以 SELECT 子句開頭。它們包含在外部查詢中。
5. 在主查詢中編寫子查詢的方法是什麼?
- 使用 JOIN
- 使用 WHERE 子句
- 使用 GROUP BY 子句
- 在另一個 SELECT 語句的子句中嵌入 SELECT 語句
答案:D. 子查詢是巢狀在另一個查詢的 SELECT、FROM、HAVING 或 WHERE 子句中的完整查詢。子查詢必須用括號括起來,至少包含 SELECT 和 FROM 子句。
6. 在給定的場景中,哪一個能恰當地證明使用子查詢的合理性?
- 當我們需要對值求和時
- 當我們需要將字元值轉換為日期或數值時
- 當我們需要從表中選擇行,而條件取決於相同表或不同表中的資料時。
- 以上都不是
答案:C.
7. 子查詢可以在以下哪個子句中使用?
- HAVING
- WHERE
- FROM
- 以上所有
答案:D. 子查詢與普通查詢沒有什麼不同。它可以使用 SELECT 語句的所有主要子句。
8. 以下哪些單行運算子可用於編寫子查詢?
- >=
- <
- =
- 以上所有
答案:D. 單行運算子包括 =、>、<、>=、<= 和 <>。
9. 以下哪些多行運算子可與子查詢一起使用?
- IN
- ANY
- ALL
- 以上所有
答案:D. 多行子查詢返回多於一行結果。可與多行子查詢一起使用的運算子包括 IN、ALL、ANY 和 EXISTS。
10. 關於從子查詢獲得的輸出,哪一項是正確的?
- 它保留在緩衝區快取中
- 它保留在子查詢中,以後需要時可以使用
- 它用於完成外部(主)查詢
- A 和 C
答案:C. 子查詢先完成。子查詢的結果用作外部查詢的輸入。
11. 您需要查詢所有薪水高於“ABC”公司副總裁的員工的薪水。以下哪個查詢將為您提供所需的結果?(考慮給定的表結構)
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, salary FROM employees WHERE salary > (SELECT salary FROM employees WHERE job_id = 'VICE-PRESIDENT');
SELECT first_name, last_name, salary FROM employees WHERE salary = (SELECT salary FROM employees WHERE job_id = 'VICE-PRESIDENT');
SELECT first_name, last_name, salary FROM employees WHERE job_id = 'VICE-PRESIDENT');
- 以上都不是
答案:A. 在選項“A”中,內部子查詢將副總裁的薪水作為結果提供給外部查詢。
12. 關於子查詢,以下哪一項是正確的?
- 子查詢可以寫在比較運算子的兩側
- 子查詢不需要括號
- 單行子查詢可以使用多行運算子,反之則不行
- 以上所有
答案:A. 子查詢可以根據查詢縮排和可用性放置在比較運算子的左側或右側。
13. 以下查詢的結果是什麼?(考慮給定的表結構)
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, salary FROM employees WHERE salary ANY (SELECT salary FROM employees);
- 它成功執行並給出所需的結果
- 它成功執行,但沒有給出所需的結果
- 它丟擲 ORA 錯誤
- 它成功執行併為結果集中的每一行給出兩個值
答案:C. 多行運算子不能用於單行子查詢,反之亦然。
14. 關於單行子查詢,以下哪一項是正確的?
- 它們從主查詢中給出一個結果
- 它們在結果集中只給出一行
- 它們只從內部 SELECT 語句返回一行
- 它們從主(外部)查詢中給出多行
答案:C. 單行子查詢最多可以返回一個值。
15. 關於多行子查詢,哪一項是正確的?
- 它們可以返回內查詢結果的多於一列
- 它們在主查詢中返回多行,但在內部查詢中只返回單個結果集
- 它們在主查詢中返回單行,但在內部子查詢中返回多行
- 它們從內部 SELECT 語句返回多於一行
答案:D. 多列子查詢在結果集中返回多於一列,多行子查詢從內部查詢返回多於一行。
16. 關於單行子查詢,以下哪一項是正確的?
- 它們只返回一行
- 它們使用單行運算子
- A 和 B
- 以上都不是
答案:C.
17. 以下哪些運算子不能在子查詢中使用?
- AND
- <
- >
- <>
答案:A. 單行運算子包括 =、>、<、>=、<= 和 <>。可與多行子查詢一起使用的多行運算子包括 IN、ALL、ANY 和 EXISTS。
檢視圖表並回答接下來的第 18 至 21 題。


18. 您需要找出所有屬於與員工“Jessica Butcher”(在 100 部門工作,員工 ID 為 40)相同部門的員工的姓名。以下哪個查詢是正確的?
SELECT first_name, last_name FROM employees WHERE last_name = 'Butcher' And first_name = 'Jessica';
SELECT first_name, last_name FROM employees WHERE department =100;
SELECT first_name, last_name FROM employees WHERE department = (SELECT department FROM employees WHERE first_name = 'Jessica' AND last_name = 'Butcher');
SELECT first_name, last_name FROM employees WHERE department = (SELECT department FROM employees WHERE first_name = 'Jessica' AND last_name = 'Butcher' AND department = 100 AND employee_id = 40);
答案:D. “D”比“C”更合適,因為它過濾了唯一的員工 ID,並確保子查詢只返回單行。“C”如果有多個員工擁有相同的姓名,可能會失敗。
19. 您需要找出屬於“Jessica Butcher”部門且薪水高於員工 ID 為 40 的“Jessica Butcher”薪水的員工。以下哪個查詢有效?
SELECT first_name, last_name FROM employees WHERE last_name = 'Butcher' AND first_name = 'Jessica' AND salary > 10000;
SELECT first_name, last_name FROM employees WHERE department = 100;
SELECT first_name, last_name FROM employees WHERE department = (SELECT department FROM employees WHERE first_name = 'Jessica' AND last_name = 'Butcher' AND employee_id = 40) AND salary > (SELECT salary FROM employees WHERE first_name = 'Jessica' AND last_name = 'Butcher' AND employee_id = 40);
SELECT first_name, last_name FROM employees WHERE department = (SELECT department FROM employees WHERE first_name = 'Jessica' AND last_name = 'Butcher' AND department = 100);
答案:C. 可以在一個 SQL 語句中編寫多個子查詢以新增多個條件。
20. 基於第 18 題和第 19 題的答案,它們使用了哪種型別的子查詢?
- 單行子查詢
- 多行子查詢
- A 和 B
- 內聯子查詢
答案:A. 上面給出的第 18 題和第 19 題演示了在 SELECT 語句中使用子查詢。
21. 考慮關於 SQL 子查詢中外部查詢和內部查詢的兩個陳述?
i. 內部查詢只能從一個表獲取資料
ii. 內部查詢可以從多個表獲取資料
以上哪些陳述是正確的?
- (i)
- (ii)
- (i) 和 (ii)
- (i) 和 (ii) 都不是
答案:B. 子查詢可以從多個表中獲取資料。
檢視以下表結構並回答接下來的第 22 至 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)
22. 以下查詢的結果是什麼?(選擇最合適的答案)
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 last_name, job_id, salary FROM employees WHERE salary = (SELECT max(salary) FROM employees);
- 它成功執行並給出薪水等於最高薪水的員工。
- 它成功執行,但沒有給出所需的結果
- 它丟擲一個錯誤,因為在子查詢中使用了組函式
- 它丟擲一個錯誤,因為單行子查詢應該包含多行運算子
答案:A. 可以在子查詢中使用組函式。
23. 以下查詢的結果是什麼?
SELECT first_name, last_name, min(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT min(salary) FROM employees WHERE department_id = 100);
- 它成功執行並給出所有員工的姓名和大於 100 部門的最低薪水
- 它成功執行並給出 100 部門員工的薪水
- 它成功執行並給出所有員工的姓名和最低薪水。
- 它丟擲一個錯誤。
答案:A. 如所示,HAVING 子句可在子查詢中使用
24. 您需要找到平均薪水最高的職位。以下哪個查詢將為您提供所需的結果?
SELECT job_id, avg(salary) FROM employees GROUP BY job_id;
SELECT job_id, avg(salary) FROM employees GROUP BY job_id HAVING job_id in (SELECT max(avg(salary) FROM employees);
SELECT job_id, avg(salary) FROM employees GROUP BY job_id HAVING max(avg(salary) in (SELECT max(avg(salary) FROM employees);
SELECT job_id, avg(salary) FROM employees GROUP BY job_id HAVING avg(salary) in (SELECT max(avg(salary) FROM employees GROUP BY job_id);
答案:D. 子查詢可以使用組函式和 HAVING 子句來限制組。
25. 以下查詢丟擲一個錯誤。選擇選項中給出的錯誤的正確原因。
SELECT first_name, last_name FROM employees WHERE commission_pct = (SELECT min(commission_pct ) FROM employees GROUP BY department_id);
- 子查詢不需要 GROUP BY 子句
- 子查詢 SELECT 語句中不能使用函式
- 單行子查詢給出多條記錄
- “=”運算子的使用無效;IN 運算子將正確工作
答案:C、D。GROUP BY 子句為每個部門提供了最小 commission_pct,因此多個結果被提取到主查詢中,從而導致錯誤。
26.考慮以下查詢。上述查詢將返回多少條記錄?(假設公司中不存在job id 為XX的員工)
SELECT first_name, last_name FROM employees WHERE salary = (SELECT salary FROM employees WHERE job_id = 'XX');
- 1
- NULL
- 0
- 該查詢引發 ORA 錯誤,因為子查詢無效。
答案:C。由於公司中沒有 job_id 為“XX”的員工,因此子查詢不返回任何結果,當與主查詢中的 job_id 比較時,結果為 0。
27.如果將問題 26 中查詢的 WHERE 條件替換為一個新的條件(WHERE job_id IS NOT NULL)會發生什麼?(假設 'employees' 表中的記錄數為 14)。
- 1
- 14
- 0
- ORA 錯誤
答案:D。查詢執行引發異常“ORA-01427: single-row subquery returns more than one row”。
28.以下哪些是用於子查詢的有效多行運算子?
- <=
- ANY >=
- !=
- >=
答案:B。多行子查詢返回多行結果。可用於多行子查詢的運算子包括 IN、ALL、ANY 和 EXISTS。多行運算子 IN、ANY、ALL 必須與單行運算子一起使用,如選項 B 所示。
檢查給出的表結構。考慮以下查詢並回答接下來的問題 29 到 33。
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, salary, commission_pct FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE department_id = 100) AND department_id <> 101;
29.上述查詢中 ANY 運算子計算結果是什麼?
- TRUE
- FALSE
- NULL
- 0
答案:A。多行運算子返回布林值結果。由於部門 100 中存在 salary 的結果,因此返回 TRUE。如果結果為 0,則計算結果為 FALSE。
30.如果我們假設部門 100 只有一個員工,查詢的結果是什麼?
- 它成功執行並返回一個結果
- 它成功執行並返回所有員工的工資
- NULL
- 它丟擲 ORA 錯誤
答案:D。如果部門 100 有一個結果(單行子查詢),則 < ANY 運算子會報錯,因為它是一個多行運算子。
31.如果將上述查詢中的 < ANY 運算子替換為 = ANY 運算子,結果將會怎樣?
- Oracle 將像使用 IN 運算子一樣處理子查詢返回的每個 salary 值
- 結果將沒有區別
- 結果將有所不同
- 執行將丟擲一個 ORA 錯誤
答案:A。= ANY 運算子等效於 IN 運算子。
32.關於上述查詢中的 < ANY 運算子,可以說什麼?
- 它給出工資的最大值
- 它給出工資的最小值
- 這意味著它給出小於最高值的值
- 以上都不是
答案:C。多行運算子 < ANY 計算結果為子查詢的“小於最大值”語句。'> ALL' 大於子查詢返回的最高值。'< ALL' 小於子查詢返回的最低值。'< ANY' 小於子查詢返回的最高值。'> ANY' 大於子查詢返回的最低值。'= ANY' 等於子查詢返回的任何值(與 IN 相同)。'[NOT] EXISTS' 行必須與子查詢中的值匹配
<33.假設將 < ANY 運算子替換為 > ANY。關於此運算子,哪個說法是正確的?
- 它給出最高工資
- 它只查詢子查詢中的最高工資
- 它給出大於最低工資的值
- 它給出最低工資
答案:C。多行運算子 > ANY 計算結果為子查詢的“大於最小值”語句。'> ALL' 大於子查詢返回的最高值。'< ALL' 小於子查詢返回的最低值。'< ANY' 小於子查詢返回的最高值。'> ANY' 大於子查詢返回的最低值。'= ANY' 等於子查詢返回的任何值(與 IN 相同)。'[NOT] EXISTS' 行必須與子查詢中的值匹配
<34.檢查給定的表結構並考慮以下查詢
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 employee_id, first_name, last_name FROM employees WHERE salary IN (SELECT max(salary) FROM employees GROUP BY department_id );
以下哪個 WHERE 子句等效於上述查詢中的 WHERE 子句?(假設工資為 2500、3000、3500、4000)
WHERE salary < ANY (SELECT max(salary) FROM employees GROUP BY department_id );
WHERE salary < ALL (SELECT max(salary) FROM employees GROUP BY department_id );
WHERE salary = (SELECT max(salary) FROM employees GROUP BY department_id );
WHERE salary IN (2500,3000,3500,4000);
答案:D。當使用 IN 運算子時,Oracle 會像選項 D 中所示那樣處理子查詢的各個結果。
檢查 EMPLOYEES 表的結構如下,並回答接下來的問題 35 到 37。
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)<
35.您需要找出哪些員工的工資低於 job ID 為 'FIN_ACT' 的員工的工資。以下哪個查詢將為您提供所需的結果?
SELECT employee_id, first_name, last_name FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'FIN_ACT') AND job_id <> 'FIN_ACT';
SELECT employee_id, first_name, last_name FROM employees WHERE salary > ALL (SELECT salary FROM employees WHERE job_id = 'FIN_ACT') AND job_id <> 'FIN_ACT';
SELECT employee_id, first_name, last_name FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'FIN_ACT') AND job_id <> 'FIN_ACT';
SELECT employee_id, first_name, last_name FROM employees WHERE salary = (SELECT salary FROM employees WHERE job_id = 'FIN_ACT') AND job_id <> 'FIN_ACT';
答案:A。< ALL 表示小於最小值。'> ALL' 大於子查詢返回的最高值。'< ALL' 小於子查詢返回的最低值。'< ANY' 小於子查詢返回的最高值。'> ANY' 大於子查詢返回的最低值。'= ANY' 等於子查詢返回的任何值(與 IN 相同)。'[NOT] EXISTS' 行必須與子查詢中的值匹配
36.如果將上述查詢(上題中的選項 A)中的 < ALL 替換為 >ALL,結果將會怎樣?
- 它將成功執行並返回相同的結果。
- 它將丟擲一個 ORA 錯誤
- 它將成功執行,但會給出工資低於所有 job_id 為 'FI_ACCOUNTANT' 的員工的員工的詳細資訊。
- 以上都不是
答案:C。>ALL 表示小於最小值。'> ALL' 大於子查詢返回的最高值。'< ALL' 小於子查詢返回的最低值。'< ANY' 小於子查詢返回的最高值。'> ANY' 大於子查詢返回的最低值。'= ANY' 等於子查詢返回的任何值(與 IN 相同)。'[NOT] EXISTS' 行必須與子查詢中的值匹配
37.您需要查詢不在部門 100 的所有員工的工資。以下哪個查詢將為您提供所需的結果?
-
SELECT employee_id, first_name, last_name FROM employees WHERE salary !=ALL (SELECT salary FROM employees WHERE department_id = 100) AND department_id <> 100;
SELECT employee_id, first_name, last_name FROM employees WHERE salary NOT IN (SELECT salary FROM employees WHERE department_id = 100) AND department_id <> 100;
SELECT employee_id, first_name, last_name FROM employees WHERE salary NOT ALL (SELECT salary FROM employees WHERE department_id = 100) AND department_id <> 100;
SELECT employee_id, first_name, last_name FROM employees WHERE salary != (SELECT salary FROM employees WHERE department_id = 100) AND department_id <> 100;
答案:C。NOT 可用於多行運算子 IN、ANY 和 ALL。
檢查給出的表結構。考慮以下查詢並回答接下來的問題 38 和 39。您需要查詢沒有下屬向其彙報的員工。(假設預期結果為 0)
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 employee_id NOT IN (SELECT manager_id FROM employees);
38.上述查詢的結果是什麼?
- 10
- NULL
- ORA 錯誤
- 0
答案:D。內部子查詢中的一個值為 NULL(並非所有員工都是經理!)
39.應向上述查詢新增/修改以下哪個 WHERE 子句才能得到預期的結果?
WHERE employee_id != (SELECT manager_id FROM employees);
WHERE employee_id IN (SELECT manager_id FROM employees);
WHERE employee_id <>ALL (SELECT manager_id FROM employees);
WHERE employee_id NOT IN (SELECT manager_id FROM employees WHERE manager_id is NOT NULL);
答案:B、D。如果子查詢可能包含 NULL 值,請不要使用 NOT IN 運算子,或者如果使用,請使用附加的 WHERE 子句修改子查詢(選項 D)
40.一般來說,關於子查詢,哪個說法是正確的?
- 子查詢必須與主查詢分開執行
- 子查詢可以根據使用者的意願執行,它們與主查詢的執行無關
- 子查詢等於兩個順序查詢,其中內部查詢的結果由主查詢使用
- 以上所有
答案:C.
41.關於子查詢,以下哪個說法是正確的?
- 子查詢可以返回 0 行或多行
- 子查詢只能用於 SELECT 子句
- 子查詢的巢狀限制為 2 層
- 分組函式不能用於子查詢
答案:A。子查詢是在另一個查詢的 SELECT、FROM、HAVING 或 WHERE 子句中巢狀的完整查詢。子查詢必須括在括號中,並且至少具有 SELECT 和 FROM 子句。單行子查詢最多可以返回一個值。多列子查詢向外部查詢返回多列。
42.檢查給出的表結構。
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 employee_id NOT IN (SELECT manager_id, hire_date FROM employees WHERE manager_id is not null);
此查詢返回錯誤。錯誤的原因是什麼?
- 使用的 NOT IN 運算子無效
- 子查詢中的 WHERE 子句編寫不正確
- 當主查詢中使用不等式時,子查詢 SELECT 子句中的列應只有一個
- 子查詢使用與主查詢相同的表
答案:C。子查詢中選擇的列應與比較運算子另一側的列相同。任何資料型別或列數的不等都會導致 ORA 錯誤。
43.需要提取一份報告,顯示分配了一個或多個員工的所有部門。以下哪個查詢將提供所需的結果?(考慮給定的表結構)
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 department_name FROM employees WHERE department_id IN (SELECT distinct (department_id ) FROM employees);
SELECT department_name FROM employees WHERE department_id ANY (SELECT distinct (department_id ) FROM employees);
SELECT department_name FROM employees WHERE department_id < ANY (SELECT distinct (department_id ) FROM employees);
SELECT department_name FROM employees WHERE department_id = ANY (SELECT distinct (department_id ) FROM employees);
答案:A、D。
44.在單個 SQL 語句中,Oracle 中允許的最大子查詢巢狀級別是多少?
- 20
- 50
- 無限制
- 255
答案:D。Oracle 支援將查詢巢狀到 255 層。
45.當我們知道需要將哪些值傳遞到 Oracle 查詢中的主查詢時,應該遵循什麼最佳實踐?
- 使用 GROUP BY
- 使用子查詢
- 使用 HAVING
- 以上都不是
答案:D。子查詢可能會產生 NULL 結果,從而導致主結果中為 0 行;因此,只有在我們知道需要哪些值時才最好使用它們。
檢查給出的表結構。考慮以下查詢並回答接下來的問題 46 和 47。
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 employee_id, first_name, last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees);
46.您需要查詢所有 job ID 與 ID 為 210 的員工的 job ID 相同的員工。為了實現此結果,您將新增/修改以下哪個 WHERE 子句?(考慮給定的表結構
WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 210);
WHERE job_id IN (SELECT job_id FROM employees WHERE employee_id = 210);
WHERE job_id > (SELECT job_id FROM employees WHERE employee_id = 210);
WHERE job_id >= (SELECT job_id FROM employees WHERE employee_id = 210);
答案:A。
47.假設您將問題 46 中選項 A 中的 WHERE 子句更改為以下內容。
WHERE job_id = (SELECT job_id FROM employees WHERE employee_id < 210);
此更改的結果是什麼?
- 結果將相同
- 執行時丟擲 ORA 錯誤
- 結果將有所不同
- 查詢將成功執行並返回 0 行。
答案:B。給定更改後,子查詢返回多個結果,因此應將主查詢中給出的“=”替換為多行運算子。
48.檢查如下所示的表結構。


您需要顯示工資最高的員工的姓名。以下哪個 SQL 語句是正確的?
SELECT first_name, last_name, grade FROM employees, grade WHERE (SELECT max (salary) FROM employees) BETWEEN losal and hisal;
SELECT first_name, last_name, grade FROM employees, grade WHERE (SELECT max (salary) FROM employees) BETWEEN losal and hisal AND salary BETWEEN losal and hisal;
SELECT first_name, last_name, grade FROM employees, grade WHERE salary = (SELECT max (salary) FROM employees) AND salary BETWEEN losal and hisal;
SELECT first_name, last_name, grade FROM employees, grade WHERE salary IN (SELECT max (salary) FROM employees) AND max(salary) BETWEEN losal and hisal;
答案:B、C。子查詢可以寫在運算子的兩側
49.SQL 語句的 FROM 子句中的子查詢是什麼?(選擇最合適的答案)
- 單行子查詢
- 多行子查詢
- 內聯檢視
- 相關子查詢
答案:C。如果子查詢出現在 SELECT 語句的 FROM 子句中,則它構成一個內聯檢視。Oracle 在內部為查詢執行建立一個臨時檢視。
50.內聯檢視型別子查詢允許的最大巢狀級別是多少?
- 255
- 300
- 216
- 無限制
答案:D。由於可以連線的表數量沒有限制,因此查詢中內聯檢視的數量也沒有限制。
51.關於相關子查詢,哪個說法是正確的?
- 主查詢中使用的表也用於相關子查詢
- 引用主查詢中使用的列的子查詢稱為相關子查詢。
- 不帶括號編寫的子查詢稱為相關子查詢。
- 強制使用與主查詢中使用的表不同的表的子查詢稱為相關子查詢。
答案:B。相關子查詢引用外部查詢中的列,併為外部查詢中的每一行執行一次子查詢,而非相關子查詢先執行子查詢,然後將值傳遞給外部查詢。
52.以下哪個語句不能作為子查詢的父語句?
- SELECT
- GROUP BY
- UPDATE
- DELETE
答案:B。其餘選項可以作為子查詢的主查詢(父查詢)。
53.關於相關子查詢,哪個說法是正確的?
- 它只為父查詢評估一次。
- 它只為父查詢評估三次。
- 它為父查詢處理的每一行評估一次。
- 以上所有
答案:C。相關子查詢引用外部查詢中的列,併為外部查詢中的每一行執行一次子查詢;EXISTS 運算子用於測試是否存在關係或連結。
54.檢查給定的表結構。你需要編寫一個查詢,返回薪水超過其各自部門平均薪水的員工姓名。以下哪個選項有效?(選擇最合適的答案)
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 employee_id, first_name, last_name FROM employees e WHERE salary > (SELECT avg (salary) FROM employees WHERE e.department_id = department_id ) ORDER BY department_id ;
SELECT employee_id, first_name, last_name FROM employees e WHERE salary > ANY (SELECT avg(salary) FROM employees WHERE e.department_id = department_id ) ORDER BY department_id ;
SELECT employee_id, first_name, last_name FROM employees e WHERE salary = (SELECT avg(salary) FROM employees WHERE e.department_id = department_id ) ORDER BY department_id ;
SELECT employee_id, first_name, last_name FROM employees e WHERE salary < ANY (SELECT avg(salary) FROM employees WHERE e.department_id = department_id ) ORDER BY department_id ;
答案:A。這裡獲取部門 ID,用於評估父查詢,如果該行中的薪水大於該行部門的平均薪水,則返回該結果。
55.檢查給定的表結構。以下哪個查詢將顯示 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)
SELECT * FROM employees E WHERE exists (SELECT 1 FROM employees E1 WHERE E.employee_id = E1.employee_id);
SELECT * FROM employees E WHERE exists (SELECT 1 FROM employees E1 WHERE E.employee_id = E1.employee_id AND E.ROWID < E1.ROWID);
SELECT * FROM employees E WHERE exists (SELECT 1 FROM employees E1 WHERE E.ROWID < E1.ROWID);
SELECT * FROM employees E WHERE = ANY (SELECT 1 FROM employees E1 WHERE E.employee_id = E1.employee_id And E.ROWID < E1.ROWID);
答案:A。相關子查詢引用外部查詢中的列,併為外部查詢中的每一行執行一次子查詢;EXISTS 運算子用於測試是否存在關係或連結。它可以用來查詢表中重複的行,其中重複性取決於一個列或一組列。
檢查 DEPARTMENTS 和 EMPLOYEES 表的結構,並回答接下來的問題 56 和 57。
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)
56.以下哪個查詢將顯示系統日期以及 DEPARTMENTS 和 EMPLOYEES 表中的記錄計數?
SELECT sysdate, (SELECT * FROM departments) dept_count, (SELECT * FROM employees) emp_count FROM DUAL;
SELECT sysdate, (SELECT count(*) FROM departments) dept_count, (SELECT count(*) FROM employees) emp_count FROM DUAL GROUP BY department_id ;
SELECT sysdate, (SELECT * FROM departments) dept_count, (SELECT * FROM employees) emp_count FROM DUAL GROUP BY employee_id;
SELECT sysdate, (SELECT count(*) FROM departments) dept_count, (SELECT count(*) FROM employees) emp_count FROM DUAL;
答案:D。單行子查詢也可以巢狀在外層查詢的 SELECT 子句中。在這種情況下,子查詢返回的值可用於外層查詢生成的每一行輸出。通常,此技術用於使用子查詢生成的數值執行計算。
57.以下哪個查詢將判斷給定的員工是否為“XYZ”公司的經理?
SELECT employee_id, manager_id FROM employees A WHERE employee_id ANY (SELECT manager_id from employees B) ORDER BY manager_id desc;
SELECT employee_id, manager_id FROM employees A WHERE employee_id < ALL (SELECT manager_id from employees B)
SELECT employee_id, manager_id FROM employees A WHERE employee_id IN (SELECT manager_id from employees B) ORDER BY manager_id desc;
SELECT employee_id, manager_id FROM employees A WHERE employee_id in (SELECT manager_id from employees B) GROUP BY department_id ;
答案:C.
檢查圖表並回答接下來的問題 58。



58.以下哪個查詢將提供特定城市中員工的最高薪水?
SELECT max (salary), city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations);
SELECT salary, city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations);
SELECT max (salary), city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations) GROUP BY city;
SELECT max (avg(salary)), city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations);
答案:C。當多列子查詢用於外層查詢的 FROM 子句中時,它會建立一個臨時表,其他外層查詢子句可以引用該表。這個臨時表更正式地稱為內聯檢視。子查詢的結果被視為 FROM 子句中的任何其他表。如果臨時表包含分組資料,則分組子集被視為表中的單獨資料行。
檢查如下所示的表結構。
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)
考慮以下查詢並回答接下來的問題 59 到 62。
SELECT department_name FROM departments d INNER JOIN employees e ON (d.employee_id = e.employee_id) GROUP BY department_name;
59.以下哪個查詢可以使用子查詢替換上面的查詢,並得到相同的結果?
SELECT department_name FROM departments WHERE department_id = ANY (SELECT department_id FROM employees);
SELECT department_name FROM departments WHERE department_id IN (SELECT distinct(department_id ) FROM employees);
SELECT department_name FROM departments WHERE department_id = (SELECT distinct(department_id ) FROM employees);
SELECT department_name FROM departments WHERE department_id ANY (SELECT distinct(department_id ) FROM employees);
答案:A,B。
60.假設上面查詢中顯示的子查詢修改如下。
(SELECT distinct (department_id ) FROM employees ORDER BY department_id );
此更改的結果是什麼?(選擇最合適的答案)
- 它將對從子查詢獲取的 department_id 進行排序,並按升序顯示它們。
- 由於 ORDER BY 子句應與 GROUP BY 子句一起使用,因此它將丟擲 ORA 錯誤。
- 它將丟擲 ORA 錯誤,因為在子查詢中不能使用 ORDER BY 子句。
- 它將成功執行。
答案:C。除了 FROM 子句中的子查詢外,子查詢不能有 ORDER BY 子句。如果需要按特定順序顯示輸出,請將 ORDER BY 子句作為外層查詢的最後一個子句。
61.假設上面給出的查詢修改如下。
SELECT department_name FROM departments WHERE department_id = ANY (SELECT department_id FROM employees) ORDER BY department_id desc;
此更改的結果是什麼?(選擇最合適的答案)
- 它將對從子查詢獲取的 department_id 進行排序,並按升序顯示它們。
- 它將對從子查詢獲取的 department_id 進行排序,並按降序顯示它們。
- 它將丟擲 ORA 錯誤,因為在子查詢中不能使用 ORDER BY 子句。
- 以上都不是
答案:D。除了 FROM 子句中的子查詢外,子查詢不能有 ORDER BY 子句。如果需要按特定順序顯示輸出,請將 ORDER BY 子句作為外層查詢的最後一個子句。
62.以下哪個可以用來對子查詢中的結果進行排序?
- ORDER BY
- HAVING
- GROUP BY
- 以上所有
答案:C。預設情況下,GROUP BY 子句在子查詢中執行排序。
檢查下面的圖表,並回答接下來的問題 63 到 65。

考慮以下查詢
SELECT au_id, au_title FROM audit WHERE au_details in (SELECT au_details FROM audit WHERE au_title like 'S%') ORDER BY au_title;
63.上面給出的查詢的結果是什麼?
- 它提供所有以字母“S%”開頭的 AU_ID 和 AU_TITLE。
- 它提供所有以字母“S%”開頭的 AU_ID 和 AU_TITLE,並按標題升序排序。
- 它丟擲 ORA 錯誤
- 它返回 0 值。
答案:C。在子查詢中不能使用帶有 CLOB、BLOB、NCLOB 或陣列的列。
64.以下查詢的結果是什麼?
SELECT * FROM employees WHERE salary BETWEEN (SELECT max(salary) FROM employees WHERE department_id = 100) AND (SELECT min(salary) FROM employees where department_id = 100);
此查詢返回錯誤。錯誤的原因是什麼?
- 由於使用了 MAX 函式,因此應使用 GROUP BY 子句。
- 兩個子查詢不能在同一個外層查詢中使用相同的 department ID。
- BETWEEN 運算子不能與子查詢一起使用。
- SELECT 子句應該提到列,而不是星號 (*)。
答案:C。BETWEEN 運算子可以在子查詢中使用,但不能與子查詢一起使用。
65.關於在查詢中使用 NOT IN 與子查詢一起編寫時,哪個說法是正確的?
- NOT IN 忽略所有 NULL 值,只給出非 NULL 值。
- NOT IN 將所有 NULL 值放在最後,並首先顯示非 NULL 值。
- 如果結果集預期為 NULL 值,則不應使用 NOT IN。
- NOT IN 只是 IN 運算子的否定,可以隨意更改。
答案:C。SQL 以不同的方式處理 NULL 值,因此如果結果集可能包含 NULL 值,最好避免使用 NOT IN。
考慮以下表結構,並回答接下來的問題 66 到 72。


66.你需要找出最低薪水高於部門 10 中最高薪水的部門的名稱和 ID。以下哪個查詢將給出所需的結果。
SELECT department_id , min(salary) FROM employees GROUP BY department_id HAVING min(salary) > ( select max(salary) FROM employees where department_id = 10 )
SELECT department_id , min(salary) FROM employees GROUP BY department_id HAVING min(salary) > ANY ( select max(salary) FROM employees )
SELECT department_id , min(salary) FROM employees HAVING max(salary) < ANY ( select min(salary) FROM employees where department_id = 10 )
SELECT department_id , min(salary) FROM employees GROUP BY department_id HAVING min(salary) > ALL ( select max(salary) FROM employees where department_id = 10 )
答案:A。
67.編寫一個查詢,查詢薪水等於部門 ID 為 10 的至少一名員工薪水的員工。(選擇最佳答案)
SELECT employee_id, Salary FROM employees WHERE salary in ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary =ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary ALL ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary < ANY ( SELECT salary FROM employees where department_id = 10 )
答案:A,B。
68.你需要找出所有薪水高於部門 10 中至少一名員工薪水的員工。以下哪個查詢將給出所需的輸出?
SELECT employee_id, Salary FROM employees WHERE salary >= ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary > ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary < ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary = ALL ( SELECT salary FROM employees where department_id = 10 )
答案:B。
69.你需要找出所有薪水低於部門 10 中所有員工薪水的員工。以下哪個查詢將給出所需的輸出?
SELECT employee_id, Salary FROM employees WHERE salary > ALL ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary =ALL ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary < ALL ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary < ANY ( SELECT salary FROM employees where department_id = 10 )
答案:C。多行子查詢返回多行結果。可用於多行子查詢的運算子包括 IN、ALL、ANY 和 EXISTS。多列子查詢向外層查詢返回多列。資料列按子查詢的 SELECT 子句中列出的順序傳遞給外層查詢。
70.你需要找出所有其經理和部門與員工 ID 為 121 或 200 的員工匹配的員工。以下哪個查詢將給出所需的輸出?
SELECT employee_id, manager_id,department_id FROM employees WHERE (manager_id,department_id ) = ANY ( select manager_id, department_id FROM employees where employee_id in (121,200) )
SELECT employee_id, manager_id,department_id FROM employees WHERE (manager_id,department_id ) < ANY ( select manager_id, department_id FROM employees where employee_id in (121,200) )
SELECT employee_id, manager_id,department_id FROM employees WHERE (manager_id,department_id ) > ANY ( select manager_id, department_id FROM employees where employee_id in (121,200) )
SELECT employee_id, manager_id,department_id FROM employees WHERE (manager_id,department_id ) in ( select manager_id, department_id FROM employees where employee_id in (121,200) )
答案:A,D。多行子查詢返回多行結果。可用於多行子查詢的運算子包括 IN、ALL、ANY 和 EXISTS。多列子查詢向外層查詢返回多列。資料列按子查詢的 SELECT 子句中列出的順序傳遞給外層查詢。
71.你需要查詢員工 ID 為 200 的員工的部門名稱。以下哪個查詢是正確的?(選擇最合適的答案)
SELECT employee_id, first_name, last_name,department_id , (SELECT department_name FROM departments d, employees E WHERE d.department_id = e.department_id And employee_id = 200 ) FROM employees e
SELECT employee_id, first_name, last_name,department_id , (SELECT department_ID FROM departments d WHERE d.department_id = department_id ) FROM employees e WHERE employee_id = 200;
SELECT employee_id, first_name, last_name,department_id , (SELECT department_name FROM departments d WHERE d.department_id = e.department_id And employee_id = 200 ) FROM employees e
SELECT employee_id, first_name, last_name,department_id , (SELECT department_name FROM departments d,employee E WHERE d.department_id = e.department_id ) FROM employees e
答案:C.
72.你需要查詢職位 ID 為“SA_REP”的收入最高的員工。以下哪個查詢是正確的?(選擇最合適的答案)
SELECT job_id, employee_id, Salary FROM employees e WHERE job_id = ( SELECT distinct salary FROM employees E1 WHERE E.job_id = E1.job_id AND E.salary <= E1.salary AND job_id = 'SA_REP'
SELECT department_id , employee_id, Salary FROM employees E WHERE 1 = ( SELECT count(distinct salary) FROM employees E1 WHERE E.job_id = E1.job_id AND E.salary <= E1.salary AND job_id = 'SA_REP' )
SELECT department_id , employee_id, Salary FROM employees E WHERE 0 = ( SELECT count(distinct salary) FROM employees E1 WHERE E.job_id = E1.job_id AND E.salary = E1.salary AND job_id = 'SA_REP' )
SELECT department_id , employee_id, Salary FROM employees E WHERE 1 = ( SELECT salary FROM employees E1 WHERE E.job_id < E1.job_id AND E.salary <= E1.salary AND job_id = 'SA_REP' )
答案:B。
考慮 EMPLOYEES 表結構,如圖表所示,並回答接下來的問題 73 到 77。

73.你需要找到至少有一名員工的職位。以下哪個查詢是正確的?(選擇最合適的答案)
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT 1 FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE not exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT 1 FROM employees E1 WHERE E.job_id < E1.job_id )
答案:A。EXISTS 運算子用於檢查和匹配查詢之間的記錄。它返回布林值。相關子查詢引用外部查詢中的列,併為外部查詢中的每一行執行一次子查詢;EXISTS 運算子用於測試是否存在關係或連結。非相關子查詢先執行子查詢,然後將值傳遞給外部查詢。
74.你需要找到沒有員工的職位。以下哪個查詢是正確的?(選擇最合適的答案)
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE not exists ( SELECT 1 FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE not exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT 1 FROM employees E1 WHERE E.job_id < E1.job_id )
答案:B。NOT EXISTS 是 EXISTS 的否定運算子。
75.你需要從 EMPLOYEES 表中找到第三高的薪水。以下哪個查詢將給出所需的結果?(選擇最合適的答案)
SELECT * FROM employees E WHERE salary = (SELECT count(distinct salary ) FROM employees WHERE e.salary = salary );
SELECT * FROM employees E WHERE 1 = (SELECT count(distinct salary ) FROM employees WHERE e.salary < salary );
SELECT * FROM employees E WHERE 2 = (SELECT count(distinct salary ) FROM employees WHERE e.salary >salary );
SELECT * FROM employees E WHERE 3 = (SELECT count(distinct salary ) FROM employees WHERE e.salary <= salary );
答案:D。
76.你需要使用使用者輸入來獲取 N 的值來查詢最高薪水。以下哪個查詢將給出所需的結果?(選擇最合適的答案)
SELECT salary FROM ( SELECT rowid as user_sal FROM (SELECT distinct salary from employees ORDER BY salary desc) ) WHERE user_sal=&N ;
SELECT salary FROM ( SELECT rownum as user_sal FROM (SELECT distinct salary FROM employees GROUP BY salary ) ) WHERE user_sal <= &N ;
SELECT salary FROM ( SELECT rownum as user_sal, salary FROM (SELECT distinct salary FROM employees ORDER BY salary desc) ) WHERE user_sal=&N ;
SELECT salary FROM ( SELECT max(rownum) as user_sal, salary FROM (SELECT distinct salary FROM employees ORDER BY salary desc) ) WHERE user_sal=&N ;
答案:C。ROWNUM 是用於查詢第 n 個順序結果的偽列。
77.如果在上述查詢(第76題的選項C)中提供給&N變數的值與任何行都不匹配,將會發生什麼?(選擇最佳答案)
- 語句將丟擲一個ORA錯誤
- 語句將返回表中的所有行
- 語句將返回NULL作為輸出結果。
- 語句將不返回任何結果行。
答案:D。
78.子查詢可以巢狀的最大級別是多少?
- 255
- 100
- 2
- 16
答案:A。
79.關於SQL查詢中EXISTS運算子與子查詢的關係,哪個說法是正確的?
- 子查詢中選擇的列很重要
- 內部查詢應該返回行,任何結果都很重要,而不是選擇的列。
- A 和 B
- A和B都不對
答案:B。
80.關於用於子查詢的ANY運算子,哪個說法是正確的?
- 返回與列表/子查詢中所有值匹配的行
- 返回與列表/子查詢中前5個值匹配的行
- 返回與列表/子查詢中任何值匹配的行
- 當所有行都與列表/子查詢中的值匹配時,返回0值
答案:C.
81.關於用於子查詢的ALL運算子,哪個說法最準確?(選擇最合適的答案。)
- 返回與列表/子查詢中所有值匹配的行
- 返回僅與列表/子查詢中某些值匹配的行
- 僅當所有值都與列表/子查詢中匹配時才返回行
- 以上所有
答案:C. '> ALL' 大於子查詢返回的最高值。'< ALL' 小於子查詢返回的最低值。'< ANY' 小於子查詢返回的最高值。'> ANY' 大於子查詢返回的最低值。'= ANY' 等於子查詢返回的任何值(與IN相同)。'[NOT] EXISTS' 行必須與子查詢中的值匹配。
82.關於在Oracle的INSERT語句中使用子查詢,哪個說法是正確的?
- 它們可以在INSERT子句中不受任何限制地使用
- 它們只能在INSERT子句中用於數值
- 子查詢的SELECT列表應該與INSERT語句的列列表相同。
- 以上都不是
答案:C.
查看下錶結構,並回答接下來的第83到86題。
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)
83.你需要查詢所有在2013年6月被聘用擔任職位ID為'SA_REP'的員工的詳細資訊。以下哪個查詢將給出所需的結果?(考慮給出的表結構)
SELECT first_name FROM employees WHERE employee_id = ( SELECT employee_id FROM employees WHERE to_char(hiredate, 'MM/YYYY')= '02/1981' AND job_id = 'SA_REP' );
SELECT first_name FROM employees WHERE employee_id = ANY ( SELECT employee_id FROM employees WHERE to_char(hiredate, 'MM/YYYY')= '02/1981' AND job_id = 'SA_REP' );
SELECT first_name FROM employees WHERE employee_id ANY ( SELECT employee_id FROM employees WHERE to_char(hiredate, 'MM/YYYY')= '02/1981' AND job_id = 'SA_REP' );
SELECT first_name FROM employees WHERE employee_id exists ( SELECT employee_id FROM employees WHERE to_char(hiredate, 'MM/YYYY')= '02/1981' AND job_id = 'SA_REP' );
答案:B。
84.以下哪些語句是等價的?
SELECT employee_id , salary FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE department_id=100);
SELECT employee_id , salary FROM employees WHERE salary < (SELECT min(salary) FROM employees WHERE department_id=100);
SELECT employee_id FROM employees WHERE salary not >= ANY (SELECT salary FROM employees WHERE department_id=100);
- 以上都不是
答案:A,B。
85.考慮以下兩個查詢
查詢1SELECT first_name FROM employees e join departments d ON e.department_id = d.department_id WHERE department_name='ACCOUNTS';查詢2
SELECT first_name FROM employees e WHERE department_id = ANY (SELECT department_id FROM departments d WHERE department_name='ACCOUNTS');
關於這兩個語句,可以說什麼?
- 兩個查詢都應該生成相同的結果。
- 兩個查詢都將丟擲錯誤。
- 如果有兩個部門名稱相同,則兩個查詢都將失敗。
- 即使存在多個名為'ACCOUNTS'的部門,兩個查詢也將成功執行。
答案:A、D。
86.你需要顯示部門100中擁有最高工資的所有員工。你執行以下查詢。
SELECT E.first_name, E.last_name , E.salary FROM employees E WHERE E.salary > ALL (SELECT E1.salary FROM employees E1 WHERE E.department_id =E1.department_id AND E.department_id = 100);
上述查詢的結果是什麼?
- 它成功執行並給出所需的結果
- 它成功執行,但沒有給出所需的輸出
- 執行時會丟擲ORA錯誤
- 當>ALL被替換為>=ALL時,它成功執行並給出所需的結果
答案:B, D. >ALL不會給出所需的結果,因為可能有兩名員工擁有相同的工資,並且是部門100中收入最高的員工
考慮展品中顯示的表結構,並回答接下來的第87到89題


87.你需要按反向字母順序獲取部門ID = 100中所有員工的姓名(firstName),並且這些員工在職位ID = 'SA_REP'中擁有最高工資。以下哪個查詢將給出所需的輸出?(選擇最合適的輸出)
SELECT E.first_name, job_id , salary FROM employees E WHERE salary = (SELECT max(salary) FROM employees E1 WHERE E1.department_id = 100 GROUP BY job_id ) AND job_id = 'SA_REP' ORDER BY first_name;
SELECT E.first_name, job_id , salary FROM employees E WHERE salary in (SELECT max(salary) FROM employees E1 where E1.department_id = 100) ORDER BY first_name;
SELECT E.first_name, job_id , salary FROM employees E WHERE salary IN (SELECT max(salary) FROM employees E1 where job_id = 'SA_REP' GROUP BY job_id ) AND WHERE E.department_id = 100 ORDER BY first_name desc;
SELECT E.first_name, job_id , salary FROM employees E WHERE salary IN (SELECT max(salary) FROM employees E1 WHERE E1.department_id = 100 GROUP BY job_id ) ORDER BY first_name ;
答案:C.
88.在上文中給出的查詢中(選項C是正確的答案),你需要顯示所有職位ID為'SA_REP'並且在部門100中擁有最高工資的員工。以下哪個查詢將給出所需的輸出?
SELECT E.first_name, job_id , salary FROM employees E WHERE salary IN (SELECT max(salary) FROM employees E1 WHERE E1.department_id = 100 GROUP BY job_id ) AND job_id = 'SA_REP' ORDER BY first_name;
SELECT E.first_name, job_id , salary FROM employees E WHERE salary in (SELECT max(salary) FROM employees E1 WHERE E1.department_id = 100) ORDER BY first_name;
SELECT E.first_name, job_id , salary FROM employees E WHERE salary in (SELECT max(salary) FROM employees E1 WHERE job_id = 'SA_REP' GROUP BY job_id ) And WHERE E.department_id = 100 ORDER BY first_name desc;
SELECT E.first_name, job_id , salary FROM employees E WHERE salary in (SELECT max(salary) FROM employees E1 WHERE E1.department_id = 100 GROUP BY job_id ) ORDER BY first_name ;
答案:A。
89.選擇一個查詢,該查詢將提供最高工資和最高佣金百分比。如果最高薪員工獲得最高佣金百分比,則該查詢還應提供支付的最高佣金百分比。
SELECT employee_id, max(salary), max(commission_pct ) FROM employees E GROUP BY salary, commission_pct ;
SELECT employee_id, max(salary), max(commission_pct ) FROM employees E GROUP BY salary;
SELECT employee_id, max(salary) FROM employees E GROUP BY salary, commission_pct HAVING max(commission_pct ) = 100;
SELECT employee_id, (SELECT max(salary) FROM employees) * (SELECT max(commission_pct ) FROM employees) FROM DUAL;
答案:D。單行子查詢也可以巢狀在外層查詢的 SELECT 子句中。在這種情況下,子查詢返回的值可用於外層查詢生成的每一行輸出。通常,此技術用於使用子查詢生成的數值執行計算。
90.關於在SQL語句的SELECT子句中使用的子查詢,哪個說法是正確的?
- 這些子查詢在各個方面都與在FROM或WHERE子句中使用的子查詢相同
- 這些子查詢必須是單行子查詢
- 在編寫此類子查詢時,我們可以使用多行運算子
- 以上都不是
答案:B。
91.以下查詢的結果是什麼?(考慮給出的表結構)
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 sysdate, (SELECT max(salary) FROM employees GROUP BY department_id ) FROM DUAL;
- 它給出系統日期和每個部門的最高工資
- 它給出所有部門的最高工資
- 它丟擲 ORA 錯誤
- 它成功執行,但返回0行
答案:C. 不能在SQL語句的SELECT子句中使用多行子查詢。只能在外部查詢的SELECT子句中巢狀單行子查詢。
檢視給定的表結構。考慮以下查詢,並回答接下來的第92到95題
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 salary FROM employees WHERE salary > ALL (10, 20, 30);
92.以下哪些查詢與上述查詢等效?
SELECT salary FROM employees WHERE salary >10 or salary > 20 and salary >30;
SELECT salary FROM employees WHERE salary <10 and salary < 20 and salary <30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 and salary >30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 or salary < 30;
答案:C. 問題以簡化方式顯示了ALL子句,在後面跟著一個列表。
93.如果在上文中查詢中,列表(10,20,30)被子查詢替換,則以下哪個查詢將為部門號100給出所需的輸出?
SELECT E.salary FROM employees E WHERE E.salary > (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >ALL (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary = (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >= (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
答案:B. 問題以簡化方式顯示了ALL子句,在後面跟著一個子查詢。
94.關於上面的第14題,如果必須將ALL替換為ANY,則以下哪個查詢將是等效的?
SELECT E.salary FROM employees E WHERE NOT EXISTS (E.salary =ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary =ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE NOT ( E.salary <= ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100));
答案:D. 在使用'<= ANY'時使用的NOT運算子用於對子查詢返回的結果進行否定。
95.關於第94題,如果不使用ANY運算子,則以下哪個查詢是正確的?
SELECT E.salary FROM employees E WHERE NOT EXISTS (E.salary = ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE NOT EXISTS (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100 And E.salary <= E1.salary);
- A或B
- 以上都不是
答案:B. 相關子查詢引用外部查詢中的列,併為外部查詢中的每一行執行一次子查詢;EXISTS運算子用於測試是否存在關係或連結。非相關子查詢先執行子查詢,然後將值傳遞給外部查詢。
檢視給定的表結構。考慮以下查詢,並回答接下來的第96到98題
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 salary FROM employees WHERE salary > ANY (10, 20, 30);
96.以下哪些查詢與上述查詢等效?
SELECT salary FROM employees WHERE salary >10 or salary > 20 and or >30;
SELECT salary FROM employees WHERE salary <10 and salary < 20 and salary <30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 or salary >30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 or salary < 30;
答案:A. 問題以簡化方式顯示了ANY子句,在後面跟著一個列表。
97.在上文中查詢中,如果列表(10, 20, 30)被子查詢替換,則以下哪個查詢將為部門號100給出所需的輸出?
SELECT E.salary FROM employees E WHERE E.salary > (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary = (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >= (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
答案:B. 問題以簡化方式顯示了ANY子句,在後面跟著一個子查詢。
98.關於上面的第97題,如果刪除ANY,則以下哪個查詢將是等效的?
SELECT E.salary FROM employees E WHERE NOT EXISTS (E.salary =ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE EXISTS (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100 And E.salary >E1.salary);
SELECT E.salary FROM employees E WHERE EXISTS (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100 );
SELECT E.salary FROM employees E WHERE IN (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
答案:B. EXISTS運算子可以替代ANY運算子。相關子查詢引用外部查詢中的列,併為外部查詢中的每一行執行一次子查詢;EXISTS運算子用於測試是否存在關係或連結。
99.檢視給定的表結構。如果提到的子查詢返回0行,將生成多少行?
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 E.salary FROM employees E WHERE E.salary > ANY ( select E1.salary FROM employees E1 where E1.department_id = 100);
- 1行
- 0行
- A或B
- 以上都不是
答案:B. 如果子查詢返回零行,則'> ANY'條件將評估為FALSE,因此不返回任何行。
100.如果滿足以下哪個條件,則必須將子查詢放在外部查詢的HAVING子句中?
- 內部查詢需要引用返回給外部查詢的值。
- 內部查詢返回的值需要與外部查詢中的分組資料進行比較。
- 子查詢返回多個值給外部查詢。
- 以上都不對。子查詢不能用於外部查詢的HAVING子句中。
答案:B. 當需要根據某些條件限制查詢的組結果時,使用HAVING子句。如果子查詢的結果必須與組函式進行比較,則必須將內部查詢巢狀在外部查詢的HAVING子句中。