SQL - 数据限制和排序问题



1. 以下哪个子句用于限制从 SELECT 查询中检索的行数?

  1. LIMIT
  2. WHERE
  3. AND
  4. FROM

答案:B. WHERE 子句用于限制 SELECT 查询返回的行数。

2. 选择可以在 SELECT 查询的 WHERE 子句中比较其值的数据库元素。

  1. 序列
  2. 过程
  3. 字面量

答案:A、D. WHERE 子句可用于比较列、字面量、算术函数和函数的值。

3. SELECT 查询的 WHERE 子句谓词中不包含哪些元素?

  1. 比较运算符
  2. 比较条件
  3. 列名
  4. 表名

答案:D. WHERE 子句谓词不需要表名。

4. WHERE 子句条件评估后,以下哪个值不能返回?

  1. UNKNOWN
  2. TRUE
  3. FALSE
  4. NULL

答案:A. 如果 WHERE 子句中条件的结果未知,则返回 NULL。在所有其他情况下,返回 TRUE 或 FALSE。

5. SELECT 查询中必须存在的 WHERE 子句的最小数量是多少?

  1. 1
  2. 2
  3. 0
  4. 3

答案:C. WHERE 子句是 SELECT 查询中的可选子句,仅用于限制行数。

6. SELECT 查询中可以包含的 WHERE 子句的最大数量是多少?

  1. 1
  2. 2
  3. 0
  4. 3

答案:A. WHERE 子句是 SELECT 查询中的可选子句,只能使用一次来限制行数。

7. 关于 WHERE 子句,以下哪些陈述是正确的?

  1. 可以在 WHERE 子句中使用列别名来引用列
  2. 比较运算符是 WHERE 子句条件中的可选元素
  3. 函数可以用作 WHERE 子句中的操作数
  4. SELECT 查询中可以有多个 WHERE 子句

答案:C. WHERE 子句必须有比较运算符来评估条件。它可以使用函数作为操作数之一。SELECT 查询中只允许一个 WHERE 子句。

8. 编写一个 SELECT 查询,列出 EMP 表中唯一的部门。

  1. SELECT deptno FROM emp;
  2. SELECT DISTINCT deptno FROM emp;
  3. SELECT DISTINCT (deptno) FROM emp;
  4. SELECT empno, DISTINCT deptno FROM emp;

答案:B & C. DISTINCT 关键字用于从 SELECT 查询中过滤掉重复的行。

9. 以下哪些操作允许用于日期和时间戳列?

  1. 除法
  2. 加法
  3. 减法
  4. 连接

答案:B、C 和 D. 加法、减法和连接是允许用于日期和时间戳列的操作。

10. 从以下运算符中,哪个运算符具有最高的优先级?

  1. 除法 (/)
  2. 乘法 (*)
  3. 括号 ( ( ) )
  4. 减法

答案:C. 括号内的表达式具有最高的优先级。

11. 解释以下 SELECT 查询返回的输出

SELECT ename, (sysdate - hiredate)
FROM emp;
  1. 今年的天数
  2. 员工入职年份的天数
  3. 员工在公司工作的天数
  4. 查询引发异常“ORA-00932: inconsistent datatypes: expected NUMBER got DATE”

答案:C. 表达式 (sysdate-hiredate) 返回员工在公司工作的天数。

12. 以下哪些陈述正确地描述了 Oracle 中的 DUAL 表?

  1. DUAL 表是 Oracle 数据库中的临时表
  2. DUAL 表仅包含一个名为 DUMMY 的字符类型列
  3. SYS 拥有的 DUAL 表不能被删除
  4. 用户可以在其自己的模式中创建名为 DUAL 的表

答案:B、C、D. Oracle 中的 DUAL 表由 SYS 拥有,并包含一个类型为 VARCHAR2(1) 的 DUMMY 列。

13. 确定以下查询返回的输出类型

SELECT sysdate - hiredate
FROM emp
WHERE empno=7369;
  1. DATE 数据类型
  2. NUMBER 数据类型
  3. VARCHAR2 数据类型
  4. 查询引发错误,因为无法对日期列执行算术运算

答案:B. 两个日期之间的减法会得到两个日期之间相差的天数的数值。

14. 哪些表达式不会返回 NULL 值?

  1. SELECT ((10 + 20) * 50) + null from dual;
  2. SELECT 'this is a '||null||'test with nulls' from dual;
  3. SELECT null/0 from dual;
  4. SELECT null||'test'||null as “Test” from dual;

答案:B、D. 任何带有 NULL 的算术运算都会导致 NULL。

15. 确定以下查询的输出

SELECT 'Tutorial''s Point compiles technical tutorials' FROM DUAL;
  1. Tutorial''s Point 编译技术教程
  2. Tutorial's Point 编译技术教程
  3. 'Tutorial''s Point 编译技术教程'
  4. 引发异常“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 语句可以成功执行?(选择两个)
  1. SELECT NVL (ADD_MONTHS (END_DATE,1),SYSDATE) FROM training;
  2. SELECT TO_DATE (NVL(SYSDATE-END_DATE,SYSDATE)) FROM training;
  3. SELECT NVL(MONTHS_BETWEEN(START_DATE,END_DATE),’In Progress’) FROM training;
  4. SELECT NVL(TO_CHAR(MONTHS_BETWEEN(START_DATE,END_DATE)),’In Progress’) FROM training;

答案:A、D. 使用 NVL 函数为列在为 NULL 时提供替代值。

17. SELECT 语句中列的选择被称为什么?

  1. 检索
  2. 选择
  3. 投影
  4. 限制

答案:C. 投影是在 SELECT 语句中选择所需列的能力。

18. SELECT 语句返回行的限制被称为什么?

  1. 检索
  2. 投影
  3. 限制
  4. 选择

答案:C. 限制是通过设置某些条件来限制行数的能力。

19. 关于以下查询,以下哪一项是正确的?

SELECT col1, col2 
FROM tab1
ORDER BY col1;
  1. 列 COL1 的所有行将按降序排序。
  2. 列 COL1 的所有行将按升序排序。
  3. 查询会报错,因为查询中没有 WHERE 子句。
  4. 查询会报错,因为 ORDER BY 子句应包含 SELECT 子句中的所有列。

答案:B. 默认情况下,ORDER BY 子句按升序排序值。

20. 关于以下 SQL 查询,以下哪一项是正确的?

SELECT col1,col2
FROM tab1
WHERE col1 = 'A'
ORDER BY col2 DESC, col1;
  1. 它将显示 col1 值为“A”的行,并按 col1 降序排序,然后按 col2 降序排序。
  2. ORDER BY 子句将不起作用,因为关键字 DESC 应始终写在 ORDER BY 子句的末尾,而不是像查询中那样写在中间。
  3. 以上查询将根据 col2 降序排序,而 ORDER BY 子句中 col1 的使用将被丢弃。
  4. 它将显示 col1 值为“A”的行,并按 col1 排序,然后按 col2 排序,因为 ORDER BY 子句的执行是从 SELECT 语句中列的顺序开始的。

答案:C. 由于 COL1 在查询中已作为标量值被过滤和固定,因此不会根据 COL1 进行排序。

21. 关于以下查询,哪一项是正确的?

SELECT col1, col2
FROM  tab1
ORDER BY col1,col2
WHERE col2 = 'B';
  1. 它成功执行
  2. 它会得到 COL2 值为“B”的所需结果,但不会按列 COL1 和 COL2 排序,因为 ORDER BY 子句出现在 WHERE 子句之前。
  3. 它将显示 COL2 值为“B”的行,并按 COL1、COL2 排序。
  4. 它会报错,因为在 Oracle 中,ORDER BY 子句不能写在 WHERE 子句之前。

答案:D. ORDER BY 子句必须出现在 SELECT 语句的 WHERE 子句之后

22. SELECT 语句的哪些两个子句对于选择和投影是必要的?

  1. SELECT、FROM
  2. ORDER BY、WHERE
  3. SELECT、WHERE
  4. SELECT、ORDER BY

答案:C。

23. 以下哪个 WHERE 子句不适合下面的 SELECT 查询?

SELECT ename, deptno, sal 
FROM emp;
  1. WHERE HIREDATE IN ('02-JUN-2004');
  2. WHERE SAL IN ('1000','4000','2000');
  3. WHERE JOB IN (SALES,CLERK);
  4. WHERE COMM BETWEEN 0.1 AND 0.5;

答案:C. 字符串字面量必须用单引号括起来

24. 选择从 DEPT 表中提取包含字符字面量“er”的 DNAME 值的 WHERE 子句。

  1. WHERE DNAME IN ('%e%r');
  2. WHERE DNAME LIKE '%er%';
  3. WHERE DNAME BETWEEN 'e' AND 'r';
  4. WHERE DNAME CONTAINS 'e%r';

答案:B. LIKE 运算符用于在 SQL 查询中执行通配符搜索。

25. 以下哪些条件彼此等效?(选择两个)

  1. WHERE comm IS NULL
  2. WHERE comm = NULL
  3. WHERE comm IN (NULL)
  4. WHERE NOT(comm IS NOT NULL)

答案:A、D. NOT 运算符可用于否定其操作数的效果。因此 (COMM IS NULL) 等效于 (NOT (COMM IS NOT NULL))。

26. SQL 查询中哪些子句是必须的?

  1. SELECT、FROM
  2. SELECT、FROM、WHERE
  3. SELECT、WHERE
  4. SELECT、WHERE、ORDER BY

答案:A. SELECT 和 FROM 是 SELECT 查询中的必须子句。

27. 以下哪些 WHERE 子句条件彼此等效?(选择三个)

  1. WHERE SAL <=5000 AND SAL >=2000
  2. WHERE SAL IN (2000,3000,4000,5000)
  3. WHERE SAL BETWEEN 2000 AND 5000
  4. WHERE SAL > 1999 AND SAL < 5001

答案:A、C、D. 使用 IN、BETWEEN 和关系运算符可以使这些条件等效。

28. 关于以下查询,以下哪一项是正确的?

SELECT empno, ename, job
FROM emp
WHERE ename like '_ith%';
  1. 它获取姓名中任何位置都包含“ith”的员工的员工 ID、姓名和职位。
  2. 它获取姓名以“ith”开头的员工的员工 ID、姓名和职位。
  3. 查询会报错,因为不能同时编写两个字符串匹配表达式。
  4. 它获取姓名以任何字母数字字符开头,后跟“ith”,然后是“ith”之后任何字母数字字符的员工的员工 ID、姓名和职位。

答案:D。

29. 以下哪个用于结束 SQL 查询?

  1. :
  2. ;
  3. .
  4. /

答案:B、D。 在SQL*Plus和SQL Developer中,分号 (;) 或反斜杠 (/) 用于终止查询。

30. 员工JAMES和MILLER想通过查询数据库来了解他们的部门ID。以下哪个查询可以得到所需的结果?

  1. SELECT ename, deptno FROM emp WHERE ename = 'JAMES';
  2. SELECT ename, deptno FROM emp WHERE ename = 'MILLER';
  3. SELECT ename, deptno FROM dept
  4. SELECT ename, deptno FROM emp WHERE ename = 'JAMES' OR ename = 'MILLER' 

答案:D。可以使用OR子句连接多个条件。如果两个条件中的任何一个为真,则查询执行成功。

31. 关于WHERE子句,以下哪一项是错误的?

  1. WHERE子句可以比较列中的值、字面量、算术表达式或函数。
  2. WHERE子句包含列名。
  3. WHERE子句可以使用列别名。
  4. WHERE子句不能包含值列表或常量。

答案:C、D。

32. Oracle中的默认日期格式是什么?

  1. DD-MON-YY
  2. DD-MON-YYYY
  3. DD-MM-RR
  4. 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”;
  1. 它获取所有SALES员工的员工数据。
  2. 它抛出错误“ORA-00904: "01-JAN-13": 无效标识符”
  3. 查询成功执行,但没有返回结果。
  4. 它获取所有于1997年1月1日入职的SALES员工的数据。

答案:B。日期字面量必须用单引号括起来。

34. 您需要显示EMPLOYEES表中所有名为“GARRY”的员工的姓名。以下哪个查询可以满足要求?

  1. SELECT first_name FROM employees WHERE first_name LIKE 'GARRY%';
  2. SELECT first_name FROM employees WHERE first_name LIKE '%GARRY%';
  3. SELECT first_name FROM employees WHERE first_name LIKE 'GARRY';
  4. SELECT first_name FROM employees WHERE first_name LIKE '_ARRY%';

答案:C。如果搜索字符串的某些字符未知,可以使用通配符。

35. 您需要显示所有姓氏的第二个字母为's'且部门ID为100的员工的员工ID。以下哪个查询可以获取所需的结果?

  1. SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '%s%';
  2. SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '%s_';
  3. SELECT emp_id FROM employees WHERE dept_id = 100 AND last_name LIKE '_s_%';
  4. 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';
  1. 将显示所有1998年入职员工的姓名和部门ID。
  2. 将显示所有2098年入职员工的姓名和部门ID。
  3. 不会返回任何结果。
  4. 将显示所有在1998年1月1日至1998年12月31日期间入职的员工的姓名和部门ID。

答案:D。LIKE运算符用于对字符和日期字面量执行通配符搜索。

37. 使用以下哪个选项可以根据值的范围获取行?

  1. UNION ALL
  2. IN
  3. BETWEEN
  4. LIKE

答案:C。BETWEEN运算符用于根据值的范围检索行。

38. 您需要显示薪水在20000(含)到50000(含)之间的员工的员工ID。以下哪个查询可以获取所需的结果?

  1. SELECT emp_id FROM employees WHERE salary >=20000 AND salary <=50000;
  2. SELECT emp_id FROM employees WHERE salary IN (20000, 50000);
  3. SELECT emp_id FROM employees WHERE salary >20000 AND salary <50000;
  4. 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%';
  1. 它将显示所有姓氏以字母“B”开头到“E”(包含“B”,不包含“E”)的员工。
  2. 它将抛出错误,因为BETWEEN只能用于数字,不能用于字符串。
  3. 它将显示所有姓氏从“B”到“E”的员工。
  4. 它将显示所有姓氏的首字母在“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;
  1. 它将显示所有在ID范围从100到300的经理手下工作的员工。
  2. 它将显示所有在ID为100、200或300的经理手下工作的员工。
  3. 它将抛出错误,因为经理ID应该用引号括起来。
  4. 它将抛出错误,因为WHERE子句中manager_id的排序与ORDER BY子句冲突。

答案:B。IN运算符可用于提供少量有限的范围。

41. 以下哪个子句定义了成员资格条件?

  1. BETWEEN
  2. LIKE
  3. IS NULL
  4. IN (NOT IN)

答案:D。IN运算符定义了一个成员资格条件,该条件可以使用一系列值或子查询。

42. IN运算符可以使用哪些数据类型?

  1. VARCHAR2
  2. NUMBER
  3. DATE
  4. ALL

答案:D。IN运算符适用于所有类型的值。

43. 您需要显示所有名为“Bryan”或“Jason”的员工列表。以下哪个查询可以满足要求?

  1. SELECT emp_id, last_name, first_name FROM employees WHERE first_name LIKE 'Bryan%' OR first_name LIKE 'Jason%';
  2. SELECT emp_id, last_name, first_name FROM employees WHERE first_name BETWEEN 'Bryan' and 'Jason' ;
  3. SELECT emp_id, last_name, first_name FROM employees WHERE first_name IN ('Bryan', 'Jason');
  4. SELECT emp_id, last_name, first_name FROM employees WHERE first_name = 'Bryan' OR first_name = 'Jason'

答案:C、D。IN运算符检查作为成员资格条件定义的任何值。

44. 您需要提取名称包含字符串'_DXX'的部门的详细信息。以下哪个WHERE子句可以用于SELECT语句以获取所需输出?

  1. WHERE dept_id LIKE '%_DXX%' ESCAPE '_'
  2. WHERE dept_id LIKE '%\_DXX%' ESCAPE '\'
  3. WHERE dept_id LIKE '%_D123%' ESCAPE '%_'
  4. WHERE dept_id LIKE '%\_D123%' ESCAPE '\_'

答案:B。

45. 关于ORDER BY子句的默认行为,哪条语句是正确的?

  1. 在字符排序中,值区分大小写。
  2. 排序操作根本不考虑NULL值。
  3. 只有SELECT列表中指定的列才能在ORDER BY子句中使用。
  4. 如果数值具有小数位,则将从最大值显示到最小值。

答案:A。ORDER BY子句对字符值进行区分大小写的排序。

46. 您需要根据以下条件生成EMPLOYEES表中所有员工的报表:1. 员工名不以'T'或'N'开头。2. 员工薪水超过20000。3. 员工入职时间在2010年1月1日之后。哪个WHERE子句可以得到所需的结果?

  1. WHERE first_name NOT LIKE 'T%' OR first_name NOT LIKE 'N%' AND salary > 20000 AND hire_date > '1-JAN-10'
  2. WHERE (first_name NOT LIKE 'T%' AND first_name NOT LIKE 'N%')OR salary > 20000 OR hire_date > '1-JAN-10'
  3. WHERE first_name NOT LIKE 'T%' AND first_name NOT LIKE 'N%' AND salary > 20000 AND hire_date > '1-JAN-10'
  4. 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日之后入职的所有员工的姓名,从应届毕业生开始。哪个查询可以得到所需的结果?(选择所有适用的选项。)

  1. SELECT first_name, hire_date FROM employees WHERE hire_date > '01-JAN-13' ORDER BY 2 DESC;
  2. SELECT first_name, hire_date FROM employees WHERE hire_date > '01-JAN-13' ORDER BY first_name DESC;
  3. SELECT first_name, hire_date FROM employees WHERE hire_date > '01-JAN-13' ORDER BY 1 DESC;
  4. 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部门入职的所有员工的姓名和薪水。哪些两个查询可以得到所需的结果?(选择两个。)

  1. SELECT first_name, salary FROM employees WHERE dept_id IN (100,101) AND hire_date BETWEEN '15-MAR-12' AND '15-OCT-12';
  2. 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';
  3. SELECT first_name, salary FROM employees WHERE (dept_id BETWEEN 100 AND 101) AND (hire_date IN ('15-MAR-12','15-OCT-12'));
  4. 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错误。错误的原因是什么?

  1. SELECT语句中使用的表达式缺少括号。
  2. 必须使用单引号定义列别名。
  3. WHERE子句中不能使用列别名。
  4. 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 <> '';

关于以上查询,哪条语句是正确的?

  1. 它成功执行,但没有返回结果。
  2. 它成功执行并返回所需的结果。
  3. 它生成错误,因为为job_id指定的条件无效。
  4. 它生成错误,因为为salary列指定的条件无效。

答案:A。条件(salary = 2000 OR salary = 4000)结果为FALSE,因为员工一次不能拥有多份薪水。

51. 使用Oracle数据库中内置的SQL函数可以执行哪些三项任务?(选择三个。)

  1. 以非默认格式显示日期
  2. 查找表达式中的字符数
  3. 用指定的字符串替换文本表达式中的字符字符串
  4. 将两个以上的列或表达式组合到输出中的单个列中

答案: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;

关于以上查询,哪条语句是正确的?

  1. 它执行并产生所需的结果。
  2. 它产生错误,因为ORDER BY子句中不能使用表达式。
  3. 它产生错误,因为DESC选项不能与ORDER BY子句中的表达式一起使用。
  4. 它产生错误,因为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语句将成功执行?(选择三个。)

  1. SELECT start_date + '10' FROM trainings;
  2. SELECT * FROM trainings WHERE start_date = '01-01-10';
  3. SELECT training_cost FROM trainings WHERE training_id > '11';
  4. SELECT * FROM trainings WHERE start_date ='01-JANUARY-10';

答案:A、C、D。

54. 关于以下查询,以下哪项陈述是正确的?

SELECT emp_id, first_name 
FROM employees
ORDER BY dept_id;
  1. ORDER BY子句只能包含SELECT语句中的列。
  2. 以上查询将按降序对结果集进行排序。
  3. ORDER BY子句可以包含相关表中的任何列,而不一定是SELECT语句中的列。
  4. 它在执行时会抛出错误。

答案:C。ORDER BY子句可以使用一个列来排序数据,该列未在列列表中选择,但包含在FROM子句中使用的表中。

55. 以下查询演示了ORDER BY子句的哪个特性?

SELECT emp_id, first_name “EmpName”
FROM employees
ORDER BY "EmpName";
  1. ORDER BY子句只能包含SELECT语句中的列。
  2. 以上查询将按员工姓名的降序对结果集进行排序。
  3. ORDER BY子句与列别名一起使用。
  4. SELECT查询在执行时会抛出错误,因为ORDER BY子句中不能使用列别名。

答案:C。ORDER BY子句可以与SELECT语句中使用的列别名一起正常工作。

56. 关于下面给出的查询,哪一项是正确的?

SELECT last_name, job_id, department_id, hire_date 
FROM employees
ORDER BY 2;
  1. 它成功执行,根据JOB_ID对查询结果进行排序。
  2. ORDER BY子句不能包含数字。
  3. ORDER BY子句将不起作用,因为SELECT语句中没有任何列在ORDER BY子句中使用。
  4. 查询执行时报错。

答案:A。可以在ORDER BY子句中使用列的数字位置。

57. 你需要列出不同工作的员工详细信息,但一次只列出一个工作。

SELECT emp_id, first_name, last_name FROM employees WHERE job_id....;

在SQL*Plus中,以下哪种方法更容易实现相同的结果?

  1. 每次替换一个工作 ID
  2. 使用*列出所有员工的详细信息
  3. 使用&JOB在每次执行查询时提示用户输入
  4. 声明会话变量以替换查询中的工作 ID 值

答案:C。&X表示法会暂停查询执行,并在每次执行查询时提示用户输入。

58. 关于SQL中的替换变量,以下哪个说法是正确的?

  1. 可以使用替换变量对不同的值执行相同的查询。
  2. 使用替换变量,需要每次都更改WHERE子句。
  3. Oracle不支持替换变量。
  4. 每次执行查询时,都必须在替换变量中输入一个值,这是有限制的。

答案:A。

59. 为替换变量分配哪种数据类型?

  1. VARCHAR2
  2. DATE
  3. 无数据类型
  4. NUMBER

答案:C。替换变量本身没有数据类型,但会符合与其一起使用的列的数据类型。

60. 关于替换变量,以下哪项是正确的?

  1. 变量中输入的值保持不变,用户在第一次执行查询后无法更改值。
  2. 查询执行一次后,值将存储在变量中。
  3. 替换变量只支持数字。
  4. 使用单个与号(&)存储在替换变量中的值用于第一次执行,然后被丢弃。

答案:D。

61. 以下哪个是SQL*Plus中替换变量的正确语法?

  1. :var
  2. $var
  3. &var
  4. &&var

答案:C、D。

62. 以下哪个替换变量将只接受一次输入值,然后将其保留在会话的其余部分?

  1. &&var
  2. &var
  3. :var
  4. ::var

答案:A。带有双与号的替换变量会重复使用用户提供的一次值。

63. 关于替换变量,以下哪个说法是正确的?

  1. 只能输入数字作为值。
  2. 只能输入字符字符串作为值。
  3. 可以输入数字和字符作为值。
  4. 以上都不是。

答案:C。

64. 下面给出的查询有什么特点?

SELECT first_name, last_name, employee_id, salary 
FROM employees 
WHERE employee_id = &eid;
  1. 它抛出错误“ORA-00904: “&eid”: 无效标识符”
  2. 它成功执行。
  3. WHERE子句不能包含替换变量。
  4. 查询提示输入变量&eid的值,并在采用有效的employee_id值后成功执行。

答案:B, D。

65. 选择以下关于下面给出的查询的正确陈述。

SELECT first_name, last_name, &&prompt_col 
FROM employees
ORDER BY &&promp_col;
  1. 它抛出错误,因为不允许使用替换变量prompt_col。
  2. 它成功执行,但结果集未排序。
  3. 它成功执行,但在SELECT语句中输入的变量值被忽略。
  4. 它成功执行,并且替换变量的值在整个会话中保持不变。

答案:D。替换变量可以在SQL查询的所有子句中使用。

66. 在SQL*Plus中,哪个命令用于创建和为替换变量赋值?

  1. &var
  2. &&var
  3. SET
  4. 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;
  1. SELECT查询抛出错误,因为无法在会话中定义替换变量。
  2. 它提示用户输入变量&eid的值。
  3. 它成功执行,并将员工ID替换为117。
  4. 它忽略DEFINE命令,因为替换变量声明时没有使用与号(&)符号。

答案:C。

68. 删除由DEFINE命令设置的替换变量值的命令是什么?

  1. UNDEFINE
  2. SET OFF
  3. DELETE
  4. CLEAR

答案:A。使用UNDEFINE命令从会话中删除替换变量。

69. 以下哪个命令用于在SQL查询执行前后检查替换变量的值?

  1. DEFINE
  2. UNDEFINE
  3. SHOW VARIABLE
  4. VERIFY

答案:D。在SQL*Plus和SQL Developer中使用VERIFY命令检查使用替换变量的值替换。

70. 以下哪些是WHERE子句的有效运算符?

  1. >=
  2. IS NULL
  3. !=
  4. IS LIKE

答案:A, B, C。

71. 评估以下查询

SELECT ename || q'{'s salary is }' || sal
AS "Salary"
FROM emp;
执行上述查询时会发生什么?
  1. 由于无法与[q]运算符一起使用括号而导致错误
  2. 由于数据类型不匹配而导致错误
  3. 成功执行,并在每个员工姓名的末尾添加一个撇号('s)
  4. 成功执行,并将员工姓名附加到文字“{'s start date was }”

答案:C。

72. 以下哪个WHERE子句谓词可以正确列出来自20部门的员工?

  1. WHERE deptno IS 20
  2. WHERE deptno 20
  3. WHERE deptno=20
  4. WHERE 20=deptno

答案:C, D。等号运算符(=)用于比较条件中操作数的相等性。

73. 编写一个SELECT查询,列出薪水大于1000的员工。

  1. SELECT ename, sal FROM emp WHERE sal GREATER THAN 1000 
  2. SELECT ename, sal FROm emp WHERE sal > 1000
  3. SELECT ename, sal FROM emp WHERE sal >= 1000
  4. 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;
  1. 成功执行,并列出薪水的十分之一大于其部门编号十倍的员工
  2. 由于表达式必须用括号括起来而导致错误
  3. 由于WHERE子句无法评估表达式而导致错误
  4. 由于WHERE子句无法使用文字而导致错误

答案:A。WHERE子句可以包含表达式。

75. 确定下面SELECT语句中的错误

SELECT ename, deptno, sal
FROM emp
WHERE job=CLERK;
  1. WHERE子句无法引用JOB列,因为它没有出现在SELECT列列表中
  2. 字符文字CLERK必须用单引号括起来
  3. 字符文字CLERK必须用括号括起来
  4. 查询中没有错误

答案:B。字符文字必须用单引号括起来

76. 解读下面SQL查询的输出

SELECT ename, deptno, sal
FROM emp
WHERE sysdate-hiredate > 100;
  1. 查询列出其入职日期至少比当前日期早100天的员工
  2. 查询列出在公司工作超过100天的员工
  3. 查询列出入职日期在当年100天之后的员工
  4. 查询列出在公司工作少于100天的员工

答案:A, B。日期表达式可以在WHERE子句中使用

77. 以下哪个查询将显示1982年12月31日之后入职的员工?

  1. SELECT ename, deptno FROM emp WHERE hiredate > '31-DEC-1982';
  2. SELECT ename, deptno FROM emp WHERE hiredate > to_date('31-DEC-1982','DD-MM-YYYY');
  3. SELECT ename, deptno FROM emp WHERE hiredate > to_char('31-DEC-1982','DD-MM-YYYY');
  4. SELECT ename, deptno FROM emp WHERE hiredate > 31-DEC-1982;

答案:A, B。日期文字必须用单引号括起来。

78. 以下哪个WHERE条件将列出在当前日期入职的员工?

  1. WHERE sysdate-hiredate=0
  2. WHERE sysdate=hiredate
  3. WHERE sysdate-hiredate<1
  4. WHERE to_date (sysdate,'DD-MON-YYYY') = to_date (hiredate='DD-MON-YYYY')

答案:C, D。条件SYSDATE=HIREDATE不起作用,因为SYSDATE包含动态时间戳组件,而hiredate是数据库中的静态值。

79. 以下哪些是可以在WHERE子句中使用的日期文字的有效格式?

  1. 24/Mar/95
  2. 02-12-1983
  3. 19-JUN-2001
  4. 31.04.2010

答案:A, C。日期文字的默认格式为DD-MON-RR。

广告