- 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。