
- 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 ROUND(144.23,-1) FROM dual;
- 140
- 144
- 150
- 100
答案:A. ROUND 函式將根據指定的精度 -1 對值 144.23 進行四捨五入,並返回 140。
檢查 EMPLOYEES 表的結構(如下所示),並回答接下來的問題 2 和 3。
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)
2. 你目前位於新澤西州,並已連線到聖迭戈的遠端資料庫。你發出以下命令。
SELECT ROUND (sysdate-hire_date,0) FROM employees WHERE (sysdate-hire_date)/180 = 2;
此查詢的結果是什麼?
- 錯誤,因為 ROUND 函式不能與日期引數一起使用。
- 錯誤,因為 WHERE 條件表示式無效。
- 自僱員入職以來(基於當前聖迭戈日期和時間)的天數。
- 自僱員入職以來(基於當前新澤西州日期和時間)的天數。
答案:C. SYSDATE 函式將獲取其遠端連線到的資料庫的當前時間。你必須執行基本的算術運算來調整時區。
3. 你需要顯示名字中包含字母“s”且姓氏第二個位置為字母“t”的員工姓名。哪個查詢可以給出所需輸出?
SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'s') <> 0 AND SUBSTR(last_name,2,1) = 't';
SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'s') <> '' AND SUBSTR(last_name,2,1) = 't';
SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'e') IS NOT NULL AND SUBSTR(last_name,2,1) = 't';
SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'e') <> 0 AND SUBSTR(last_name,LENGTH(first_name),1) = 't';
答案:A. INSTR 函式返回給定字元在所需字串中的位置。SUBSTR 函式從給定的起始和結束位置返回字串中的一組字元。
4. 關於 COUNT 函式,以下哪個陳述是正確的?
- COUNT (*) 計算任何資料型別列中的重複值和 NULL 值。
- COUNT 函式不能與 DATE 資料型別一起使用。
- COUNT (DISTINCT job_id) 返回行數,不包括 job_id 列中包含重複值和 NULL 值的行。
- 使用 DISTINCT 關鍵字的 COUNT 函式的 SELECT 語句不能包含 WHERE 子句。
答案:A. COUNT(*) 函式返回滿足 SELECT 語句條件的表中行數,包括重複行和任何列中包含 NULL 值的行。如果 SELECT 語句中包含 WHERE 子句,則 COUNT(*) 返回滿足 WHERE 子句中條件的行數。相反,COUNT(expr) 返回 expr 指定的列中非 NULL 值的數量。COUNT(DISTINCT expr) 返回 expr 指定的列中唯一非 NULL 值的數量。
5. 在 Oracle 資料庫中,以下哪個命令用於計算行數和非 NULL 值的數量?
- NOT NULL
- INSTR
- SUBSTR
- COUNT
答案:D. COUNT (ALL column_name) 用於計算不包括 NULL 的行數。類似地,COUNT(*) 用於計算包括 NULL 的列值。
6. 以下查詢的結果是什麼?
SELECT 100+NULL+999 FROM dual;
- 100
- 999
- NULL
- 1099
答案:C. 任何與 NULL 的算術運算都會導致 NULL。
7. 關於單行函式,以下哪些陳述是正確的?
- 它們只接受單個引數。
- 它們最多隻能巢狀兩層。
- 引數只能是列值或常量。
- 它們可以返回與引用的資料型別不同的資料型別值。
答案:D. 單行函式可以接受多個引數,並且返回型別可以與輸入的資料型別不同。
8. 以下哪個查詢將值 1680 格式化為 $16,80.00?
SELECT TO_CHAR(1680.00,'$99G99D99') FROM dual;
SELECT TO_CHAR(1680.00,'$9,999V99') FROM dual;
SELECT TO_CHAR(1680.00,'$9,999D99') FROM dual;
SELECT TO_CHAR(1680.00,'$99G999D99') FROM dual;
答案:A, D. 格式模型 $99G999D99 將給定數字格式化為數字、組分隔符和小數。其他格式元素可以是前導零、小數位、逗號位置、本地貨幣、科學記數法和符號。
9. 確定以下查詢的輸出。
SELECT RPAD(ROUND('78945.45'),10,'*') FROM dual;
- 78945*****
- **78945.45
- RPAD 函式不能與其他函式巢狀。
- 78945.45****
答案:A. LPAD(string, num, char) 和 RPAD(string, num, char) 函式在給定字串的左側或右側新增一個字元,直到填充後達到指定的長度 (num)。ROUND 函式將值 78945.45 四捨五入到 78945,然後用 '*' 填充它,直到達到長度 10。
10. 以下哪個命令允許你在 SQL 查詢中遇到 NULL 值或非 NULL 值時替換一個值?
- NVL
- NVLIF
- NVL2
- LNNVL
答案:C. NVL2 函式至少需要三個引數。NVL2 函式檢查第一個表示式。如果它不是 NULL,則 NVL2 函式返回第二個引數。如果第一個引數是 NULL,則返回第三個引數。
11. 以下哪種型別的單行函式不能包含在 Oracle DB 中?
- 字元
- 數值
- 轉換
- 以上都不是
答案:D. 諸如字元、數值、日期、轉換和各種型別的單行函式以及程式設計師編寫的函式都可以包含在 Oracle DB 中。
12. 在以下哪些子句中可以使用單行函式?
- SELECT
- WHERE
- ORDER BY
- 以上所有
答案:D. 單行函式可以在 SELECT 語句、WHERE 子句和 ORDER BY 子句中使用。
13. 關於 Oracle DB 中的 NVL 函式,哪個說法是正確的?
- NVL 的語法是 NVL (exp1, exp2),其中 exp1 和 exp2 是表示式。
- 如果表示式 exp1 為 NULL,則 NVL (exp1, exp2) 將返回 exp2 的值。
- 如果 exp1 不為 NULL,則 NVL (exp1, exp2) 將返回表示式 exp2 的值。
- 如果表示式 exp2 為 NULL,則 NVL (exp1, exp2) 將返回 exp1。
答案:B. NVL 函式將 NULL 值替換為備用值。日期、字元和數字資料型別的列可以使用 NVL 提供備用值。列及其備用值的資料型別必須匹配。
14. 檢查給出的 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 last_name, NVL(job_id, 'Unknown') FROM employees WHERE last_name LIKE 'A%' ORDER BY last_name;
- 執行時將丟擲 ORA 錯誤。
- 它將列出 EMPLOYEES 表中所有員工的 job ID。
- 它將列出所有員工的 job ID,並將 NULL job ID 替換為文字“Unknown”。
- 它將顯示所有員工的姓氏及其 job ID,包括 job ID 中的 NULL 值。
答案:C. NVL 函式將 NULL 值替換為備用值。日期、字元和數字資料型別的列可以使用 NVL 提供備用值。列及其備用值的資料型別必須匹配。
15. 以下查詢的結果是什麼?
SELECT NVL (NULL,'1') FROM dual;
- NULL
- 1
- 0
- 由於無法將 NULL 顯式指定給 NVL 函式,因此會報錯
答案:B. NVL 將 NULL 視為一個值,並返回備用引數,即 1 作為結果。
16. 以下查詢的結果是什麼?(考慮給出的 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 employee_id , NVL(salary, 0) FROM employees WHERE first_name like 'P%' ORDER BY first_name;
- 它將為所有名字以“P”開頭的員工在 salary 列中顯示 0。
- 它將顯示名字以“P”開頭的員工的薪水,如果薪水為 NULL,則顯示 0。
- 它將丟擲 ORA 錯誤,因為 ORDER BY 子句也應該包含 salary 列。
- NVL 函式應正確使用為 NVL (0, salary)
答案:B. NVL 函式將 NULL 值替換為備用值。日期、字元和數字資料型別的列可以使用 NVL 提供備用值。列及其備用值的資料型別必須匹配。
17. 關於 NVL 語句,以下哪個陳述是正確的?
SELECT NVL (arg1, arg2) FROM dual;
- 兩個表示式 arg1 和 arg2 只能採用 VARCHAR2 或 NUMBER 資料型別格式。
- 引數 arg1 和 arg2 應該具有相同的資料型別
- 如果 arg1 為 VARCHAR2,則 Oracle DB 會在比較它們之前將 arg2 轉換為 arg1 的資料型別,並在 arg1 的字元集中返回 VARCHAR2。
- NVL 函式不能與 DATE 資料型別的引數一起使用。
答案:C. 如果 arg1 為 VARCHAR2 資料型別,如果 arg2 為 NUMBER 資料型別,則 Oracle 會對 arg2 進行隱式型別轉換。在所有其他情況下,這兩個引數必須具有相同的資料型別。
18. 以下查詢的結果是什麼?(考慮給出的 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 NVL2(job_id,'Regular Employee','New Joinee') FROM employees;
- 它將為所有 job ID 為 NULL 的員工返回“Regular Employee”值。
- 它將為所有 job ID 為 NULL 的員工返回“New Joinee”值。
- 如果 job ID 為 NULL,它將返回“Regular Employee”。
- 執行時將丟擲 ORA 錯誤。
答案:B. NVL2 函式檢查第一個表示式。如果第一個表示式不為 NULL,則 NVL2 函式返回第二個表示式。如果第一個表示式為 NULL,則返回第三個表示式。
19. 關於如下所示的語句,以下哪個說法是正確的。
NVL2 (arg1, arg2, arg3)
- Arg2 和 Arg3 可以具有任何資料型別
- Arg1 不能具有 LONG 資料型別
- Oracle 將根據 Arg1 轉換 expr2 的資料型別
- 如果 Arg2 為 NUMBER,則 Oracle 將確定數字優先順序,隱式地將另一個引數轉換為該資料型別,並返回該資料型別。
答案:D. 引數 arg2 和 arg3 的資料型別必須相容,並且不能為 LONG 型別。它們必須具有相同的型別,或者必須能夠將 arg3 轉換為引數 arg2 的型別。NVL2 函式返回的資料型別與引數 arg2 的資料型別相同。
20. 檢查給出的 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 first_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) "Income" FROM employees WHERE first_name like 'P%' ORDER BY first_name;
- 如果員工的 Commission 不為 NULL,則返回 Salary。
- 如果員工的 Commission 不為 NULL,則返回 Commission_pct。
- 如果員工賺取佣金,則返回名字以“P”開頭的員工以及 salary+(salary*commission_pct)。
- 查詢報錯是因為在 NVL2 函式中使用了數學表示式。
答案:C。NVL2 函式檢查第一個表示式。如果第一個表示式不為空,則 NVL2 函式返回第二個表示式;如果第一個表示式為空,則返回第三個表示式。
21. 關於 Oracle 資料庫中的 NULLIF 函式,下列說法正確的是?
- 如果兩個表示式都不為空,NULLIF(expr1,expr2) 將返回 expr2。
- 如果兩個表示式都為空,NULLIF(expr1,expr2) 將返回 0。
- 如果兩個表示式相等,NULLIF(expr1,expr2) 將返回 NULL。
- 在 NULLIF(expr1, expr2) 中,Expr1 可以為 NULL。
答案:C。NULLIF 函式測試兩個項是否相等。如果相等,則函式返回 NULL,否則返回測試的兩個項中的第一個。NULLIF 函式接受兩個任意資料型別的必選引數。語法為 NULLIF(arg1,arg2),其中引數 arg1 和 arg2 將進行比較。如果它們相同,則返回 NULL;如果它們不同,則返回 arg1。
22. 選擇以下語句的正確答案。
NULLIF (arg1,arg2)
- Arg1 和 Arg2 可以是不同資料型別。
- Arg1 和 Arg2 必須相等才能在 NULLIF 函式中使用。
- 如果使用 NULLIF,則不會像 NVL 和 NVL2 一樣進行內部資料型別轉換。
- 這相當於 CASE WHEN Arg1 = Arg22 THEN NULL ELSE Arg1 END。
答案:D。
23. 檢查給定的 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)
您需要從 HR 模式建立一個報表,顯示自僱傭以來更換過工作的員工。您執行以下查詢。
SELECT e.last_name, NULLIF(e.job_id, j.job_id,"Old Job ID") FROM employees e, job_history j WHERE e.employee_id = j.employee_id ORDER BY last_name;
上面給出的查詢結果是什麼?
- 當新的職位 ID 為 NULL 時,它將顯示舊的職位 ID。
- 它將成功執行併產生所需輸出。
- 如果新的職位 ID 等於舊的職位 ID,它將顯示新的職位 ID。
- 執行時將丟擲 ORA 錯誤。
答案:B。
24. 下列哪個不是函式的屬性?
- 對資料進行計算
- 轉換列資料型別
- 修改單個數據項
- 以上都不是
答案:D。函式可以執行計算、執行大小寫轉換和型別轉換。
25. 關於單行函式,最恰當的說法是什麼?
- 它們不返回值。
- 它們每行返回一個結果,並對錶的所有行進行操作。
- 它們每行返回一個結果,並帶有輸入引數。
- 它們每組行返回一個結果,並對多行進行操作。
答案:B。單行函式始終每行返回一個結果,並且它們僅對單行進行操作;因此,它們被稱為“單行”函式。
26. 下列哪一項是 Oracle SQL 函式的一種型別?
- 多行函式
- 單列函式
- 單值函式
- 多列函式
答案:A。函式主要分為兩種型別:單行函式和多行函式。
27. 下列哪一項是單行函式的一種型別?
- VARCHAR2
- 字元
- LONG
- NULLIF
答案:C。字元型、日期型、轉換型、通用型、數值型是單行函式的型別。(原文答案B錯誤,應為NULLIF)
28. 關於多行函式,最恰當的說法是什麼?
- 它們每行返回多個值。
- 它們每組行返回一個結果,可以操作多組行。
- 它們每行返回一個結果,可以操作多組行。
- 它們每組行返回多個值。
答案:B。多行函式始終作用於一組行,併為每組行返回一個值。
29. 下列哪些也稱為組函式?
- 單行函式
- 多組函式
- 多行函式
- 單組函式
答案:C。組函式與多行函式和聚合函式相同。
30. 關於單行函式,下列說法正確的是?
- 它們可以巢狀。
- 它們接受引數並返回多個值。
- 它們不能修改資料型別。
- 它們不能接受表示式作為引數。
答案:A。單行函式可以巢狀多層。
31. 單行函式接受的引數個數是多少?
- 0
- 只有 1 個
- 只有 2 個
- 1 個或多個
答案:D。單行函式可以根據其服務目標接受一個或多個引數。
32. 下列哪一項可以作為單行函式的引數?
- 資料型別
- SELECT 語句
- 表示式
- 表名
答案:C。使用者提供的常量、變數值、列值和表示式是單行函式的引數型別。
33. 關於字元函式,下列說法正確的是?
- 它們只返回字元值。
- 它們接受 NUMBER 值。
- 它們接受字元引數,並且可以返回字元值和數值。
- 它們接受所有資料型別的值。
答案:C。字元函式 INSTR 接受字串值,但返回字元在字串中的數字位置。
34. 關於數字函式,下列說法正確的是?
- 它們既返回字元值也返回數值。
- 它們不能接受表示式作為輸入。
- 數字函式不能巢狀。
- 它們接受數字引數,並且只返回數值。
答案:D。
35. 下列哪一項是 DATE 型別單行函式返回值的例外?
- TO_DATE
- SYSDATE
- MONTHS_BETWEEN
- TO_NUMBER
答案:C。所有 DATE 資料型別函式都返回 DATE 作為返回值,除了 MONTHS_BETWEEN 返回一個數字。
36. 下列哪一項不是轉換型別單行函式?
- TO_CHAR
- TO_DATE
- NVL
- TO_NUMBER
答案:C。(此處缺少選項C,無法翻譯) 轉換函式將值從一種資料型別轉換為另一種資料型別。NVL 函式將空值替換為備用值。
37. 下列哪一項是大小寫轉換字元函式?
- CONCAT
- SUBSTR
- INITCAP
- REPLACE
答案:B。CONCAT、SUBSTR 和 REPLACE 是字元操作字元函式,而 INITCAP、LOWER 和 UPPER 是大小寫轉換字元函式。
38. 下列查詢的結果是什麼?
SELECT lower('HI WORLD !!!') FROM dual;
- Hi World !!!
- Hi WORLD !!!
- hi world !!!
- HI WORLD !!!
答案:C。LOWER 函式將字串轉換為小寫字元。
39. 下列查詢的結果是什麼?
SELECT lower(upper(initcap('Hello World') )) FROM dual;
- Hello World
- HELLO world
- hello World
- hello world
答案:C。大小寫轉換字元可以巢狀在 SELECT 查詢中。
檢查給定的 EMPLOYEES 表結構,並回答以下第 40 至 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)
40. 下列哪個查詢的結果與以下查詢的結果相同?
SELECT CONCAT(first_name, last_name) FROM employees;
- SELECT first_name||last_name FROM employees;
- SELECT first_name||' ' || last_name FROM employees;
- SELECT last_name||', '||first_name FROM employees;
- SELECT first_name||','||last_name FROM employees;
答案:B。CONCAT 函式連線兩個字串,中間沒有任何空格。
41. 下列查詢的結果是什麼?
SELECT 'The job id for '||upper(last_name) ||' is a '||lower(job_id) FROM employees;
- ABEL 的職位 ID 是 sa_rep
- ABEL 的職位ID是sa_rep
- abel 的職位 ID 是 SA_REP
- abel 的職位 ID 是 sa_rep
答案:A。
42. 假設 employees 表中員工的姓氏是大寫開頭的,則以下查詢的結果是什麼?
SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'smith';
- 它將顯示姓氏為 Smith 的員工的詳細資訊。
- 它將不返回任何結果。
- 它將顯示姓氏為“smith”(全部小寫)的員工的詳細資訊。
- 它將顯示姓氏為“Smith”(首字母大寫)的員工的詳細資訊。
答案:B。如果 employees 表中的姓氏是大寫開頭的,則條件 WHERE last_name = 'smith' 將不滿足,因此不會顯示任何結果。
43. 關於 Oracle 資料庫中的 CONCAT 函式,下列說法正確的是?
- 它只能接受字元作為輸入。
- 它只能有兩個輸入引數。
- 它可以有兩個或多個輸入引數。
- 它預設在連線的字串之間新增空格來連線值。
答案:B。CONCAT 函式只接受兩個 NUMBER 或 VARCHAR2 資料型別的引數。(原文答案B錯誤,應為A)
44. 關於 Oracle 資料庫中的 SUBSTR 函式,下列說法正確的是?
- 它提取指定長度的字串。
- 它將字串的長度顯示為數值。
- 它查詢指定字元的數字位置。
- 它修剪字元字串中一側(或兩側)的字元。
答案:A。SUBSTR(string, x, y) 函式接受三個引數,並返回一個字串,該字串包含從源字串提取的字元數,從指定的起始位置 (x) 開始。當位置為正時,函式從字串的開頭開始計數以查詢第一個字元。當位置為負時,函式從字串的末尾開始倒著計數。
45. 下列查詢的結果是什麼?
SELECT length('hi') FROM dual;
- 2
- 3
- 1
- hi
答案:A。LENGTH 函式只給出字串的長度。
46. Oracle 資料庫中 LENGTH 和 INSTR 函式的區別是什麼?
- 當作用於字串時,它們給出相同的結果。
- LENGTH 給出字串中特定字元的位置。
- INSTR 給出字串中特定字元的位置,而 LENGTH 給出字串的長度。
- LENGTH 和 INSTR 可以互換使用。
答案:C。
47. 檢查給定的 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 upper(&jobid) FROM employees;
- 由於替換變數不能與單行函式一起使用,因此會導致錯誤。
- 它提示使用者在每次執行時輸入 jobid,然後以大寫形式顯示 jobid。
- 它按 EMPLOYEES 表中存在的 jobid 顯示,沒有任何更改。
- 它不會要求使用者輸入 jobid,並將表中的所有 jobid 轉換為大寫。
答案:B。替換變數可以與 UPPER 和 LOWER 函式一起使用。
48. 關於 Oracle 資料庫中的 DUAL 表,下列說法錯誤的是?
- 它由使用者 SYS 擁有,所有使用者都可以訪問。
- 它只包含一列和一行。
- DUAL 表的 DUMMY 列中的值為“X”。
- 當您只想返回一個值時,DUAL 表很有用。
答案:C。DUAL 表有一列名為 DUMMY,只有一行,值為 'X'。
49. 下列查詢的結果是什麼?
SELECT sysdate+4/12 FROM dual;
- 查詢產生錯誤。
- 以日期作為結果的日期的小時數。
- 忽略 Sysdate 算術運算。
- 返回系統日期作為結果。
答案:B。Oracle 資料庫中可以對日期進行算術運算。
50. 以下查詢的結果是什麼?
SELECT lower (100+100) FROM dual;
- 100
- 100+100
- ORA 錯誤
- 200
答案:D。可以在大小寫轉換函式中指定算術表示式。
51. 如果 SYSDATE = 20-MAY-13,以下查詢的結果是什麼?
SELECT upper (lower (sysdate)) FROM dual;
- 20-may-2013
- 由於 LOWER 和 UPPER 無法接受日期值,因此出現 ORA 錯誤。
- 20-MAY-13
- 20-May-13
答案:C。UPPER 和 LOWER 函式可以接受日期型別輸入,並且會產生與字串相同的結果。
52. 以下查詢的結果是什麼?
SELECT INITCAP (24/6) FROM dual;
- 4
- 24
- 24/6
- 無結果
答案:A。可以在大小寫轉換函式中指定算術表示式。
53. 檢查此處給出的 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)
您需要顯示所有以字母“A”開頭的員工的姓氏。以下哪個查詢將產生所需的結果?
SELECT INITCAP (last_name||' works as a '||job_id "Job Description" FROM employees WHERE initcap (last_name) like 'A%';
SELECT INITCAP (last_name) ||INITCAP(' works as a: ')|| INITCAP(job_id) "Job Description" FROM employees WHERE initcap (last_name) like 'A %';
SELECT INITCAP (last_name||' works as a '||INITCAP(job_id)) "Job Description" FROM employees WHERE initcap (last_name) = 'A';
SELECT UPPER (LOWER (last_name||' works as a '||job_id)) "Job Description" FROM employees WHERE lower (last_name) = 'A';
答案:A,B。
54. 假設 SYSDATE 為 20-FEB-13,以下查詢的結果是什麼?
SELECT CONCAT ('Today is :', SYSDATE) FROM dual;
- 今天是:20-feb-13
- 查詢丟擲不相容的型別引數錯誤。
- 今天是:20-Feb-13
- 今天是:20-FEB-13
答案:D。CONCAT 函式接受所有型別的引數。
55. 以下查詢的結果模式是什麼?
SELECT CONCAT(first_name, CONCAT (last_name, job_id)) FROM dual;
- First_namelast_namejob_id
- First_name, last_name, job_id
- 錯誤,因為 CONCAT 無法巢狀
- First_namelast_name, job_id
答案:A。CONCAT 函式可以與自身或其他字元函式巢狀。
56. 檢查此處給出的 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)
您需要生成一份報告,顯示 100 部門的全體員工的姓名和薪水。報告應以“Andy Smith earns 50000”的形式顯示結果。以下哪個查詢將給出所需輸出?
SELECT concat (first_name,concat (' ', concat(last_name, concat(' earns ', SALARY)))) Concat_String FROM employees WHERE department_id = 100;
SELECT concat (first_name, last_name||' '|| salary) FROM employees WHERE department_id = 100;
SELECT concat (first_name, concat(last_name, ' '))||earns||salary FROM employees WHERE department_id = 100;
SELECT concat (first_name, concat(last_name, 'earns salary') FROM employees WHERE department_id = 100;
答案:A。CONCAT 函式可以與自身或其他字元函式巢狀。
57. 以下查詢將顯示什麼結果?
SELECT LENGTH('It is a lovely day today!') FROM dual;
- 25
- 19
- 20
- 0
答案:A。LENGTH 函式也計算空格、製表符和特殊字元。
58. 您需要從 COUNTRIES 表中顯示國家名稱。國家名稱的長度應大於 5 個字元。以下哪個查詢將給出所需輸出?
SELECT country_name FROM countries WHERE LENGTH (country_name)= 5;
SELECT country_name FROM countries WHERE length (country_name)> 5;
SELECT SUBSTR(country_name, 1,5) FROM countries WHERE length (country_name)< 5;
SELECT country_name FROM countries WHERE length (country_name) <> 5;
答案:B。LENGTH 函式可以在 WHERE 子句中使用。
59. LPAD 函式如何作用於字串?
- 它將字串與列的左側對齊
- 它返回一個字串,該字串用指定數量的字元填充到源字串的右側
- 它將字元字串與列的左側對齊,將數字字串與列的右側對齊
- 它返回一個字串,該字串用指定數量的字元填充到源字串的左側
答案:D。LPAD(string, length after padding, padding string) 和 RPAD(string, length after padding, padding string) 函式在字串的左側或右側新增一個填充字元字串,直到達到指定的填充後長度。
60. 關於 LPAD 和 RPAD 函式,以下哪個選項為真?
- 用於填充的字元字串僅包含字元。
- 用於填充的字元字串僅包含字面量
- 用於填充的字元字串不能包含表示式。
- 用於填充的字元字串包含字面量、字元和表示式。
答案:D。
61. LPAD 和 RPAD 函式的最大輸入引數個數是多少?
- 1
- 2
- 3
- 0
答案:C。LPAD 和 RPAD 最多接受 3 個引數。如果給出 2 個引數,則填充空格。
62. 以下查詢的結果是什麼?
SELECT lpad (1000 +300.66, 14, '*') FROM dual;
- *******1300.66
- 1300*******
- 1300.66
- ****1300.66
答案:A。為了使總長度為 14 個字元,返回值 1300.66 在左側用 7 個星號 (*) 填充。
63. 關於 TRIM 函式,哪個說法是正確的?
- 它類似於 Oracle 中的 SUBSTR 函式
- 它刪除字元文字、列或表示式的開頭或結尾的字元
- TRIM 函式不能應用於表示式和數字
- TRIM 函式只能刪除字串兩側的字元。
答案:B。TRIM 函式從給定的源字串中實際修剪掉前導或尾隨(或兩者)字元字串。TRIM 函式後跟 TRAILING 或 LEADING 關鍵字時,可以刪除字串一側或兩側的字元。
64. 您需要刪除 MAGAZINE 表中書籍標題中字元“.”和雙引號“""的出現。
"HUNTING THOREAU IN NEW HAMPSHIRE" THE ETHNIC NEIGHBORHOOD."
以下哪個查詢將給出所需結果?
SELECT LTRIM(Title,'"') FROM MAGAZINE;
SELECT LTRIM(RTRIM(Title,'."'),'"') FROM MAGAZINE;
SELECT LTRIM (Title,'"THE') FROM MAGAZINE;
SELECT LTRIM(RTRIM(Title,'."THE'),'"') FROM MAGAZINE;
答案:B。LTRIM 和 RTRIM 函式可以組合使用。
65. 以下查詢將返回什麼結果?
SELECT INSTR('James','x') FROM dual;
- 1
- 2
- 0
- 3
答案:C。當給定字串中不存在搜尋字串時,INSTR 函式返回 0。
66. 以下查詢的結果是什麼?
SELECT INSTR('1$3$5$7$9$','$',3,4)FROM dual;
- 2
- 10
- 7
- 4
答案:B。INSTR 函式從第 3 個位置開始搜尋第 4 個出現的“$”。
67. 以下查詢的結果是什麼?
SELECT INSTR('1#3#5#7#9#', -3,2) FROM dual;
- #5
- #3
- #7
- #9
答案:D。SUBSTR 函式將從字串末尾開始搜尋 3 個位置,並將向前給出 2 個字元,給出 #9。
檢查下面給出的 EMPLOYEES 表的結構,並回答接下來的問題 68 和 69。
SQL> DESC employees Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4)
68. 您需要根據 EMPLOYEES 表中的 SALARY 列提取一個一致的 15 個字元的字串。如果 SALARY 值的長度小於 15 個字元,則必須在該值的左側新增零以產生一個 15 個字元的字串。哪個查詢將滿足此要求?
SELECT rpad(salary, 15,0) FROM employees;
SELECT lpad(salary,15,0) FROM employees;
SELECT ltrim(salary,15,0) FROM employees;
SELECT trim(salary,15,0) FROM employees;
答案:B。LPAD 和 RPAD 函式在字串的左側或右側新增一個填充字元字串,直到達到指定的填充後長度。
69. 您需要從 EMPLOYEES 表的 FIRST_NAME 列中顯示最後 2 個字元,而無需使用 LENGTH 函式。以下哪個查詢可以滿足此要求?
SELECT SUBSTR(first_name, 2) FROM employees;
SELECT SUBSTR(first_name, -2) FROM employees;
SELECT RTRIM(first_name, 2) FROM employees;
SELECT TRIM(first_name, 2) FROM employees;
答案:B。SUBSTR(string, x, y) 函式接受三個引數,並返回一個字串,該字串由從源字串中提取的字元數量組成,從指定的起始位置 (x) 開始。當位置為正時,函式從字串開頭開始計數以查詢第一個字元。當位置為負時,函式從字串末尾反向計數。
70. 假設 SYSDATE 為 13-JUN-13,以下查詢的結果是什麼?
SELECT SUBSTR(sysdate,10,7) FROM dual;
- 3
- N-13
- 0
- NULL
答案:D。查詢將給出 NULL,因為 SYSDATE 中從位置 10 開始不存在。
71. 在 Oracle 資料庫中,哪個用於替換給定字串中的特定字元?
- LTRIM
- TRIM
- TRUNC
- REPLACE
答案:D。
72. 以下查詢的結果是什麼?
SELECT replace(9999.00-1,'8',88) FROM dual;
- 999
- 9998
- 99988
- 9999.88
答案:C。REPLACE 函式在 9998 中搜索“8”,並將其替換為“88”。
73. 檢查此處給出的 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)
您需要檢索員工的姓名(用空格分隔)和正式姓名,其中姓名和姓名的組合長度超過 15 個字元。正式名稱由姓名的第一個字母和姓名的前 14 個字元組成。以下哪個查詢將滿足此要求?
SELECT first_name, last_name ,SUBSTR(first_name, 1,1)||' '||SUBSTR(last_name, 1,14) formal_name FROM employees;
SELECT first_name, last_name ,SUBSTR(first_name, 1,14)||' '||SUBSTR(last_name, 1,1) formal_name FROM employees WHERE length (first_name) + length(last_name) < 15;
SELECT first_name, last_name ,SUBSTR(first_name, 1,1)||' '||SUBSTR(last_name, 1,14) formal_name FROM employees WHERE length (first_name) + length(last_name) =15;
SELECT first_name, last_name ,SUBSTR(first_name, 1,1)||' '||SUBSTR(last_name, 1,14) formal_name FROM employees WHERE length (first_name) + length(last_name) > 15;
答案:D。
74. 以下查詢的結果是什麼?
SELECT round(148.50) FROM dual;
- 148.50
- 140
- 150
- 149
答案:D。如果缺少小數精度,則預設舍入度為 0,並且源四捨五入到最接近的整數。
75. 假設 sysdate 為 10-JUN-13,以下查詢的結果是什麼?
SELECT trunc (sysdate,'mon') FROM dual;
- 10-JUN-13
- 1-JUN-13
- ORA 錯誤,因為 TRUNC 函式在與日期一起使用時不能包含輸入引數。
- 31-JUN-13
答案:B。日期被截斷到當月的第一天。類似地,它也可以對年份執行此操作。
76. 以下查詢的結果是什麼?
SELECT trunc(1902.92,-3) FROM dual;
- 2000
- 1000
- 1901
- 1901.00
答案:B。
77. Oracle 資料庫中 MOD 函式的語法是什麼?
- Mod(divisor,dividend)
- MOD(divisor,1)
- MOD(dividend,divisor)
- 以上都不是
答案:C。MOD 函式用於獲取除法運算的餘數。
78. 以下查詢的結果是什麼?
SELECT mod(100.23,-3) FROM dual;
- ORA 錯誤
- 1.23
- 100
- 0
答案:B。對於正除數和負除數,MOD 函式給出相同的答案
79. 在 Oracle 資料庫中,哪些函式用於區分偶數或奇數?
- ROUND
- TRUNC
- MOD
- REPLACE
答案:C。MOD 函式可用於檢查給定數字是偶數還是奇數。如果 MOD (num,2) 返回零,則數字“num”為偶數。如果 MOD (num,2) 返回 1,則數字“num”為奇數。
80. 檢查下面給出的 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)
您需要將前 12 名員工輪流分配到四個團隊中的一個。員工 ID 從 100 開始。以下哪個查詢將滿足此要求?
SELECT * FROM employees WHERE employee_id between 100 and 111 ORDER BY employee_id;
SELECT first_name, last_name, employee_id, mod(employee_id, 4) Team# FROM employees WHERE employee_id between 100 and 111 ORDER BY employee_id;
SELECT first_name, last_name,mod(employee_id, 2) Team# FROM employees WHERE employee_ID <> 100;
SELECT first_name, last_name, mod(employee_id, 4) Team# FROM employees WHERE employee_ID = 100;
答案:B。
81. 以下查詢的結果是什麼?
SELECT SUBSTR('Life is Calling',1) FROM dual;
- ORA 錯誤,因為 SUBSTR 函式至少應有 3 個引數。
- Life is Calling
- NULL
- Life
答案:B。僅使用前兩個引數呼叫 SUBSTR 函式會導致函式從起始位置提取字串到給定源字串的末尾。
82. SQL Developer 中 sysdate 的預設資料格式是什麼?
- DD-MON-YY
- DD-MON-RR
- DD/MON/RR
- DD/MON/YYYY
答案:C。對於 SQL*PLUS,預設日期格式為 DD-MON-RR。
83. 假設 SYSDATE 為 10-JUN-2013 下午 12:05,執行以下查詢後返回什麼值?
SELECT add_months(sysdate,-1) FROM dual;
- 09-MAY-2013 下午 12:05
- 10-MAY-2013 下午 12:05
- 10-JUL-2013 下午 12:05
- 09-JUL-2013 下午 12:05
答案:B。ADD_MONTHS(date, x) 函式將“x”個日曆月新增到給定日期。'x' 的值必須是整數,可以為負數。
84. 執行以下語句後將返回什麼值?請注意,01-JAN-2013 發生在星期二。
SELECT next_day('01-JAN-2013','friday') FROM dual;
- 02-JAN-2013
- 星期五
- 04-JAN-2013
- 以上都不是
答案:C。NEXT_DAY(date,'day') 查詢日期後下一個指定的星期幾 ('day') 的日期。char 的值可以是表示一天的數字或字元字串。
85. ROUND 函式最多可以接受多少個引數?
- 0
- 1
- 2
- 3
答案:C。如果只有一個引數存在,則舍入到最接近的整數
86. 假設當前日期為 02-JUN-2007,則以 DD-MON-RR 格式返回 24-JUL-2004 日期對應的世紀是多少?
- 19
- 21
- 20
- NULL
答案:C。如果當前年份和指定年份的兩位數介於 0 和 49 之間,則返回當前世紀。
87. 假設當前日期為 02-JUN-2007,則以 DD-MON-RR 格式返回 24-JUL-94 日期對應的世紀是多少?
- 19
- 21
- 20
- NULL
答案:A。如果當前年份的兩位數介於 0 和 49 之間,並且指定年份介於 50 和 99 之間,則返回上一個世紀。
88. 假設當前日期為 02-JUN-1975,則以 DD-MON-RR 格式返回 24-JUL-94 日期對應的世紀是多少?
- 19
- 21
- 20
- NULL
答案:A。如果當前年份和指定年份的兩位數介於 50 和 99 之間,則預設情況下返回當前世紀。
89. 假設當前日期是 1975年6月2日,那麼使用 DD-MON-RR 格式表示的 07年7月24日的世紀將返回什麼?
- 19
- 21
- 20
- NULL
答案:C. 如果當前年份的兩位數字介於 50 和 99 之間,並且指定年份介於 0 和 49 之間,則返回下一個世紀。
90. SYSDATE 函式接受多少個引數?
- 1
- 2
- 4
- 0
答案:D. SYSDATE 是 Oracle 中的偽列。
91. 關於 Oracle 資料庫中的 SYSDATE 函式,以下哪一項是正確的?
- 它只返回系統日期
- 它至少需要 2 個引數。
- 預設格式為 DD-MON-YY
- SYSDATE 的預設格式為 DD-MON-RR,它根據資料庫伺服器返回系統日期和時間。
答案:D。
92. 以下操作的結果資料型別是什麼?
"Date3 = Date1-Date2"- 日期
- 數字
- 0
- NULL
答案:B. 兩個日期相減的結果是天數。
93. 以下操作的結果資料型別是什麼?
"Date2 = Date1-Num1"- 日期
- 數字
- 0
- NULL
答案:A. 從日期值中減去一個數字的結果是日期。
94. 在 Oracle 資料庫中,兩個日期之間的差表示什麼?
- 它們之間相隔的天數
- 在 Oracle 資料庫中無法計算日期差
- 一個日期
- NULL
答案:A。
95. 以下查詢的結果是什麼?
SELECT months_between('21-JUN-13','19-JUN-13') FROM dual;
- ORA 錯誤
- 一個正數
- 一個負數
- 0
答案:C. 如果第一個引數小於第二個引數,則 MONTHS_BETWEEN 返回一個負數。
96. 如果 MONTHS_BETWEEN (start_date,end_date) 函式的結果是一個小數,可以推斷出什麼?
- 它表示開始日期和結束日期之間的數量差。
- 結果不能是小數,它必須是整數。
- NULL
- 它表示計算出年份和月份之間的整數差後剩餘的天數和時間,並基於 31 天的月份。
答案:D。
97. 你從印度連線到瑞士的遠端資料庫。你需要從資料庫中查詢印度當地時間。以下哪項將給出所需的結果?
SELECT sysdate FROM dual;
SELECT round(sysdate) FROM dual;
SELECT trunc (sysdate) FROM dual;
SELECT current_date FROM dual;
答案:D。
98. 以下查詢的結果是什麼?
SELECT months_between (to_date ('29-feb-2008'), to_date ('29-feb-2008 12:00:00','dd-mon-yyyy hh24:mi:ss'))*31 FROM dual;
- 大約 0
- 1
- 查詢將丟擲 ORA 錯誤
- 0.5 天
答案:D. MONTHS_BETWEEN(date1, date2) 查詢 date1 和 date2 之間的月份數。結果可以是正數或負數。如果 date1 晚於 date2,則結果為正;如果 date1 早於 date2,則結果為負。結果的非整數部分表示月份的一部分。
99. 以下查詢的結果是什麼?
SELECT add_months ('31-dec-2008',2.5) FROM dual;
- 2009年2月31日
- 2009年2月28日
- 2009年3月31日
- 2009年1月15日
答案:B. 將忽略 2.5 的小數部分,並將 2 個月新增到 2012年12月31日,即 2013年2月31日,但由於這不是有效的日期,因此結果是 2009年2月28日。
100. 你需要確定員工將在 11 月份哪一天獲得工資。獎金在 11 月份的最後一個星期五支付。以下哪項將滿足要求?
SELECT next_day ('30-nov-2012' , 'Friday') FROM dual;
SELECT next_day ('30-nov-2012' , 'Friday') -7 FROM dual;
SELECT last_day ('01-nov-2012' ) FROM dual;
SELECT next_day ('30-nov-2012' , 'sat') -1 FROM dual;
答案:B. NEXT_DAY(date,'day') 和 LAST_DAY (date,'day') 函式查詢 date 之後下一個或最後一個指定的星期幾 ('day') 的日期。char 的值可以是表示一天的數字或字元字串。