SQL - 使用分組函式的問題



1. 以下哪個不是GROUP BY函式?

  1. MAX
  2. MIN
  3. NVL
  4. AVG

答案:C. NVL是一個通用函式,用於為NULL值提供替代值。MAX、MIN和AVG函式可以用作GROUP BY函式。

2. 以下哪些函式可以在SELECT查詢中不用GROUP BY子句?

  1. COUNT
  2. MAX
  3. MIN
  4. AVG

答案:A,B,C,D.所有列出的分組函式都可以在查詢中使用,前提是SELECT查詢中沒有選擇其他列。

3. 以下哪個SELECT查詢返回薪資最高的員工所在部門編號?(考慮給定的表結構)

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. SELECT department_id , max(salary ) FROM employees ;
  2. SELECT department_id , max(salary ) FROM employees  GROUP BY department_id ;
  3. SELECT max(salary ) FROM employees  GROUP BY department_id ;
  4. SELECT max(salary ) FROM employees ;

答案:B.MAX函式可以用來返回每個部門中最高的薪資,其中每個組由一個部門構成。

4. 關於COUNT函式,以下哪些說法是正確的?

  1. COUNT函式計算行數
  2. COUNT(*)函式計算包含重複值和NULL值的行數
  3. COUNT(DISTINCT)函式計算不同行數
  4. COUNT(*)等價於COUNT(ALL)

答案:B.COUNT(*)計算行數,包括重複值和NULL值。使用DISTINCT和ALL關鍵字來限制重複值和NULL值。

5. GROUP BY函式接受哪些合適的資料型別?

  1. 巢狀表
  2. NUMBER
  3. CLOB
  4. DATE

答案:B.帶有引數的函式的資料型別可以是CHAR、VARCHAR2、NUMBER或DATE。

6. 表T_COUNT有12個數字值:1, 2, 3, 32, 1, 1, null, 24, 12, null, 32, null。預測以下查詢的輸出。

SELECT COUNT (*) FROM t_count;
  1. 12
  2. 6
  3. 9
  4. 丟擲異常,因為COUNT函式不適用於NULL值

答案:A.COUNT(*)計算行數,包括重複值和NULL值。使用DISTINCT和ALL關鍵字來限制重複值和NULL值。

7. 表T_COUNT有12個數字值:1, 2, 3, 32, 1, 1, null, 24, 12, null, 32, null。預測以下查詢的輸出。

SELECT COUNT (num) FROM t_count;
  1. 12
  2. 6
  3. 9
  4. 丟擲異常,因為COUNT函式不適用於NULL值

答案:C.COUNT(列)忽略NULL值,但計算重複值。

8. 表T_COUNT有12個數字值:1, 2, 3, 32, 1, 1, null, 24, 12, null, 32, null。預測以下查詢的輸出。

SELECT COUNT (ALL num) FROM t_count;
  1. 12
  2. 6
  3. 9
  4. 丟擲異常,因為COUNT函式不適用於NULL值

答案:C.COUNT(ALL 列)忽略NULL值,但計算重複值。

9. 表T_COUNT有12個數字值:1, 2, 3, 32, 1, 1, null, 24, 12, null, 32, null。預測以下查詢的輸出。

SELECT COUNT (DISTINCT num) FROM t_count;
  1. 12
  2. 6
  3. 9
  4. 丟擲異常,因為COUNT函式不適用於NULL值

答案:B.COUNT(DISTINCT 列)計算不同的非NULL值。

10. 在SQL*Plus中執行以下查詢時會發生什麼?

SELECT COUNT() FROM dual;
  1. 成功執行並返回無輸出
  2. 成功執行並返回輸出為'1'
  3. 丟擲異常“ORA-00909:無效的引數個數”
  4. 丟擲異常“ORA-00904: “COUNT”:無效的識別符號”,因為COUNT函式不適用於DUAL表

答案:C.COUNT函式需要至少一個引數,該引數可以是帶有[ALL | DISTINCT]修飾符的列或'*'。

11. 以下是關於SQL中VARIANCE函式的一些語句。

i. 該函式接受多個數值輸入並返回所有值的方差

ii. 該函式接受一個數字列並返回所有列值的方差,包括NULL值

iii. 該函式接受一個數字列並返回所有列值的方差,不包括NULL值

從以下選項中選擇正確的組合。

  1. i和iii
  2. i和ii
  3. ii
  4. iii

答案:C.VARIANCE函式接受單個數值引數作為列名,並返回所有列值的方差,包括NULL值。

12. 以下哪個不是SQL中的GROUP BY擴充套件?

  1. GROUP BY
  2. GROUPING SETS
  3. CUBE
  4. ROLLUP

答案:A.GROUPING SETS操作可以用來用單個查詢執行多個GROUP BY聚合。

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 department_id , SUM(salary )
FROM employees 
GROUP BY department_id ;
  1. SUM是一個分組函式,因為它處理在某個部門工作的員工組
  2. SUM是一個聚合函式,因為它為每組資料生成一個結果
  3. SUM是一個單行函式,因為它為一個組(即部門)返回單個值
  4. SUM是一個GROUP BY擴充套件函式,因為它使用GROUP BY子句邏輯地分組部門

答案:A.SUM是一個分組函式,它計算在某個部門工作的員工組的薪資總和。

14. 使用分組函式基於聚合結果過濾查詢輸出使用哪個子句?

  1. WHERE
  2. LIMIT
  3. GROUP WHERE
  4. HAVING

答案:D.HAVING子句用於限制組結果。使用HAVING子句指定要顯示的組,從而基於聚合資訊進一步限制組。HAVING子句可以放在GROUP BY子句之前,但建議先放置GROUP BY子句,因為它更符合邏輯。在HAVING子句應用於SELECT列表中的組之前,會先形成組並計算分組函式。

15. 檢查給定的表結構並預測以下查詢的結果。

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 count(*)
FROM employees 
WHERE comm = NULL;
  1. 查詢返回沒有佣金的員工人數
  2. 查詢丟擲錯誤,因為在搜尋NULL值時不能使用等號
  3. 查詢返回佣金為NULL值的部門中的員工人數
  4. 查詢丟擲錯誤,因為查詢中缺少GROUP BY子句

答案:B.使用WHERE條件排除NULL值是指示查詢忽略NULL值的一種方法。但此處IS NULL運算子的用法是錯誤的。條件應該是'WHERE comm IS NULL'。

16. 關於分組函式,以下哪項陳述是正確的?

  1. MIN函式只能用於數值資料。
  2. MAX函式只能用於日期值。
  3. AVG函式只能用於數值資料。
  4. SUM函式不能作為巢狀函式的一部分。

答案:C.AVG函式只能用於數值。其他有此限制的函式包括SUM、STDDEV和VARIANCE。

17. 以下哪個是有效的SELECT語句?

  1. SELECT AVG(retail-cost) FROM books GROUP BY category;
  2. SELECT category, AVG(retail-cost) FROM books;
  3. SELECT category, AVG(retail-cost) FROM books WHERE AVG(retail-cost) > 8.56 GROUP BY category;
  4. SELECT category, AVG(retail-cost) Profit FROM books GROUP BY category HAVING profit > 8.56;

答案:A.列別名不能用於GROUP BY或HAVING子句。

18. 以下哪個陳述是正確的?

  1. 如果函式未列在SELECT子句中,則WHERE子句只能包含分組函式。
  2. 分組函式不能用於SELECT、FROM或WHERE子句。
  3. HAVING子句總是先於WHERE子句處理。
  4. GROUP BY子句總是先於HAVING子句處理。

答案:D.儘管Oracle如果HAVING子句在GROUP BY子句之前也不會報錯,但它只在GROUP BY子句處理完畢且組準備過濾後才處理。

19. 以下哪個不是有效的SQL語句?

  1. SELECT MIN(pubdate) FROM books GROUP BY category HAVING pubid = 4;
  2. SELECT MIN(pubdate) FROM books WHERE category = 'COOKING';
  3. SELECT COUNT(*) FROM orders WHERE customer# = 1005;
  4. SELECT MAX(COUNT(customer#)) FROM orders GROUP BY customer#;

答案:A。

20. 以下哪個陳述是正確的?

  1. COUNT函式可以用來確定有多少行包含NULL值。
  2. 除非SELECT子句中包含ALL關鍵字,否則分組函式只包含不同的值。
  3. WHERE子句限制處理哪些行。
  4. HAVING子句確定在查詢結果中顯示哪些組。

答案:C,D.WHERE子句在分組和處理行之前限制行,而HAVING子句限制組。

21. 以下哪個是有效的SQL語句?

  1. SELECT customer#, order#, MAX(shipdate-orderdate) FROM orders GROUP BY customer# WHERE customer# = 1001;
  2. SELECT customer#, COUNT(order#) FROM orders GROUP BY customer#;
  3. SELECT customer#, COUNT(order#) FROM orders GROUP BY COUNT(order#);
  4. SELECT customer#, COUNT(order#) FROM orders GROUP BY order#;

答案:B.GROUP BY子句必須包含所有列,除了在分組函式中使用的列。

22. 以下哪個SELECT語句只列出利潤最大的圖書?

  1. SELECT title, MAX(retail-cost) FROM books GROUP BY title;
  2. SELECT title, MAX(retail-cost) FROM books GROUP BY title HAVING MAX(retail-cost);
  3. SELECT title, MAX(retail-cost) FROM books;
  4. 以上都不是

答案:A。

23. 以下哪個/哪些陳述是正確的?

1. 分組函式可以巢狀在分組函式內。

2. 分組函式可以巢狀在單行函式內。

3. 單行函式可以巢狀在分組函式內。

  1. 1
  2. 2
  3. 3
  4. 1和3

答案:A,B,C.分組函式最多隻能巢狀兩層。分組函式可以巢狀在單行函式內(AVG巢狀在TO_CHAR函式內)。此外,單行函式可以巢狀在分組函式內。

24. 以下哪個函式用於計算指定列中儲存的總值?

  1. COUNT
  2. ADD
  3. TOTAL
  4. SUM

答案:D.SUM函式用於獲取數值的加和。

25. 以下哪個SELECT語句列出家庭類所有圖書的最高零售價?

  1. SELECT MAX(retail) FROM books WHERE category = 'FAMILY';
  2. SELECT MAX(retail) FROM books HAVING category = 'FAMILY';
  3. SELECT retail FROM books WHERE category = 'FAMILY' HAVING MAX(retail);
  4. 以上都不是

答案:A.由於必須在分組之前限制類別FAMILY,因此必須使用WHERE子句而不是HAVING子句來過濾錶行。

26. 以下哪些函式可用於將NULL值包含在計算中?

  1. SUM
  2. NVL
  3. MAX
  4. MIN

答案:B.NVL是一個通用函式,用於為NULL值提供替代值。它在使用AVG、STDDEV和VARIANCE分組函式進行算術計算時確實可以發揮作用。

27. 以下哪個不是有效的陳述?

  1. 必須在分組函式中輸入ALL關鍵字才能包含所有重複值。
  2. AVG函式可用於查詢兩個日期之間計算出的平均差。
  3. MIN和MAX函式可用於VARCHAR2列。
  4. 以上都是

答案:A.ALL關鍵字計算重複值,但忽略NULL值。使用'*'和列名規範也會包含重複值。

28. 以下哪個SQL語句確定有多少客戶是由其他客戶推薦的?

  1. SELECT customer#, SUM(referred) FROM customers GROUP BY customer#;
  2. SELECT COUNT(referred) FROM customers;
  3. SELECT COUNT(*) FROM customers;
  4. SELECT COUNT(*) FROM customers WHERE referred IS NULL;

答案:B. 將所有客戶視為一個組,COUNT(referred) 只計算那些被他人推薦的客戶。COUNT(referred) 會忽略該列的 NULL 值。

29. 確定以下 SELECT 語句中子句的正確執行順序。

1. SELECT

2. FROM

3. WHERE

4. GROUP BY

5. HAVING

6. ORDER BY

  1. 2-3-4-5-1-6
  2. 1-2-3-4-5-6
  3. 6-5-4-3-2-1
  4. 5-4-2-3-1-6

答案:A. 處理順序從 FROM 子句開始,獲取表名,然後使用 WHERE 子句限制行,使用 GROUP BY 子句對它們進行分組,使用 HAVING 子句限制組。ORDER BY 子句是最後處理的,用於對最終資料集進行排序。

30. 以下哪個子句用於基於一列或多列對一組行進行分組?

  1. HAVING
  2. WHERE
  3. GROUP BY
  4. GROUPING

答案:C. GROUP BY 子句根據指定的列列表形成資料的組。

31. 以下哪些分組函式可用於總體方差和總體標準差問題?

  1. VAR_POP
  2. STDDEV_POP
  3. VARIANCE
  4. STDDEV_SASMP

答案:A, B。

32. 選擇 SELECT 查詢中可以出現分組函式的位置。

  1. SELECT 語句
  2. WHERE 子句
  3. ORDER BY 子句
  4. GROUP BY 子句

答案:A, C, D. 分組函式可以出現在 SELECT、ORDER BY 和 HAVING 子句中。如果在 WHERE 或 GROUP BY 子句中使用分組函式,Oracle 會引發異常。

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)
  1. SELECT department_id , MIN (salary ) from EMPLOYEES ;
  2. SELECT department_id , MIN (salary ) from EMPLOYEES  GROUP BY department_id ;
  3. SELECT department_id , MIN (salary ) from EMPLOYEES  GROUP BY salary ;
  4. SELECT department_id , MIN (salary ) from EMPLOYEES  GROUP BY employee_id ;

答案:B. MIN 函式返回由部門形成的組中的最低工資。

34. 檢查 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 COUNT(*), COUNT(all comm) FROM employees ;
  1. 它丟擲錯誤,因為查詢中只能使用一個聚合函式。
  2. 它丟擲錯誤,因為缺少 GROUP BY 子句。
  3. 它成功執行並返回兩個相同的值。
  4. 它成功執行,其中 COUNT(*) 包括 NULL 值,而 COUNT(all comm) 排除 NULL 值。

答案:D。

35. 關於分組函式,以下哪些說法是正確的?

  1. 你可以在 SELECT 語句的任何子句中使用分組函式。
  2. 你只能在 SELECT 子句的列列表和 SELECT 語句的 WHERE 子句中使用分組函式。
  3. 透過對單行列進行分組,你可以在 SELECT 子句的列列表中將單行列與分組函式混合使用。
  4. 你可以將列名、表示式、常量或函式作為引數傳遞給分組函式。

答案:C. 分組函式最多隻能巢狀兩層。分組函式可以巢狀在單行函式中(嵌入在 TO_CHAR 函式中的 AVG)。此外,單行函式可以巢狀在分組函式中。

36. 檢查給定的 EMPLOYEES 表的結構。你希望透過執行以下 SQL 語句建立一個“emp_dept_sales”檢視。

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_dept_sales
AS
SELECT d.department_name , sum(e.salary )
FROM employees  e, departments  d
where e.department_id =d.department_id 
GROUP by d.department_name ;

關於上述語句的執行,哪個語句是正確的?

  1. 檢視將被建立,你可以在檢視上執行 DML 操作
  2. 檢視不會被建立,因為不允許使用連線語句建立檢視
  3. 檢視不會被建立,因為不允許使用 GROUP BY 子句建立檢視
  4. 檢視將被建立,但不允許在檢視上執行 DML 操作

答案:D. 在檢視上執行 DML 操作的規則。如果檢視包含分組函式或 GROUP BY 子句或 DISTINCT 關鍵字,則無法透過檢視新增資料。偽列 ROWNUM 關鍵字 基表中未被檢視選擇的非空列。由表示式定義的列。

37. 關於檢視,以下哪些陳述是正確的?

  1. 定義檢視的子查詢不能包含 GROUP BY 子句
  2. 使用包含 DISTINCT 關鍵字的子查詢建立的檢視可以更新
  3. 可以在使用包含表所有非空列的子查詢建立的檢視上執行資料操作語言 (DML) 操作
  4. 使用包含偽列 ROWNUM 關鍵字的子查詢建立的檢視無法更新

答案:C, D. 在檢視上執行 DML 操作的規則。如果檢視包含分組函式或 GROUP BY 子句或 DISTINCT 關鍵字,則無法透過檢視新增資料。偽列 ROWNUM 關鍵字 基表中未被檢視選擇的非空列。由表示式定義的列。

38. 檢查給定的表結構。

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 查詢中的哪個子句會生成錯誤?

SELECT department_id , avg(salary )
FROM departments 
WHERE upper(job) in ('SALES','CLERK')
GROUP BY job
ORDER BY department_id ;
  1. WHERE
  2. SELECT
  3. ORDER BY
  4. GROUP BY

答案:D. GROUP BY 子句必須包含 SELECT 語句中出現的所有列。它會引發錯誤,因為 JOB 不是選定的列。它應該使用 DEPARTMENT_ID 代替 JOB。

39. 檢查給定的表結構。

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 查詢將顯示每個職位類別獲得的最高和最低工資?

  1. SELECT job, MAX(salary ), MIN (salary ) FROM employees  GROUP BY department_id ;
  2. SELECT job, MAX(salary ), MIN (salary ) FROM employees  GROUP BY job;
  3. SELECT job, MAX(salary ), MIN (salary ) FROM employees ;
  4. 在 SELECT 語句中不能一起使用兩個聚合函式。

答案:B. SELECT 語句中可以出現多個分組函式。

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)

檢查以下查詢中的錯誤。

SELECT department_id 
FROM employees 
WHERE hiredate > '01-JAN-1985'
AND COUNT(*) > 2
GROUP by department_id 
HAVING SUM (salary ) > 1000;
  1. 它成功執行並生成所需的結果。
  2. 它產生錯誤,因為 COUNT(*) 也應該在 SELECT 子句中指定。
  3. 它成功執行,但沒有產生結果,因為應該使用 COUNT(prod_id) 代替 COUNT(*)。
  4. 它產生錯誤,因為 COUNT(*) 應該只在 HAVING 子句中,而不是在 WHERE 子句中。

答案:D. 分組函式不能在 WHERE 子句中使用。它們可以出現在 SELECT、HAVING 和 ORDER BY 子句中。

41. 檢查給定的表結構。

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 job, COUNT(employee_id ),sum(salary )
FROM employees 
GROUP BY job
HAVING SUM (salary ) > 5000;
  1. 它成功執行並列出每個職位類別下員工的數量,但忽略 HAVING 子句,因為“salary”不在 GROUP BY 子句中。
  2. 它丟擲錯誤,因為 HAVING 子句無效。
  3. 它丟擲錯誤,因為“salary”未包含在 GROUP BY 子句中。
  4. 它成功執行並列出每個類別下工資總和大於 5000 的員工數量。

答案:D. HAVING 子句限制組結果。COUNT 函式用於計數,而 SUM 函式用於新增數值。

42. 在包含 NULL 值的列上使用分組函式的情況如何?

  1. 列上的分組函式忽略 NULL 值。
  2. 返回日期的列上的分組函式包括 NULL 值。
  3. 返回數字的列上的分組函式包括 NULL 值。
  4. 列上的分組函式不能精確地用於包含 NULL 值的列。

答案:A. 除 COUNT 函式外,所有分組函式都忽略 NULL 值。

43. 關於在子查詢中使用 GROUP BY 列的以下哪些陳述是正確的?

  1. 子查詢可以包含 GROUP BY 和 ORDER BY 子句。
  2. 子查詢不能包含 GROUP BY 和 ORDER BY 子句。
  3. 子查詢可以包含 ORDER BY 但不能包含 GROUP BY 子句。
  4. 子查詢不能包含 ORDER BY 但可以包含 GROUP BY 子句。

答案:A. 與主查詢一樣,子查詢也可以包含 GROUP BY 和 ORDER BY 子句。

檢查給定的表結構並回答接下來的問題 44 到 49。

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)

44. 預測以下查詢的結果

SELECT avg(max(salary ))
FROM employees 
GROUP BY department_id 
HAVING avg(max(salary ))>100;
  1. 它成功執行。
  2. 它給出錯誤,因為 HAVING 子句無效。
  3. 它給出錯誤,因為 GROUP BY 表示式無效。
  4. 它給出錯誤,因為聚合函式不能巢狀在 SELECT 語句中。

答案:B. HAVING 子句不允許巢狀聚合函式。

45. 預測以下查詢的輸出

SELECT avg(salary ), department_id 
FROM employees 
GROUP BY department_id ;
  1. 它給出錯誤,因為聚合函式不能出現在 SELECT 子句之後。
  2. 它給出錯誤,因為 GROUP BY 子句無效。
  3. 它執行時沒有錯誤,但沒有產生輸出。
  4. 它成功執行並給出每個部門的平均工資。

答案:D. 在 SELECT 查詢中,分組函式可以在任何順序(在 group by 列之前或之後)使用。

46. 預測以下查詢的輸出

SELECT lower(job),avg(salary )
FROM employees 
GROUP BY upper(job);
  1. 它成功執行並以小寫顯示“job”。
  2. 它成功執行,但以原始大小寫顯示“job”。
  3. 它丟擲錯誤,因為單行函式和聚合函式不能一起使用。
  4. 它丟擲錯誤,因為 SELECT 列表中的大小寫轉換與 GROUP BY 子句的大小寫轉換不匹配。

答案:D. LOWER 函式是一個單行函式,必須在 GROUP BY 子句中指定,才能基於 EMPLOYEES 資料進行分組。

47. 以下哪個查詢成功執行?

  1. SELECT employee_id , COUNT(hiredate-sysdate) FROM employees ;
  2. SELECT AVG(salary ), MAX(salary ) FROM employees ;
  3. SELECT AVG(salary ), MAX(salary ) FROM employees  GROUP BY department_id ;
  4. SELECT AVG(hiredate) FROM employees ;

答案:B, C. 第一個查詢對整個 EMPLOYEES 資料進行操作,而第二個查詢對部門組的資料進行處理。

48. 確定以下 SELECT 語句中的錯誤。

SELECT department_id , AVG (salary )
FROM employees 
GROUP BY department_id 
HAVING department_id  > 10;
  1. 它成功執行並顯示大於 10 的部門的平均工資。
  2. 它丟擲錯誤,因為非聚合列不能在 HAVING 子句中使用。
  3. 它成功執行,但顯示部門的錯誤結果。
  4. 它丟擲錯誤,因為 HAVING 子句必須放在 GROUP BY 子句之前。

答案:A. GROUP BY 表示式可以在 HAVING 子句中使用,以從最終資料集中過濾掉組。

49. 預測以下查詢的輸出

SELECT department_id , AVG (salary )
FROM employees 
GROUP BY department_id 
HAVING (department_id >10 and AVG(salary )>2000);
  1. 它丟擲錯誤,因為在 HAVING 子句中不能給出多個條件。
  2. 它丟擲錯誤,因為非聚合列不能在 HAVING 子句中使用。
  3. 它成功執行並顯示大於 10 且大於 2000 的部門的平均工資。
  4. 它成功執行,但沒有顯示結果。

答案:C. HAVING 子句可以使用 AND 或 OR 運算子連線的多個條件來過濾組。

50. 以下哪些分組函式可以與 DATE 值一起使用?

  1. AVG
  2. MIN
  3. SUM
  4. COUNT

答案:B, D. 分組函式 AVG 和 SUM 只能與數值資料一起使用。

51. 以下哪些陳述是正確的?

  1. AVG 和 SUM 只能與數值資料型別一起使用。
  2. STDDEV 和 VARIANCE 只能與數值資料型別一起使用。
  3. MAX 可以與 LONG 資料型別一起使用。
  4. MAX 和 MIN 函式不能用於 LOB 或 LONG 資料型別。

答案:A,B,D。 AVG、SUM、VARIANCE 和 STDDEV 等分組函式只能用於數值資料。所有分組函式都不能用於 LONG 資料型別。

52. 檢視給定的表結構。

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_id , avg(salary ), count(hiredate)
FROM employees 
GROUP BY department_id ;
  1. 單個 SELECT 查詢中不能使用多個聚合函式
  2. GROUP BY 子句無效
  3. COUNT 函式不能用於 DATE 值
  4. 沒有錯誤,可以成功執行

答案:D。

53. 以下哪個分組函式可以用於 LOB 資料型別?

  1. MAX
  2. MIN
  3. COUNT
  4. 沒有任何一個

答案:D。 任何聚合函式都不能用於 LOB 資料型別。

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)

預測下面兩個查詢的輸出結果

查詢 - 1

SELECT avg(comm)
FROM employees ;

查詢 - 2

SELECT avg(nvl(comm,0))
FROM employees ;
  1. 兩個查詢產生相同的結果
  2. 查詢 1 和查詢 2 產生不同的結果,因為查詢 1 考慮了 COMM 的 NULL 值,而查詢 2 將 COMM 的 NULL 值替換為零
  3. 查詢 1 產生錯誤,因為 COMM 包含 NULL 值
  4. 查詢 2 產生錯誤,因為 NVL 不能巢狀在聚合函式中。

答案:B。 AVG 函式在計算數值資料的平均值時會忽略 NULL 值。AVG(column) 只會計算非 NULL 值的平均值。但是,如果使用 NVL 將 NULL 值替換為零,則所有值都將被考慮。

55. 選擇關於 GROUP BY 子句的正確語句。

  1. 可以在 GROUP BY 子句中使用列別名。
  2. GROUP BY 列必須出現在 SELECT 子句中。
  3. GROUP BY 子句必須與 HAVING 子句一起出現在 SELECT 查詢中。
  4. GROUP BY 子句必須出現在 SELECT 查詢中的 WHERE 子句之後。

答案:D。 根據處理順序,GROUP BY 子句必須出現在 SELECT 查詢中的 WHERE 子句之後。

56. 檢視給定的表結構。

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_id ,avg(salary )
FROM employees 
GROUP BY department_id , job
ORDER BY department_id ;
  1. 它會丟擲錯誤,因為 GROUP BY 列列表與 SELECT 列列表不匹配。
  2. 它成功執行併產生每個部門中每個職位的平均工資。
  3. 它成功執行併產生每個職位類別中每個部門的平均工資。
  4. 它會丟擲錯誤,因為 GROUP BY 和 ORDER BY 子句具有不同的列列表。

答案:B。 雖然 GROUP BY 子句隱式地對組進行排序,但 GROUP BY 和 ORDER BY 子句可以一起在查詢中使用。

57. 應該使用哪個子句來排除使用分組函式的查詢中的分組結果?

  1. WHERE
  2. HAVING
  3. GROUP BY
  4. ORDER BY

答案:B。 HAVING 子句用於限制組。

檢視給定的表結構並回答接下來的問題 58 和 59。

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)

58. 預測以下查詢的結果

SELECT department_id ,avg(salary )
FROM employees 
HAVING avg(salary )>2000
GROUP BY department_id 
ORDER BY department_id 
  1. 它成功執行。
  2. 它會丟擲錯誤,因為 HAVING 子句位於 GROUP BY 子句之前。
  3. 它會丟擲錯誤,因為 HAVING 子句使用了聚合函式。
  4. 它會執行,但不會顯示任何結果,因為 HAVING 子句位於 GROUP BY 子句之前。

答案:A。 HAVING 子句可以位於 GROUP BY 子句之前,但它只在計算分組結果後才進行處理。

59. 預測以下查詢的結果

SELECT department_id , COUNT(first_name )
FROM employees 
WHERE job IN ('SALESMAN','CLERK','MANAGER','ANALYST')
GROUP BY department_id 
HAVING AVG(salary ) BETWEEN 2000 AND 3000;
  1. 它會返回錯誤,因為 BETWEEN 運算子不能用於 HAVING 子句。
  2. 它會返回錯誤,因為 WHERE 和 HAVING 子句不能在同一個 SELECT 語句中使用。
  3. 它會返回錯誤,因為 WHERE 和 HAVING 子句不能用於對同一列應用條件。
  4. 它成功執行。

答案:D。 WHERE 子句限制了參與分組處理的行數。

60. 關於 SELECT 語句中的 WHERE 和 HAVING 子句,哪些語句是正確的?

  1. HAVING 子句可以與子查詢中的分組函式一起使用。
  2. WHERE 子句可以用於在將行分成組之後排除行。
  3. WHERE 子句可以用於在將行分成組之前排除行。
  4. 只有當 WHERE 和 HAVING 子句應用於表中的不同列時,它們才能在同一語句中使用。

答案:A,C。 WHERE 和 HAVING 子句可以一起在查詢中使用。WHERE 在分組處理之前排除行,而 HAVING 限制組。

檢視給定的表結構並回答接下來的問題 61 和 62。

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)

61. 預測以下查詢的結果。

SELECT department_id , avg(salary )
FROM employees 
HAVING avg(salary ) > min(salary )
GROUP BY department_id ;
  1. 它會丟擲錯誤,因為 HAVING 子句中使用的聚合函式必須在 SELECT 列表中。
  2. 它會丟擲錯誤,因為 HAVING 子句出現在 GROUP BY 子句之前。
  3. 它顯示平均工資高於部門最低工資的部門。
  4. 它顯示平均工資高於公司最低工資的部門。

答案:C。 HAVING 子句可以使用分組函式來過濾組。

62. 解釋以下查詢的輸出。

SELECT SUM(AVG(LENGTH(first_name )))
FROM employees  
GROUP BY department_id ;
  1. 它計算每個部門中員工姓名長度平均值的總和。
  2. 它計算每個部門中員工姓名長度的平均值。
  3. 它會丟擲錯誤,因為單行函式不能與分組函式一起使用。
  4. 它會丟擲錯誤,因為分組列 DEPARTMENT_ID 未在 SELECT 列表中使用。

答案:A。 分組函式可以在 SELECT 查詢中與單行函式或一般函式一起使用。

63. 分組函式最多可以巢狀多少層?

  1. 1
  2. 2
  3. 3
  4. 沒有限制

答案:B。 分組函式最多可以巢狀 2 層。但是,單行函式可以巢狀任意數量的層。

64. 由 GROUP BY 子句建立的組中組的數量限制是多少?

  1. 1
  2. 2
  3. 3
  4. 無限制

答案:D。 可以形成的組和子組的數量沒有限制。

65. 選擇關於 HAVING 子句的正確語句。

  1. HAVING 子句是 SELECT 語句中的可選子句。
  2. 如果 SELECT 語句使用 GROUP BY 子句,則 HAVING 子句是必需的子句。
  3. 只有當 SELECT 語句使用 GROUP BY 子句時,HAVING 子句才能出現在 SELECT 語句中。
  4. 如果 SELECT 語句使用 GROUP BY 子句,則 HAVING 子句是必需的子句。

答案:A,C。 只有在存在 GROUP BY 子句的情況下,HAVING 子句才能出現在查詢中,但反之則不然。

66. 下面查詢的輸出是什麼?

SELECT count(*) FROM dual GROUP BY dummy;
  1. 1
  2. 0
  3. NULL
  4. 丟擲錯誤,因為分組函式不能應用於 DUAL 表。

答案:A。 DUAL 表包含單個名為 DUMMY 的列,型別為 CHAR(1),其值為 'X'。

根據以下場景,回答第 67 至 74 個問題。

一家公司有 14 名員工,他們的固定工資為 1000。公司又招聘了 5 名新員工,他們的工資尚未由薪資部門確定。但是,在月底處理期間,人力資源薪資部門會生成幾份報告來核對公司的財務資料。檢視給定的表結構。

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)

67. 下面查詢的輸出是什麼?

SELECT SUM (salary ) FROM employees ;
  1. NULL
  2. 14000
  3. 19000
  4. 0

答案:B。 SUM 函式將員工的工資相加。

68. 下面查詢的輸出是什麼?

SELECT AVG (salary ) FROM employees ;
  1. 1000
  2. 736.84
  3. NULL
  4. 0

答案:A。 AVG(salary) 函式計算工資的平均值,並忽略 NULL 值。在這種情況下,AVG(salary) = (14 * 1000) / 14 = 1000。

69. 下面查詢的輸出是什麼?

SELECT AVG (nvl(salary ,0)) FROM employees ;
  1. 1000
  2. NULL
  3. 736.84
  4. 0

答案:C。 AVG(NVL(salary, 0)) 為 NULL 值提供替代值,並使它們能夠參與平均值計算。在這種情況下,(14 * 1000) / 19 = 736.84。

70. 下面查詢的輸出是什麼?

SELECT VARIANCE (salary ) FROM employees ;
  1. 1000
  2. 0
  3. NULL
  4. 204678.36

答案:B。 VARIANCE(salary) 計算工資列值的方差,忽略 NULL 值。

71. 下面查詢的輸出是什麼?

SELECT VARIANCE (nvl(salary ,0)) FROM employees ;
  1. 1000
  2. 0
  3. NULL
  4. 204678.36

答案:D。 VARIANCE(NVL(salary, 0)) 計算工資列值的方差,包括 NULL 值。

72. 下面查詢的輸出是什麼?

SELECT STDDEV (salary ) FROM employees ;
  1. 1
  2. 1000
  3. 0
  4. NULL

答案:C。 STDDEV(salary) 計算工資列值的標準差,忽略 NULL 值。

73. 下面查詢的輸出是什麼?

SELECT STDDEV (nvl(salary ,0)) FROM employees ;
  1. 0
  2. 452.41
  3. 1000
  4. NULL

答案:B。 STDDEV(NVL(salary, 0)) 計算工資列值的標準差,包括 NULL 值。

74. 下面查詢的輸出是什麼?

select count(*),count(salary ) from employees ;
  1. 19,19
  2. 14,19
  3. 19,14
  4. 14,14

答案:C。 COUNT(*) 包括 NULL 值,而 COUNT(salary) 忽略 NULL 值。

75. 檢視給定的表結構。

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)

以下哪個查詢將給出擁有 5 名以上員工的部門?

  1. SELECT department_id  FROM employees  WHERE COUNT(*) > 5 GROUP BY department_id ;
  2. SELECT department_id  FROM employees  HAVING COUNT(*) > 5;
  3. SELECT department_id  FROM employees  GROUP BY employee_id  HAVING COUNT(*) > 5;
  4. SELECT department_id  FROM employees  GROUP BY department_id  HAVING COUNT(*) > 5;

答案:D。

76. 關於 GROUP BY 的 CUBE 擴充套件,以下哪些說法是正確的?

  1. 能夠使用單個查詢執行多個 GROUP BY 子句。
  2. 對包含的所有列的所有可能組合執行聚合。
  3. 根據提供的列列表,執行越來越多的累積小計。
  4. 以上都不是

答案:B。 CUBE、ROLLUP 是用於 OLAP 處理的 GROUP BY 擴充套件。CUBE 在形成列的新排列時聚合結果。

使用以下 SELECT 語句回答下面的問題 77 到 82

1 SELECT customer#, COUNT(*)
2 FROM customers JOIN orders USING (customer#)
3 WHERE orderdate > '02-APR-09'
4 GROUP BY customer#
5 HAVING COUNT(*) > 2;

77. SELECT 語句的哪一行用於限制查詢處理的記錄數?

  1. 1
  2. 3
  3. 4
  4. 5

答案:B。 WHERE 子句用於在形成組之前限制行。

78. SELECT 語句的哪一行用於限制查詢結果中顯示的組?

  1. 1
  2. 3
  3. 4
  4. 5

答案:D。 HAVING 用於在組處理結束後限制組結果。

79. SELECT 語句的哪一行用於對資料庫中儲存的資料進行分組?

  1. 1
  2. 3
  3. 4
  4. 5

答案:C。 GROUP BY 子句使用分組列對錶中的資料進行分組。

80. 為了使查詢成功執行,必須包含哪個子句?

  1. 1
  2. 3
  3. 4
  4. 5

答案:C。 因為 SELECT 子句包含 CUSTOMER# 列,所以必須使用包含 CUSTOMER# 列的 GROUP BY 子句。

81. 在 SELECT 查詢中使用 COUNT(*) 的目的是什麼?

  1. 指定表中的記錄數
  2. 每個客戶下的訂單數量
  3. 指定表中 NULL 值的數量
  4. 下過訂單的客戶數量

答案:B. 它計算在分組下處理的行數。在本例中,分組是由客戶形成的,COUNT(*) 計算每個客戶下的訂單數量。

82. 以下哪個函式可以用來確定 JustLee Books 最近處理的所有訂單的最早發貨日期?

  1. COUNT 函式
  2. MAX 函式
  3. MIN 函式
  4. STDDEV 函式

答案:C. MIN 函式用於檢索列的最小值。當用於日期列時,它會從列中獲取最小日期。

83. 以下哪個不是有效的 SELECT 語句?

  1. SELECT STDDEV(retail) FROM books;
  2. SELECT AVG(SUM(retail)) FROM orders NATURAL JOIN orderitems NATURAL JOIN books GROUP BY customer#;
  3. SELECT order#, TO_CHAR(SUM(retail),'999.99') FROM orderitems JOIN books USING (isbn) GROUP BY order#;
  4. SELECT title, VARIANCE(retail-cost) FROM books GROUP BY pubid;

答案:D. GROUP BY 子句必須指定 SELECT 子句中包含的列或列集。此處 PUBID 不包含在 SELECT 子句中,因此查詢無效。

84. 關於分組函式的巢狀,以下哪些說法是正確的?

  1. 最內層的函式先被解析。
  2. Oracle 允許分組函式巢狀最多 3 層。
  3. 單行函式可以與分組函式巢狀。
  4. Oracle 允許分組函式巢狀最多 2 層。

答案:A、C、D. 在包含巢狀函式的表示式中,最內層的函式首先執行,其結果被饋送到下一個函式,向外移動。單行函式可以很好地與分組函式一起使用,最多可以巢狀 2 層。

85. Oracle 中的統計分組函式有哪些?

  1. AVG
  2. STDDEV
  3. VARIANCE
  4. STATS

答案:B、C. VARIANCE 和 STATS 是 Oracle SQL 中可用的統計分組函式。

86. 如果 SELECT 列表包含一個列和一個分組函式,則必須強制包含以下哪個子句?

  1. ORDER BY
  2. HAVING
  3. GROUP BY
  4. 沒有任何一個

答案:C. GROUP BY 子句必須包含 SELECT 子句中包含的列或列集。

87. 檢查給出的表結構。

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 語句無法執行的最佳解釋是什麼?

SELECT department_id "Department", AVG (salary)"Average"
FROM employees
GROUP BY Department;
  1. 薪水不能平均,因為並非所有數字都能被整除。
  2. 不能在 GROUP BY 子句中使用列別名。
  3. GROUP BY 子句必須有分組的內容。
  4. 部門 ID 未列在部門表中。

答案:B. GROUP BY 子句和 HAVING 子句都不能與列別名一起使用。

88. 以下哪些資料型別與 AVG、SUM、VARIANCE 和 STDDEV 函式相容?

  1. 只有數值資料型別
  2. 僅整數
  3. 任何資料型別
  4. 除數值型別外的所有型別

答案:A. AVG、SUM、VARIANCE 和 STDDEV 函式必須僅與數值資料型別一起使用。

檢查下面給出的表結構,並回答後面的第 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)

89. 以下哪個查詢將顯示每個部門工作的不同職位類別的數量?

  1. SELECT department_id , COUNT(DISTINCT job) FROM employees  GROUP BY job;
  2. SELECT department_id , COUNT(job) FROM employees  GROUP BY employee_id ;
  3. SELECT department_id , COUNT(job) FROM employees  GROUP BY department_id ;
  4. SELECT department_id , COUNT(DISTINCT job) FROM employees  GROUP BY department_id ;

答案:D. 使用 DISTINCT 修飾符過濾掉重複項。

90. 評估此 SQL 語句

SELECT employee_id , first_name , department_id , SUM(salary )
FROM employees 
WHERE salary  > 1000
GROUP BY department_id , employee_id , first_name 
ORDER BY hiredate;

為什麼此語句會出錯?

  1. 缺少 HAVING 子句。
  2. WHERE 子句包含語法錯誤。
  3. SALARY 列未包含在 GROUP BY 子句中。
  4. HIRE_DATE 列未包含在 GROUP BY 子句中。

答案:D. SELECT 和 ORDER BY 子句中出現的所有列都必須包含在 GROUP BY 子句中。

91. 關於 GROUP BY 子句,以下哪個陳述是正確的?

  1. 要使用 GROUP BY 子句在將行分成組之前排除行,應使用 WHERE 子句。
  2. 必須將 HAVING 子句與 GROUP BY 子句一起使用。
  3. 可以在 GROUP BY 子句中使用列別名。
  4. 預設情況下,使用 GROUP BY 子句時不會對行進行排序。

答案:A. 使用 WHERE 子句,可以在將行分成組之前排除行。

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)

解釋以下查詢的結果。

SELECT department_id , MIN (hiredate)
FROM employees 
GROUP by department_id ;
  1. 組織中最早的僱傭日期。
  2. 組織中最新的僱傭日期。
  3. 部門中最早的僱傭日期。
  4. 部門中最新的僱傭日期。

答案:C. 查詢返回每個部門中最早被僱傭的員工。

93. 關於分組函式,哪個語句是正確的?

  1. 除 COUNT(*) 外的所有分組函式都忽略 NULL 值。
  2. SELECT 列表中包含分組函式的查詢必須包含 GROUP BY 子句。
  3. 分組函式可以在 WHERE 子句中使用。
  4. 分組函式只能在 SELECT 列表中使用。

答案:A. 除 COUNT(*) 外的所有分組函式都忽略 NULL 值。這是因為它們直接處理特定列中包含的值。

94. 以下哪些子句代表分組函式的有效用法?

  1. GROUP BY MAX(salary)
  2. ORDER BY AVG(salary)
  3. HAVING MAX(salary) > 10000
  4. SELECT AVG(NVL(salary, 0))

答案:B、C、D. 分組函式只能出現在 SELECT、HAVING 和 ORDER BY 子句中。

95. 關於 GROUP BY 子句,以下哪些陳述是正確的?

  1. GROUP BY 子句中列出的最後一列是最主要的分組。
  2. GROUP BY 子句中列出的第一列是最主要的分組。
  3. 不能在沒有 ORDER BY 子句的情況下使用 GROUP BY 子句。
  4. GROUP BY 子句不能確保輸出的排序。

答案:B. 資料的分組基於 GROUP BY 子句中出現的列的順序。

96. WHERE 子句和 HAVING 子句有什麼區別?

  1. WHERE 子句在分組之前限制行,而 HAVING 子句限制組。
  2. WHERE 子句不能包含分組函式,但 HAVING 子句可以。
  3. WHERE 子句可以使用 AND 或 OR 運算子連線多個條件,但 HAVING 子句不能。
  4. WHERE 子句可以在沒有 GROUP BY 子句的 SELECT 查詢中出現,但 HAVING 子句不能。

答案:A、B、D. WHERE 子句在分組之前限制行,而 HAVING 子句限制組。

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)

預測以下查詢的結果。

SELECT department_id ,job,count(*)
FROM employees 
GROUP BY department_id ,job
ORDER BY department_id ,count(*);
  1. 它成功執行。
  2. 由於 ORDER BY 子句無效,它會丟擲錯誤。
  3. 由於 GROUP BY 子句無效,它會丟擲錯誤。
  4. 由於 GROUP BY 和 ORDER BY 子句不能一起使用,它會丟擲錯誤。

答案:A. ORDER BY 子句可以使用分組函式進行排序。

廣告