- 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 的值可以是表示一天的数字或字符字符串。