- 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. 以下哪個子句用於限制從 SELECT 查詢中檢索的行數?
- LIMIT
- WHERE
- AND
- FROM
答案:B. WHERE 子句用於限制 SELECT 查詢返回的行數。
2. 選擇可以在 SELECT 查詢的 WHERE 子句中比較其值的資料庫元素。
- 列
- 序列
- 過程
- 字面量
答案:A、D. WHERE 子句可用於比較列、字面量、算術函式和函式的值。
3. SELECT 查詢的 WHERE 子句謂詞中不包含哪些元素?
- 比較運算子
- 比較條件
- 列名
- 表名
答案:D. WHERE 子句謂詞不需要表名。
4. WHERE 子句條件評估後,以下哪個值不能返回?
- UNKNOWN
- TRUE
- FALSE
- NULL
答案:A. 如果 WHERE 子句中條件的結果未知,則返回 NULL。在所有其他情況下,返回 TRUE 或 FALSE。
5. SELECT 查詢中必須存在的 WHERE 子句的最小數量是多少?
- 1
- 2
- 0
- 3
答案:C. WHERE 子句是 SELECT 查詢中的可選子句,僅用於限制行數。
6. SELECT 查詢中可以包含的 WHERE 子句的最大數量是多少?
- 1
- 2
- 0
- 3
答案:A. WHERE 子句是 SELECT 查詢中的可選子句,只能使用一次來限制行數。
7. 關於 WHERE 子句,以下哪些陳述是正確的?
- 可以在 WHERE 子句中使用列別名來引用列
- 比較運算子是 WHERE 子句條件中的可選元素
- 函式可以用作 WHERE 子句中的運算元
- SELECT 查詢中可以有多個 WHERE 子句
答案:C. WHERE 子句必須有比較運算子來評估條件。它可以使用函式作為運算元之一。SELECT 查詢中只允許一個 WHERE 子句。
8. 編寫一個 SELECT 查詢,列出 EMP 表中唯一的部門。
SELECT deptno FROM emp;
SELECT DISTINCT deptno FROM emp;
SELECT DISTINCT (deptno) FROM emp;
SELECT empno, DISTINCT deptno FROM emp;
答案:B & C. DISTINCT 關鍵字用於從 SELECT 查詢中過濾掉重複的行。
9. 以下哪些操作允許用於日期和時間戳列?
- 除法
- 加法
- 減法
- 連線
答案:B、C 和 D. 加法、減法和連線是允許用於日期和時間戳列的操作。
10. 從以下運算子中,哪個運算子具有最高的優先順序?
- 除法 (/)
- 乘法 (*)
- 括號 ( ( ) )
- 減法
答案:C. 括號內的表示式具有最高的優先順序。
11. 解釋以下 SELECT 查詢返回的輸出
SELECT ename, (sysdate - hiredate) FROM emp;
- 今年的天數
- 員工入職年份的天數
- 員工在公司工作的天數
- 查詢引發異常“ORA-00932: inconsistent datatypes: expected NUMBER got DATE”
答案:C. 表示式 (sysdate-hiredate) 返回員工在公司工作的天數。
12. 以下哪些陳述正確地描述了 Oracle 中的 DUAL 表?
- DUAL 表是 Oracle 資料庫中的臨時表
- DUAL 表僅包含一個名為 DUMMY 的字元型別列
- SYS 擁有的 DUAL 表不能被刪除
- 使用者可以在其自己的模式中建立名為 DUAL 的表
答案:B、C、D. Oracle 中的 DUAL 表由 SYS 擁有,幷包含一個型別為 VARCHAR2(1) 的 DUMMY 列。
13. 確定以下查詢返回的輸出型別
SELECT sysdate - hiredate FROM emp WHERE empno=7369;
- DATE 資料型別
- NUMBER 資料型別
- VARCHAR2 資料型別
- 查詢引發錯誤,因為無法對日期列執行算術運算
答案:B. 兩個日期之間的減法會得到兩個日期之間相差的天數的數值。
14. 哪些表示式不會返回 NULL 值?
SELECT ((10 + 20) * 50) + null from dual;
SELECT 'this is a '||null||'test with nulls' from dual;
SELECT null/0 from dual;
SELECT null||'test'||null as “Test” from dual;
答案:B、D. 任何帶有 NULL 的算術運算都會導致 NULL。
15. 確定以下查詢的輸出
SELECT 'Tutorial''s Point compiles technical tutorials' FROM DUAL;
- Tutorial''s Point 編譯技術教程
- Tutorial's Point 編譯技術教程
- 'Tutorial''s Point 編譯技術教程'
- 引發異常“ORA-01756: quoted string not properly terminated”
答案:B。
16. 檢查如下所示的 TRAINING 表
Name Null? Type ----------------------------------------- -------- ------------- TRAINING_ID NOT NULL NUMBER(5) TRAINING_LOCATION NUMBER(7,2) START_DATE DATE END_DATE DATE哪些兩個 SQL 語句可以成功執行?(選擇兩個)
SELECT NVL (ADD_MONTHS (END_DATE,1),SYSDATE) FROM training;
SELECT TO_DATE (NVL(SYSDATE-END_DATE,SYSDATE)) FROM training;
SELECT NVL(MONTHS_BETWEEN(START_DATE,END_DATE),’In Progress’) FROM training;
SELECT NVL(TO_CHAR(MONTHS_BETWEEN(START_DATE,END_DATE)),’In Progress’) FROM training;
答案:A、D. 使用 NVL 函式為列在為 NULL 時提供替代值。
17. SELECT 語句中列的選擇被稱為什麼?
- 檢索
- 選擇
- 投影
- 限制
答案:C. 投影是在 SELECT 語句中選擇所需列的能力。
18. SELECT 語句返回行的限制被稱為什麼?
- 檢索
- 投影
- 限制
- 選擇
答案:C. 限制是透過設定某些條件來限制行數的能力。
19. 關於以下查詢,以下哪一項是正確的?
SELECT col1, col2 FROM tab1 ORDER BY col1;
- 列 COL1 的所有行將按降序排序。
- 列 COL1 的所有行將按升序排序。
- 查詢會報錯,因為查詢中沒有 WHERE 子句。
- 查詢會報錯,因為 ORDER BY 子句應包含 SELECT 子句中的所有列。
答案:B. 預設情況下,ORDER BY 子句按升序排序值。
20. 關於以下 SQL 查詢,以下哪一項是正確的?
SELECT col1,col2 FROM tab1 WHERE col1 = 'A' ORDER BY col2 DESC, col1;
- 它將顯示 col1 值為“A”的行,並按 col1 降序排序,然後按 col2 降序排序。
- ORDER BY 子句將不起作用,因為關鍵字 DESC 應始終寫在 ORDER BY 子句的末尾,而不是像查詢中那樣寫在中間。
- 以上查詢將根據 col2 降序排序,而 ORDER BY 子句中 col1 的使用將被丟棄。
- 它將顯示 col1 值為“A”的行,並按 col1 排序,然後按 col2 排序,因為 ORDER BY 子句的執行是從 SELECT 語句中列的順序開始的。
答案:C. 由於 COL1 在查詢中已作為標量值被過濾和固定,因此不會根據 COL1 進行排序。
21. 關於以下查詢,哪一項是正確的?
SELECT col1, col2 FROM tab1 ORDER BY col1,col2 WHERE col2 = 'B';
- 它成功執行
- 它會得到 COL2 值為“B”的所需結果,但不會按列 COL1 和 COL2 排序,因為 ORDER BY 子句出現在 WHERE 子句之前。
- 它將顯示 COL2 值為“B”的行,並按 COL1、COL2 排序。
- 它會報錯,因為在 Oracle 中,ORDER BY 子句不能寫在 WHERE 子句之前。
答案:D. ORDER BY 子句必須出現在 SELECT 語句的 WHERE 子句之後
22. SELECT 語句的哪些兩個子句對於選擇和投影是必要的?
- SELECT、FROM
- ORDER BY、WHERE
- SELECT、WHERE
- SELECT、ORDER BY
答案:C。
23. 以下哪個 WHERE 子句不適合下面的 SELECT 查詢?
SELECT ename, deptno, sal FROM emp;
- WHERE HIREDATE IN ('02-JUN-2004');
- WHERE SAL IN ('1000','4000','2000');
- WHERE JOB IN (SALES,CLERK);
- WHERE COMM BETWEEN 0.1 AND 0.5;
答案:C. 字串字面量必須用單引號括起來
24. 選擇從 DEPT 表中提取包含字元字面量“er”的 DNAME 值的 WHERE 子句。
- WHERE DNAME IN ('%e%r');
- WHERE DNAME LIKE '%er%';
- WHERE DNAME BETWEEN 'e' AND 'r';
- WHERE DNAME CONTAINS 'e%r';
答案:B. LIKE 運算子用於在 SQL 查詢中執行萬用字元搜尋。
25. 以下哪些條件彼此等效?(選擇兩個)
- WHERE comm IS NULL
- WHERE comm = NULL
- WHERE comm IN (NULL)
- WHERE NOT(comm IS NOT NULL)
答案:A、D. NOT 運算子可用於否定其運算元的效果。因此 (COMM IS NULL) 等效於 (NOT (COMM IS NOT NULL))。
26. SQL 查詢中哪些子句是必須的?
- SELECT、FROM
- SELECT、FROM、WHERE
- SELECT、WHERE
- SELECT、WHERE、ORDER BY
答案:A. SELECT 和 FROM 是 SELECT 查詢中的必須子句。
27. 以下哪些 WHERE 子句條件彼此等效?(選擇三個)
- WHERE SAL <=5000 AND SAL >=2000
- WHERE SAL IN (2000,3000,4000,5000)
- WHERE SAL BETWEEN 2000 AND 5000
- WHERE SAL > 1999 AND SAL < 5001
答案:A、C、D. 使用 IN、BETWEEN 和關係運算符可以使這些條件等效。
28. 關於以下查詢,以下哪一項是正確的?
SELECT empno, ename, job FROM emp WHERE ename like '_ith%';
- 它獲取姓名中任何位置都包含“ith”的員工的員工 ID、姓名和職位。
- 它獲取姓名以“ith”開頭的員工的員工 ID、姓名和職位。
- 查詢會報錯,因為不能同時編寫兩個字串匹配表示式。
- 它獲取姓名以任何字母數字字元開頭,後跟“ith”,然後是“ith”之後任何字母數字字元的員工的員工 ID、姓名和職位。
答案:D。
29. 以下哪個用於結束 SQL 查詢?
- :
- ;
- .
- /
答案:B、D。 在SQL*Plus和SQL Developer中,分號 (;) 或反斜槓 (/) 用於終止查詢。
30. 員工JAMES和MILLER想透過查詢資料庫來了解他們的部門ID。以下哪個查詢可以得到所需的結果?
SELECT ename, deptno FROM emp WHERE ename = 'JAMES';
SELECT ename, deptno FROM emp WHERE ename = 'MILLER';
SELECT ename, deptno FROM dept
SELECT ename, deptno FROM emp WHERE ename = 'JAMES' OR ename = 'MILLER'
答案:D。可以使用OR子句連線多個條件。如果兩個條件中的任何一個為真,則查詢執行成功。
31. 關於WHERE子句,以下哪一項是錯誤的?
- WHERE子句可以比較列中的值、字面量、算術表示式或函式。
- WHERE子句包含列名。
- WHERE子句可以使用列別名。
- WHERE子句不能包含值列表或常量。
答案:C、D。
32. Oracle中的預設日期格式是什麼?
- DD-MON-YY
- DD-MON-YYYY
- DD-MM-RR
- DD-MON-RR
答案:D。DD-MON-RR是Oracle中的預設日期格式。
33. 預測以下SQL查詢的輸出。
SELECT ename, deptno, sal, comm FROM emp WHERE job = 'SALES' AND hiredate = ”01-JAN-97”;
- 它獲取所有SALES員工的員工資料。
- 它丟擲錯誤“ORA-00904: "01-JAN-13": 無效識別符號”
- 查詢成功執行,但沒有返回結果。
- 它獲取所有於1997年1月1日入職的SALES員工的資料。
答案:B。日期字面量必須用單引號括起來。
34. 您需要顯示EMPLOYEES表中所有名為“GARRY”的員工的姓名。以下哪個查詢可以滿足要求?
SELECT first_name FROM employees WHERE first_name LIKE 'GARRY%';
SELECT first_name FROM employees WHERE first_name LIKE '%GARRY%';
SELECT first_name FROM employees WHERE first_name LIKE 'GARRY';
SELECT first_name FROM employees WHERE first_name LIKE '_ARRY%';
答案:C。如果搜尋字串的某些字元未知,可以使用萬用字元。
35. 您需要顯示所有姓氏的第二個字母為's'且部門ID為100的員工的員工ID。以下哪個查詢可以獲取所需的結果?
SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '%s%';
SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '%s_';
SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '_s_%';
SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '_s%';
答案:D。萬用字元下劃線 (_) 用於替換單個字元。
36. 以下查詢的結果是什麼?
SELECT first_name, last_name, dept_id FROM employees WHERE hire_date LIKE '%98';
- 將顯示所有1998年入職員工的姓名和部門ID。
- 將顯示所有2098年入職員工的姓名和部門ID。
- 不會返回任何結果。
- 將顯示所有在1998年1月1日至1998年12月31日期間入職的員工的姓名和部門ID。
答案:D。LIKE運算子用於對字元和日期字面量執行萬用字元搜尋。
37. 使用以下哪個選項可以根據值的範圍獲取行?
- UNION ALL
- IN
- BETWEEN
- LIKE
答案:C。BETWEEN運算子用於根據值的範圍檢索行。
38. 您需要顯示薪水在20000(含)到50000(含)之間的員工的員工ID。以下哪個查詢可以獲取所需的結果?
SELECT emp_id FROM employees WHERE salary >=20000 AND salary <=50000;
SELECT emp_id FROM employees WHERE salary IN (20000, 50000);
SELECT emp_id FROM employees WHERE salary >20000 AND salary <50000;
SELECT emp_id FROM employees WHERE salary between 20000 AND 50000;
答案:A、D。對於較大的值範圍,BETWEEN和關係運算符最適合在查詢中使用。對於大範圍的值,不推薦使用IN運算子。
39. 關於以下查詢,哪一項是正確的?
SELECT first_name, last_name FROM employees WHERE last_name BETWEEN 'B%' AND 'E%';
- 它將顯示所有姓氏以字母“B”開頭到“E”(包含“B”,不包含“E”)的員工。
- 它將丟擲錯誤,因為BETWEEN只能用於數字,不能用於字串。
- 它將顯示所有姓氏從“B”到“E”的員工。
- 它將顯示所有姓氏的首字母在“B”和“E”範圍內的員工,但不包括以“B”和“E”開頭的姓名。
答案:A。BETWEEN運算子也適用於字元值的範圍。
40. 下面提到的查詢的結果是什麼?
SELECT employee_id, last_name, first_name, salary, manager_id FROM employees WHERE manager_id IN (200,100,300);ORDER BY manager_id ASC;
- 它將顯示所有在ID範圍從100到300的經理手下工作的員工。
- 它將顯示所有在ID為100、200或300的經理手下工作的員工。
- 它將丟擲錯誤,因為經理ID應該用引號括起來。
- 它將丟擲錯誤,因為WHERE子句中manager_id的排序與ORDER BY子句衝突。
答案:B。IN運算子可用於提供少量有限的範圍。
41. 以下哪個子句定義了成員資格條件?
- BETWEEN
- LIKE
- IS NULL
- IN (NOT IN)
答案:D。IN運算子定義了一個成員資格條件,該條件可以使用一系列值或子查詢。
42. IN運算子可以使用哪些資料型別?
- VARCHAR2
- NUMBER
- DATE
- ALL
答案:D。IN運算子適用於所有型別的值。
43. 您需要顯示所有名為“Bryan”或“Jason”的員工列表。以下哪個查詢可以滿足要求?
SELECT emp_id, last_name, first_name FROM employees WHERE first_name LIKE 'Bryan%' OR first_name LIKE 'Jason%';
SELECT emp_id, last_name, first_name FROM employees WHERE first_name BETWEEN 'Bryan' and 'Jason' ;
SELECT emp_id, last_name, first_name FROM employees WHERE first_name IN ('Bryan', 'Jason');SELECT emp_id, last_name, first_name FROM employees WHERE first_name = 'Bryan' OR first_name = 'Jason'
答案:C、D。IN運算子檢查作為成員資格條件定義的任何值。
44. 您需要提取名稱包含字串'_DXX'的部門的詳細資訊。以下哪個WHERE子句可以用於SELECT語句以獲取所需輸出?
- WHERE dept_id LIKE '%_DXX%' ESCAPE '_'
- WHERE dept_id LIKE '%\_DXX%' ESCAPE '\'
- WHERE dept_id LIKE '%_D123%' ESCAPE '%_'
- WHERE dept_id LIKE '%\_D123%' ESCAPE '\_'
答案:B。
45. 關於ORDER BY子句的預設行為,哪條語句是正確的?
- 在字元排序中,值區分大小寫。
- 排序操作根本不考慮NULL值。
- 只有SELECT列表中指定的列才能在ORDER BY子句中使用。
- 如果數值具有小數位,則將從最大值顯示到最小值。
答案:A。ORDER BY子句對字元值進行區分大小寫的排序。
46. 您需要根據以下條件生成EMPLOYEES表中所有員工的報表:1. 員工名不以'T'或'N'開頭。2. 員工薪水超過20000。3. 員工入職時間在2010年1月1日之後。哪個WHERE子句可以得到所需的結果?
- WHERE first_name NOT LIKE 'T%' OR first_name NOT LIKE 'N%' AND salary > 20000 AND hire_date > '1-JAN-10'
- WHERE (first_name NOT LIKE 'T%' AND first_name NOT LIKE 'N%')OR salary > 20000 OR hire_date > '1-JAN-10'
- WHERE first_name NOT LIKE 'T%' AND first_name NOT LIKE 'N%' AND salary > 20000 AND hire_date > '1-JAN-10'
- WHERE (first_name NOT LIKE '%T%' OR first_name NOT LIKE '%N%') AND(salary > 20000 AND hire_date > '1-JAN-10')
答案:C。
47. 使用EMPLOYEES表,您需要顯示2013年1月1日之後入職的所有員工的姓名,從應屆畢業生開始。哪個查詢可以得到所需的結果?(選擇所有適用的選項。)
SELECT first_name, hire_date FROM employees WHERE hire_date > '01-JAN-13' ORDER BY 2 DESC;
SELECT first_name, hire_date FROM employees WHERE hire_date > '01-JAN-13' ORDER BY first_name DESC;
SELECT first_name, hire_date FROM employees WHERE hire_date > '01-JAN-13' ORDER BY 1 DESC;
SELECT first_name, hire_date "START DATE" FROM employees WHERE hire_date > '01-JAN-13' ORDER BY "START DATE" DESC;
答案:A、D。
48. 使用EMPLOYEES表,您需要找出在12年3月15日至13年10月15日期間在100和101部門入職的所有員工的姓名和薪水。哪些兩個查詢可以得到所需的結果?(選擇兩個。)
SELECT first_name, salary FROM employees WHERE dept_id IN (100,101) AND hire_date BETWEEN '15-MAR-12' AND '15-OCT-12';
SELECT first_name, salary FROM employees WHERE dept_id = 100 OR dept_id =101 AND hire_date >='15-MAR-12' OR hire_date <='15-OCT-12';
SELECT first_name, salary FROM employees WHERE (dept_id BETWEEN 100 AND 101) AND (hire_date IN ('15-MAR-12','15-OCT-12'));SELECT first_name, salary FROM employees WHERE (dept_id = 100 OR dept_id =101) AND (hire_date >='15-MAR-12' AND hire_date <='15-OCT-12');
答案:A、D。
49. 使用EMPLOYEES表,您發出以下查詢以生成姓名、當前薪水和加薪後(加薪25%)的薪水。所有員工的加薪後薪水都應超過30000。
SELECT first_name, salary, salary + (salary *0.25) "INCREASED_SALARY" FROM employees WHERE increased_salary >30000;
查詢丟擲ORA-00904錯誤。錯誤的原因是什麼?
- SELECT語句中使用的表示式缺少括號。
- 必須使用單引號定義列別名。
- WHERE子句中不能使用列別名。
- WHERE子句中的列別名必須用雙引號括起來。
答案:C。列別名不能在WHERE子句條件中使用,但可以在SELECT語句和ORDER BY子句中使用。
50. 您需要從EMPLOYEES表中顯示屬於部門ID 100且最低薪水為2000或4000且沒有job_id的員工姓名。您發出以下查詢。
SELECT first_name, dept_id, salary FROM employees WHERE dept_id = 100 AND (salary = 2000 OR salary = 4000) AND job_id <> '';
關於以上查詢,哪條語句是正確的?
- 它成功執行,但沒有返回結果。
- 它成功執行並返回所需的結果。
- 它生成錯誤,因為為job_id指定的條件無效。
- 它生成錯誤,因為為salary列指定的條件無效。
答案:A。條件(salary = 2000 OR salary = 4000)結果為FALSE,因為員工一次不能擁有多份薪水。
51. 使用Oracle資料庫中內建的SQL函式可以執行哪些三項任務?(選擇三個。)
- 以非預設格式顯示日期
- 查詢表示式中的字元數
- 用指定的字串替換文字表示式中的字元字串
- 將兩個以上的列或表示式組合到輸出中的單個列中
答案:A、B、C。使用格式化函式(TO_CHAR、TO_DATE)和字元函式(LENGTH、REPLACE)來實現目標。
52. 您需要生成一個報表,顯示EMPLOYEES表中所有薪水至少比20000多25%的員工的ID。詳細資訊應按薪水的降序顯示。您發出以下查詢。
SELECT emp_id FROM employees WHERE salary>=20000*0.25 ORDER BY salary*0.25 DESC;
關於以上查詢,哪條語句是正確的?
- 它執行併產生所需的結果。
- 它產生錯誤,因為ORDER BY子句中不能使用表示式。
- 它產生錯誤,因為DESC選項不能與ORDER BY子句中的表示式一起使用。
- 它產生錯誤,因為ORDER BY子句中的表示式也應在SELECT子句中指定。
答案:A。ORDER BY子句可以包含列表達式。
53. 檢查TRAININGS表的結構和資料
Name Null? Type ----------------------------------------- -------- ------------- TRAINING_ID NOT NULL NUMBER(5) TRAINING_LOCATION NUMBER(7,2) START_DATE DATE END_DATE DATE
TRAINING_ID START_DATE TRAINING_COST ------ ---------------- ------------------------------------------------- 11 01-JAN-10 1000 22 01-FEB-10 2000 33 01-MAR-10 3000
日期以預設日期格式dd-mon-rr儲存在TRAININGS表中。以下三個SQL語句將成功執行?(選擇三個。)
SELECT start_date + '10' FROM trainings;
SELECT * FROM trainings WHERE start_date = '01-01-10';
SELECT training_cost FROM trainings WHERE training_id > '11';
SELECT * FROM trainings WHERE start_date ='01-JANUARY-10';
答案:A、C、D。
54. 關於以下查詢,以下哪項陳述是正確的?
SELECT emp_id, first_name FROM employees ORDER BY dept_id;
- ORDER BY子句只能包含SELECT語句中的列。
- 以上查詢將按降序對結果集進行排序。
- ORDER BY子句可以包含相關表中的任何列,而不一定是SELECT語句中的列。
- 它在執行時會丟擲錯誤。
答案:C。ORDER BY子句可以使用一個列來排序資料,該列未在列列表中選擇,但包含在FROM子句中使用的表中。
55. 以下查詢演示了ORDER BY子句的哪個特性?
SELECT emp_id, first_name “EmpName” FROM employees ORDER BY "EmpName";
- ORDER BY子句只能包含SELECT語句中的列。
- 以上查詢將按員工姓名的降序對結果集進行排序。
- ORDER BY子句與列別名一起使用。
- SELECT查詢在執行時會丟擲錯誤,因為ORDER BY子句中不能使用列別名。
答案:C。ORDER BY子句可以與SELECT語句中使用的列別名一起正常工作。
56. 關於下面給出的查詢,哪一項是正確的?
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY 2;
- 它成功執行,根據JOB_ID對查詢結果進行排序。
- ORDER BY子句不能包含數字。
- ORDER BY子句將不起作用,因為SELECT語句中沒有任何列在ORDER BY子句中使用。
- 查詢執行時報錯。
答案:A。可以在ORDER BY子句中使用列的數字位置。
57. 你需要列出不同工作的員工詳細資訊,但一次只列出一個工作。
SELECT emp_id, first_name, last_name FROM employees WHERE job_id....;
在SQL*Plus中,以下哪種方法更容易實現相同的結果?
- 每次替換一個工作 ID
- 使用*列出所有員工的詳細資訊
- 使用&JOB在每次執行查詢時提示使用者輸入
- 宣告會話變數以替換查詢中的工作 ID 值
答案:C。&X表示法會暫停查詢執行,並在每次執行查詢時提示使用者輸入。
58. 關於SQL中的替換變數,以下哪個說法是正確的?
- 可以使用替換變數對不同的值執行相同的查詢。
- 使用替換變數,需要每次都更改WHERE子句。
- Oracle不支援替換變數。
- 每次執行查詢時,都必須在替換變數中輸入一個值,這是有限制的。
答案:A。
59. 為替換變數分配哪種資料型別?
- VARCHAR2
- DATE
- 無資料型別
- NUMBER
答案:C。替換變數本身沒有資料型別,但會符合與其一起使用的列的資料型別。
60. 關於替換變數,以下哪項是正確的?
- 變數中輸入的值保持不變,使用者在第一次執行查詢後無法更改值。
- 查詢執行一次後,值將儲存在變數中。
- 替換變數只支援數字。
- 使用單個與號(&)儲存在替換變數中的值用於第一次執行,然後被丟棄。
答案:D。
61. 以下哪個是SQL*Plus中替換變數的正確語法?
- :var
- $var
- &var
- &&var
答案:C、D。
62. 以下哪個替換變數將只接受一次輸入值,然後將其保留在會話的其餘部分?
- &&var
- &var
- :var
- ::var
答案:A。帶有雙與號的替換變數會重複使用使用者提供的一次值。
63. 關於替換變數,以下哪個說法是正確的?
- 只能輸入數字作為值。
- 只能輸入字元字串作為值。
- 可以輸入數字和字元作為值。
- 以上都不是。
答案:C。
64. 下面給出的查詢有什麼特點?
SELECT first_name, last_name, employee_id, salary FROM employees WHERE employee_id = &eid;
- 它丟擲錯誤“ORA-00904: “&eid”: 無效識別符號”
- 它成功執行。
- WHERE子句不能包含替換變數。
- 查詢提示輸入變數&eid的值,並在採用有效的employee_id值後成功執行。
答案:B, D。
65. 選擇以下關於下面給出的查詢的正確陳述。
SELECT first_name, last_name, &&prompt_col FROM employees ORDER BY &&promp_col;
- 它丟擲錯誤,因為不允許使用替換變數prompt_col。
- 它成功執行,但結果集未排序。
- 它成功執行,但在SELECT語句中輸入的變數值被忽略。
- 它成功執行,並且替換變數的值在整個會話中保持不變。
答案:D。替換變數可以在SQL查詢的所有子句中使用。
66. 在SQL*Plus中,哪個命令用於建立和為替換變數賦值?
- &var
- &&var
- SET
- DEFINE
答案:D。在SQL*Plus會話中使用DEFINE命令宣告替換變數。
67. 在SQL*Plus中,以下操作的結果是什麼?
DEFINE eid = 117 SELECT first_name, last_name, employee_id, salary FROM employees WHERE employee_id = &eid;
- SELECT查詢丟擲錯誤,因為無法在會話中定義替換變數。
- 它提示使用者輸入變數&eid的值。
- 它成功執行,並將員工ID替換為117。
- 它忽略DEFINE命令,因為替換變數宣告時沒有使用與號(&)符號。
答案:C。
68. 刪除由DEFINE命令設定的替換變數值的命令是什麼?
- UNDEFINE
- SET OFF
- DELETE
- CLEAR
答案:A。使用UNDEFINE命令從會話中刪除替換變數。
69. 以下哪個命令用於在SQL查詢執行前後檢查替換變數的值?
- DEFINE
- UNDEFINE
- SHOW VARIABLE
- VERIFY
答案:D。在SQL*Plus和SQL Developer中使用VERIFY命令檢查使用替換變數的值替換。
70. 以下哪些是WHERE子句的有效運算子?
- >=
- IS NULL
- !=
- IS LIKE
答案:A, B, C。
71. 評估以下查詢
SELECT ename || q'{'s salary is }' || sal
AS "Salary"
FROM emp;執行上述查詢時會發生什麼?- 由於無法與[q]運算子一起使用括號而導致錯誤
- 由於資料型別不匹配而導致錯誤
- 成功執行,並在每個員工姓名的末尾新增一個撇號('s)
- 成功執行,並將員工姓名附加到文字“{'s start date was }”
答案:C。
72. 以下哪個WHERE子句謂詞可以正確列出來自20部門的員工?
- WHERE deptno IS 20
- WHERE deptno 20
- WHERE deptno=20
- WHERE 20=deptno
答案:C, D。等號運算子(=)用於比較條件中運算元的相等性。
73. 編寫一個SELECT查詢,列出薪水大於1000的員工。
SELECT ename, sal FROM emp WHERE sal GREATER THAN 1000
SELECT ename, sal FROm emp WHERE sal > 1000
SELECT ename, sal FROM emp WHERE sal >= 1000
SELECT ename, sal FROM emp WHERE sal MORE THAN 1000
答案:B。大於運算子(>)用於比較條件中的運算元。
74. 在SQL*Plus中執行以下查詢時會發生什麼?
SELECT ename, sal, deptno FROM emp WHERE sal/10 > deptno*10;
- 成功執行,並列出薪水的十分之一大於其部門編號十倍的員工
- 由於表示式必須用括號括起來而導致錯誤
- 由於WHERE子句無法評估表示式而導致錯誤
- 由於WHERE子句無法使用文字而導致錯誤
答案:A。WHERE子句可以包含表示式。
75. 確定下面SELECT語句中的錯誤
SELECT ename, deptno, sal FROM emp WHERE job=CLERK;
- WHERE子句無法引用JOB列,因為它沒有出現在SELECT列列表中
- 字元文字CLERK必須用單引號括起來
- 字元文字CLERK必須用括號括起來
- 查詢中沒有錯誤
答案:B。字元文字必須用單引號括起來
76. 解讀下面SQL查詢的輸出
SELECT ename, deptno, sal FROM emp WHERE sysdate-hiredate > 100;
- 查詢列出其入職日期至少比當前日期早100天的員工
- 查詢列出在公司工作超過100天的員工
- 查詢列出入職日期在當年100天之後的員工
- 查詢列出在公司工作少於100天的員工
答案:A, B。日期表示式可以在WHERE子句中使用
77. 以下哪個查詢將顯示1982年12月31日之後入職的員工?
SELECT ename, deptno FROM emp WHERE hiredate > '31-DEC-1982';
SELECT ename, deptno FROM emp WHERE hiredate > to_date('31-DEC-1982','DD-MM-YYYY');SELECT ename, deptno FROM emp WHERE hiredate > to_char('31-DEC-1982','DD-MM-YYYY');SELECT ename, deptno FROM emp WHERE hiredate > 31-DEC-1982;
答案:A, B。日期文字必須用單引號括起來。
78. 以下哪個WHERE條件將列出在當前日期入職的員工?
- WHERE sysdate-hiredate=0
- WHERE sysdate=hiredate
- WHERE sysdate-hiredate<1
- WHERE to_date (sysdate,'DD-MON-YYYY') = to_date (hiredate='DD-MON-YYYY')
答案:C, D。條件SYSDATE=HIREDATE不起作用,因為SYSDATE包含動態時間戳元件,而hiredate是資料庫中的靜態值。
79. 以下哪些是可以在WHERE子句中使用的日期文字的有效格式?
- 24/Mar/95
- 02-12-1983
- 19-JUN-2001
- 31.04.2010
答案:A, C。日期文字的預設格式為DD-MON-RR。