- 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.以下哪个与关系数据库无关?
- 选择
- 投影
- 连接
- 以上均不正确
答案:D. 选项 A、B 和 C 是 Oracle 关系数据库的主要功能。
2.使用哪种方法可以编写包含来自多个表的列的查询?
- SELECT
- GROUP BY
- ORDER BY
- JOINS
答案:D. 在 Oracle 中,连接用于连接多个表并投影来自多个表的列数据。
3.以下哪种方法是连接多个表最常见的方法之一?
- 哈希连接
- 等值连接
- 自连接
- 交叉连接
答案:B. 等值连接是连接类型之一,也是连接多个表最常见和最简单的技术。等值连接也称为简单连接或内部连接。等值连接涉及主键和外键。
4.如果列值落在不等式运算符定义的范围内,将使用以下哪一项连接其他表的行?
- 等值连接
- 简单连接
- 非等值连接
- 以上均不正确
答案:C. 等值连接使用等式运算符连接行,非等值连接使用不等式运算符。
5.关于 Oracle 连接,以下哪个陈述是正确的?
- 结果集中包含 NULL 值
- 仅获取具有匹配条件的行
- 获取任何一个表中存在的所有行
- 以上均不正确
答案:B. 使用连接时,会排除 NULL 值和公共连接列中不同的条目。
6.以下哪个可以用于将表的行与同一表的其他行连接?
- 等值连接
- 非等值连接
- 外部连接
- 自连接
答案:D. 关联基于具有逻辑且通常是层次关系的列。
7.关于 Oracle DB 中两个表的笛卡尔积连接,哪个是正确的?
- 必须避免,因为它成本高且未优化
- 当一个表中的每一行都与第二个表中的所有行连接时形成
- A 和 B 均正确
- 以上均不正确
答案:B. 笛卡尔积连接通常是由于缺少或不充分的连接条件导致的。它只是两个表的叉积。
8.以下哪项是 Oracle DB 中的基本连接类型之一?
- 外部连接
- 自连接
- 等值连接
- 以上所有
答案:C. 等值连接和非等值连接是 Oracle DB 中的两种基本连接类型。
9.在 Oracle DB 中,为了获取非笛卡尔积结果,在源表和目标表之间使用连接的主要条件是什么?
- 没有条件
- 两个表中至少应有一个列是公共的。
- 两个连接表中列的名称应相同才能使用连接
- 以上均不正确
答案:B. 表必须通过关联两个实体的公共列连接。在公共列上连接的表会产生非笛卡尔积。
10. 以下哪个可以用于在一个 SQL 查询中从多个表中获取行?
- SELECT
- WHERE
- FROM
- 等值连接
答案:D. 等值连接也称为简单连接或内部连接。等值连接涉及主键和外键。
11.关于 Oracle 连接中的源表和目标表,哪个是正确的?
- 它们必须至少有一个同名的列
- 所有列都应具有相同的名称和相同的数据类型才能连接两个表
- 源表和目标表不能互换,并且是位置特定的
- 以上均不正确
答案:D. 源表和目标表可以互换,并且其位置不是固定的。根据查询中使用的连接类型,结果可能不同或保持相同。
12.关于 Oracle DB 中的自然连接,哪个是正确的?
- 源表和目标表的列名应相同
- 如果源表和目标表的列名不同,Oracle 会隐式执行必要的操作
- NATURAL JOINS、USING 和 ON 是与自然连接相关的关键字
- 以上所有
答案:C. 关键字 NATURAL JOIN 指示 Oracle 识别源表和目标表之间具有相同名称的列。自然连接使用所有具有匹配名称和数据类型的列来连接表。USING 子句可用于指定仅应用于等值连接的列。
13.假设表 EMPLOYEES 和 DEPARTMENT 必须使用 NATURAL JOIN 连接。以下两个查询有什么区别?(考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT department_id FROM employees NATURAL JOIN department WHERE first_name = 'John' AND last_name = 'Bacon';
SELECT department_id FROM department NATURAL JOIN employees WHERE first_name = 'John' AND last_name = 'Bacon';
- 没有区别
- 这两种情况下的结果不同
- 两个查询在执行时都会给出 ORA 错误
- 以上均不正确
答案:B. 使用 NATURAL JOIN 时,源表和目标表可以互换,从而产生关系上不同的结果集。
14.关于 Oracle DB 中的 NATURAL JOIN,以下哪个选项是正确的?
- 使用 NATURAL JOIN 时,必须提及两个表中所有列的名称
- 只有当两个表的所有列的名称都相同时才能使用 NATURAL JOIN
- 只有当用户指定源表和目标表的列时,NATURAL JOIN 中才会发生连接。
- 使用 NATURAL JOINS 时,无需提及列。
答案:D. 使用 NATURAL JOIN 时,会隐式连接来自源表和目标表的列。NATURAL JOIN 是一种 JOIN 操作,它根据要连接的两个表中公共列为您创建隐式连接子句。公共列是指在两个表中具有相同名称的列。
15. NATURAL JOIN 和 JOIN..ON 连接有什么区别?
- 两者之间没有区别
- JOIN..ON 将源表和目标表连接到具有相同名称的特定列上
- NATURAL JOIN 隐式连接来自源表和目标表的所有匹配列
- 以上均不正确
答案:B, C. 自然连接的连接条件基本上是所有具有相同名称的列的等值连接。使用 ON 子句指定任意条件或指定要连接的列。连接条件与其他搜索条件分开。ON 子句使代码易于理解。
16.关于 Oracle DB 中的 JOIN..ON 子句,哪个是正确的?
- 它不依赖于源表和目标表中的列是否具有相同的名称
- 只有源表和目标表中具有相同名称的列才能与此子句一起使用
- 它是 NATURAL JOIN 的一种格式
- 以上所有
答案:A, C. 自然连接的连接条件基本上是所有具有相同名称的列的等值连接。使用 ON 子句指定任意条件或指定要连接的列。连接条件与其他搜索条件分开。ON 子句使代码易于理解。
17. 数据库设计人员将两个表中的键(唯一)列命名不同。连接这些表时,以下哪项将是最佳实践?
- JOIN..ON
- NATURAL JOIN 或 JOIN...ON 子句
- A 和 B 均正确
- 以上均不正确
答案:A. 在这种情况下使用 NATURAL JOINS 会产生意外的结果,因为存在隐式搜索具有相同名称的列,而这里不存在。
18.以下哪个可以用于在 Oracle DB 中获取源表和目标表之间匹配行以及非匹配行?
- EQUI-JOIN
- SELF-JOIN
- NATURAL JOIN
- OUTER-JOIN
答案:D. 当需要在结果中包含记录而没有连接表中的对应记录时,就会创建外部连接。这些记录与 NULL 记录匹配,以便将其包含在输出中。
19. 在 Oracle DB 中,笛卡尔积连接也被称为什么?
- 等值连接
- 反连接
- 交叉连接
- 以上均不正确
答案:C. 两个表之间的笛卡尔积连接返回表中每一行所有可能的组合。可以通过不包含查询中的连接操作或使用 CROSS JOIN 来生成笛卡尔积连接。
20.下面查询中给出的两个表 EMPLOYEES 和 DEPARTMENT 之间的 NATURAL JOIN 的结果是什么?(考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT * FROM employees NATURAL JOIN department;
- 两个表中同名的公共列 DEPARTMENT_ID 将在结果集中出现两次
- 所有具有相同名称并使用 NATURAL JOIN 连接的列都将在结果集中出现两次
- 结果集将对来自两个表的每一对同名列只有一个列
- 以上均不正确
答案:C. NATURAL JOIN 关键字不需要条件来建立两个表之间的关系。但是,必须存在一个公共列。列限定符不能与 NATURAL JOIN 关键字一起使用。
21.Oracle 数据库中 NATURAL JOIN 和 EQUI-JOIN 的区别是什么?
- 没有区别
- 从两者获取的结果集方面,它们是相同的
- A 和 B 均正确
- 以上均不正确
答案:D. NATURAL JOIN 连接所有名称相同的列,而 EQUI-JOIN 要求在 SQL 查询中明确提及列。
22.Oracle 数据库中的 INNER JOIN 是什么?
- 给出两个表之间匹配记录的连接称为 INNER JOIN
- 内部联接可以使用 <、>、<> 等运算符
- A 和 B 均正确
- 以上均不正确
答案:C. 连接可以是内部连接,其中仅返回在所有表中都有匹配记录的记录;也可以是外部连接,其中可以返回记录,无论在连接中是否有匹配记录。
23.Oracle 数据库中 INNER JOIN 和 EQUI-JOIN 的区别是什么?
- 它们在语法和获得的结果集方面是相同的。
- INNER JOIN 是 EQUI-JOIN 的一个子集
- INNER JOIN 可以使用 <、>、<> 以及 "=" 等运算符,而 EQUI-JOIN 仅使用 "=" 运算符
- 以上所有
答案:C. EQUI-JOIN 是一种 INNER JOIN,在连接条件中包含 "=" 运算符,而 INNER JOIN 可以包含等式和不等式运算符
24.关于 Oracle 数据库中 ANSI SQL: 1999 语法中的 NATURAL JOIN,哪些说法是正确的?
- 使用等号运算符 (=)
- 与传统语法相比,它们获取不同的结果
- ANSI SQL 语法在 SQL 查询中使用 NATURAL JOIN 等词
- 以上均不正确。
答案:C. ANSI SQL 语法与传统使用 "=" 的方式不同。ANSI SQL 语法中有一些关键字,如 NATURAL JOIN 等,用于区分使用的连接。
25.关于以下查询,以下哪种说法是正确的?(请考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT first_name, salary FROM employees e, departments d WHERE e.department_id (+) = d.department_id ;
- 两个表中的 department_id 之间存在外部连接,等效于 ANSI SQL 中的右外部连接
- 两个表中的 department_id 之间存在外部连接,等效于 ANSI SQL 中的左外部连接
- 它获取 employees 表中所有 department_id 的记录,无论它们是否匹配
- 它获取 department 表中所有 department_id 的记录,无论它们是否匹配
答案:A、D. 条件 e.department_id (+) = d.department_id 表示它将执行右外部连接,并且将显示 department 表中的所有 department_id,无论它们是否匹配
26.以下哪种语法模型在全球软件系统中得到广泛使用?
- ANSI SQL: 1999
- 传统的 Oracle 语法和 ANSI SQL: 1999 语法
- 传统的 Oracle 语法
- 所有选项
答案:C. 尽管 ANSI SQL: 1999 语法不像传统的 Oracle 语法那样使用广泛,但它仍然是 Oracle SQL 中可能使用的语法之一。
27.关于 Oracle 数据库中的笛卡尔积,以下哪种说法是正确的?
- 如果连接的表数为 'N',则如果连接数为 N-1,则不会执行笛卡尔积
- 如果连接的表数为 'N',则如果连接数为 N,则执行笛卡尔积
- 如果连接的表数为 'N',则如果连接数为 N+1,则执行笛卡尔积
- 如果连接的表数为 'N',则如果连接数为 N-1 或更少,则执行笛卡尔积。
答案:A. 两个表之间的笛卡尔连接返回表中每一行的所有可能组合。笛卡尔连接可以通过在查询中不包含连接操作或使用 CROSS JOIN 来生成。查询必须至少具有 (N-1) 个连接条件以防止笛卡尔积,其中 N 是查询中表的数量。
28.以下 SQL 查询中错误的原因是什么?(请考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT first_name, last_name FROM employees, departments WHERE department_id (+) = department_id ;
- 没有为表使用别名。
- 此处未使用 RIGHT OUTER JOIN,因此它会引发错误
- "+" 应该位于等式条件的右侧,而不是左侧
- 应在条件中与 department_id 一起使用表别名以消除歧义命名
答案:D. 如果没有表别名,Oracle 将无法推导出正在连接的列的来源,因此在执行时会引发歧义错误。
29.Oracle 数据库中使用什么来避免列歧义问题?
- ;
- ,
- .
- /
答案:C. 消除列歧义问题的语法为:table_alias.column_name
30.关于以下查询,以下哪种说法最合适?(请考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT employee_id , first_name, last_name FROM employees e right outer join department d On e.department_id = d.department_id ;
- 它提供了不在任何部门的员工的详细信息
- 它提供了没有员工的部门的详细信息
- 它提供了所有部门的详细信息,无论它们是否有员工
- 它提供了在“ABC”公司入职的员工的详细信息,无论部门如何。
答案:C. 使用外部连接的 JOIN 方法,您可以添加 LEFT、RIGHT 或 FULL 关键字。左外部连接包括连接左侧列出的表中的所有记录,即使在连接中的其他表中找不到匹配项也是如此。完全外部连接包括两个表中的所有记录,即使在另一个表中找不到相应的记录也是如此。
31.以下查询的结果是什么?(请考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT * FROM employees e, department d WHERE a.department_id = b.department_id ;
- 它将给出两个表中所有具有相同 department_id 的匹配值
- 它将给出 employees 表中的所有列以及 departments 表中的前 100 行
- 它将给出 ORA 错误:“b.department_id”无效标识符
- 以上选项均不正确
答案:C. WHERE 子句中应与 FROM 子句中声明的相同别名
32.关于表连接中的 USING 和 ON 子句,以下哪种说法是正确的?(如果适用,请选择多个选项)
- ON 子句可用于根据数据类型相同的列连接表,但不一定需要名称相同
- USING 和 ON 子句仅用于等值连接和非等值连接
- ON 子句不能使用多个条件
- 可以在 USING..ON 子句之后编写 WHERE 子句以应用其他条件
答案:A、D. JOIN ... USING 方法类似于 NATURAL JOIN 方法,只是公共列在 USING 子句中指定。USING 子句中不能包含条件来指示表是如何关联的。此外,对于 USING 子句中指定的公共列,不能使用列限定符。JOIN... ON 方法根据指定的条件连接表。FROM 子句中的 JOIN 关键字指示要连接的表,而 ON 子句指示两个表是如何关联的。如果要连接的表在每个表中没有名称相同的公共列,则必须使用此方法。
33.Oracle 数据库中可以使用 JOIN 连接多少个表?
- 1
- 2
- 255
- 没有限制
答案:D. 目前对参与连接的表数没有限制。
34.当在 SQL 语句中使用多个连接时,哪些说法是正确的?
- 连接从左到右进行评估
- 连接从右到左进行评估
- 连接的评估过程中没有优先级
- 以上均不正确
答案:A. 当语句中存在多个连接时,它们从左到右进行评估。
35.关于以下查询,哪些说法是正确的?(请考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
SELECT bonus, first_name, department_id FROM bonus b NATURAL JOIN employees e NATURAL JOIN department d;
- 使用 NATURAL JOIN 连接多个表是一个更好的选择,并且可以产生准确的结果
- 使用 NATURAL JOIN 连接多个表时,错误概率非常低
- 连接多个表时,USING..JOIN..ON 子句比 NATURAL JOIN 提供更准确的结果
- 当使用 NATURAL JOIN 时,Oracle 会隐式连接多个表,因此使用 NATURAL JOIN 是一个好习惯
答案:C. 使用 NATURAL JOIN 会创建行的笛卡尔积,并且结果集不可靠,容易出错。
36.关于 Oracle 数据库中的 JOIN..ON 子句,哪些说法是正确的?
- 与连接多个表时的 NATURAL JOIN 相比,它们不太可靠
- JOIN..ON 子句类似于 WHERE 子句,它使用条件限制行
- 使用 JOIN..ON 子句时,必须使用额外的 WHERE 子句
- 以上均不正确
答案:B. JOIN .... ON 方法根据指定的条件连接表。FROM 子句中的 JOIN 关键字指示要连接的表,而 ON 子句指示两个表是如何关联的。如果要连接的表在每个表中没有名称相同的公共列,则必须使用此方法。
检查给定的表结构。回答以下给定查询后的问题 37 和 38
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT e.salary, d.department_id FROM employees e JOIN department d On (e.department_id = d.department_id and e.last_name = 'Brandon');
37.关于上述查询,哪些说法是正确的?
- 它会引发 ORA 错误,因为缺少必需的 WHERE 子句
- JOIN..ON 子句不能包含多个条件
- 查询会忽略最后一个条件并执行,不会引发 ORA 错误
- JOIN..ON 子句可以按上述形式编写以添加更多条件。
答案:D. 可以省略 WHERE 子句,并将相关条件直接添加到 JOIN..ON 子句中,如给定查询所示
38.关于给定的查询,如果将使用的 JOIN 替换为 NATURAL JOIN,则会引发错误。此错误的原因是什么?
- 当使用 NATURAL JOIN 时,必须使用 WHERE 子句,省略它会引发错误
- ON 子句应替换为 USING 子句
- NATURAL、JOIN 和 USING 在同一个连接子句的上下文中是互斥的
- 查询在连接时不能组合 NATURAL JOIN 和 ON(或 USING)子句。
答案:C、D。
39.关于 Oracle 数据库中的非等值连接,哪些说法是正确的?
- 它们基于 NON-EQUI JOIN 关键字连接
- 它们使用 JOIN..ON 子句和 "=" 符号
- 当提到的不等式的结果计算为真时,将获得结果。
- 以上均不正确
答案:C. 非等值连接使用 JOIN..ON 子句,但使用不等式运算符。
检查 EMPLOYEES 和 DEPARTMENTS 表的结构,并回答以下问题 40 和 41。
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
40.以下查询在 Oracle 数据库中的结果是什么?
SELECT e.first_name, e.last_name, e.employee_id FROM employees e JOIN department d ON (e.salary BETWEEN 1000 AND 10000);
- 它将引发 ORA 错误,因为 ON 子句中的条件不正确。
- 由于语法错误,它将引发 ORA 错误,因为 ON 子句中没有等号“=”
- 它将成功执行并给出满足条件的员工的姓、名和员工 ID。
- 非等值连接只能用于显示不等式,而不能用于显示范围。
答案:C。
41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) AND d.loc = upper ('Geneva');
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000);
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000) AND d.loc = 'Geneva';
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) WHERE d.loc = upper('Geneva');
答案:A、C。
42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?
- 不等式匹配操作的结果为真
- 不等式匹配操作的结果为 0
- 不等式匹配操作的结果为 1
- 不等式匹配操作的结果为假
答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。
41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) AND d.loc = upper ('Geneva');
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000);
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000) AND d.loc = 'Geneva';
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) WHERE d.loc = upper('Geneva');
答案:A、C。
42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?
- 不等式匹配操作的结果为真
- 不等式匹配操作的结果为 0
- 不等式匹配操作的结果为 1
- 不等式匹配操作的结果为假
答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。
41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) AND d.loc = upper ('Geneva');
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000);
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000) AND d.loc = 'Geneva';
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) WHERE d.loc = upper('Geneva');
答案:A、C。
42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?
- 不等式匹配操作的结果为真
- 不等式匹配操作的结果为 0
- 不等式匹配操作的结果为 1
- 不等式匹配操作的结果为假
答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。
41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) AND d.loc = upper ('Geneva');
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000);
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >=20000) AND d.loc = 'Geneva';
SELECT e.first_name, e.last_name FROM employees e JOIN departments d ON (e.department_id = d.department_id and e.salary >20000) WHERE d.loc = upper('Geneva');
答案:A、C。
42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?
- 不等式匹配操作的结果为真
- 不等式匹配操作的结果为 0
- 不等式匹配操作的结果为 1
- 不等式匹配操作的结果为假
答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。
43.关于 Oracle 数据库中的自连接,以下说法正确的是?
- 连接只需要两个表。
- 结果集中的列来自两个表,但显示在一个表中。
- 从概念上讲,源表会复制自身以创建目标表。(Oracle 不会复制表)
- 以上所有
答案:C. 当一个表必须连接到自身以检索所需数据时,使用自连接。在 FROM 子句中需要表别名才能执行自连接。
44.关于下面给出的查询和表结构,回答问题。
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 * FROM employees a join employees b WHERE a.employee_id = b.employee_id ;
Oracle 将以下哪个表视为源表和目标表?
- a 是源表,b 是目标表
- b 是源表,a 是目标表
- Oracle 不会将任何表视为源表或目标表
- 以上均不正确
答案:A. employees 表的第一次出现被视为源表,随后的出现被视为 b、c 等。
45.在 Oracle 数据库中,在哪些情况下理想情况下可以使用自连接?
- 当我们需要查找表中的重复记录时
- 当我们需要从表中获取 NULL 值时
- 当我们需要显示表的某一列两次时
- 当我们需要显示相关实体的层次结构时
答案:D.
46.关于 Oracle 数据库中的自然连接,以下说法正确的是?
- 连接的列具有相同的名称,但可以具有不同的数据类型
- 连接的列可以具有相同的数据类型,但名称不同
- 连接的列应具有相同的名称和相同的数据类型
- 以上均不正确
答案:C. NATURAL JOIN 关键字不需要条件来建立两个表之间的关系。但是,必须存在一个公共列。列限定符不能与 NATURAL JOIN 关键字一起使用。
47.需要提取一个报表,该报表仅提供部门 100 和 101 的部门名称、部门 ID、部门城市和位置 ID。使用自然连接,以下哪个选项将提供所需的结果?
SELECT department_id , department_name ,location, city FROM departments NATURAL JOIN locations WHERE department_id in (100,101);
SELECT department_id , department_name ,location, city FROM locations NATURAL JOIN departments WHERE department_id BETWEEN 100 AND 101;
-
SELECT department_id , department_name ,location, city FROM departments NATURAL JOIN locations WHERE department_id >100 AND department_id >101;
-
SELECT department_id , department_name ,location, city FROM departments NATURAL JOIN locations ;
答案:A. WHERE 可以用于 NATURAL JOIN 子句后的附加条件。
48.在以下哪些情况下应使用 USING 子句或 NATURAL JOIN 子句?
- 当来自表的列的名称相同时,使用 USING 子句
- 当来自表的列的数据类型相同时,使用 NATURAL JOIN
- 如果多个列具有相同的名称但数据类型不匹配,则可以使用 USING
- 仅当列名及其数据类型相同时,才应使用 NATURAL JOIN
答案:C,D. NATURAL JOIN 和 USING 是互斥的,当多个列匹配时,应使用 USING 子句仅匹配一列。
49.检查给定的表结构。以下查询的结果是什么?(选择最合适的答案)
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)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
SELECT e.name, b.bonus FROM employees e JOIN bonus b USING (job_id) WHERE e.job_id like 'SA%');
- 它给出某个公司所有员工的姓名和获得的奖金。
- 它给出某个公司特定职位的所有员工的姓名和获得的奖金。
- 它成功执行,给出所有职位的所有员工的姓名和获得的奖金。
- 它抛出一个 ORA 错误。
答案:D. USING 子句中使用的列在 SQL 语句中的任何位置都不应具有限定符(表名或别名)。
50.关于 Oracle 数据库中的内部连接和外部连接,以下说法正确的是?
- INNER JOIN 仅返回匹配的行。
- OUTER JOIN 仅返回不匹配的行。
- OUTER JOIN 返回匹配的行以及不匹配的行。
- 以上均不正确
答案:A,C. 连接可以是内部连接,其中仅返回在所有表中都有匹配记录的记录,也可以是外部连接,其中可以返回记录,无论连接中是否存在匹配记录。当需要在结果中包含记录但连接表中没有对应的记录时,会创建外部连接。这些记录与 NULL 记录匹配,以便将其包含在输出中。
51.关于 Oracle 数据库中的 FULL OUTER JOIN,以下说法正确的是?
- 当 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 同时出现在同一个查询中时,称为 FULL OUTER JOIN。
- FULL OUTER JOIN 与 OUTER JOIN 相同。
- A 和 B 均正确
- 两个表之间的连接,返回 INNER JOIN 和 LEFT 和 RIGHT OUTER JOIN 的结果,称为 FULL OUTER JOIN。
答案:D. 全外部连接包含两个表中的所有记录,即使在另一个表中找不到对应的记录。
检查给定的表结构并回答后续的第 52 和 53 个问题。
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
52.考虑以下查询。
SELECT e.job_id , e.first_name, d.department_id FROM departments D JOIN employees e JOIN BONUS b USING (job_id );
此查询导致错误。错误的原因是什么?
- JOIN..USING 只能在两个表之间发生。
- 查询中的 USING 子句没有任何来自 department 的列。
- 查询中没有 WHERE 子句。
- 以上均不正确
答案:A. Table1 JOIN table2 JOIN table3 不允许在每个 JOIN 之间没有 ON 子句的情况下使用。
53.您需要显示来自 EMPLOYEES 表的所有不匹配行和来自 DEPARTMENT 表的所有不匹配行,而不会在它们之间给出行的笛卡尔积。以下哪个查询将提供所需的输出?
SELECT * FROM employees e, department d WHERE e.department_id = d.department_id ;
SELECT * FROM employees e NATURAL JOIN department d;
SELECT * FROM employees e FULL OUTER JOIN department d ON e.department_id = d.department_id ;
SELECT * FROM employees e JOIN department d ON ( e.department_id > d.department_id ) ;
答案:C. FULL OUTER JOIN 返回两个表中的不匹配行。全外部连接包含两个表中的所有记录,即使在另一个表中找不到对应的记录。
54.Oracle 支持以下哪些 ANSI SQL:1999 连接语法连接?
- 笛卡尔积
- 自然连接
- 全外部连接
- 等值连接
答案:D.
55.以下哪个不是 Oracle 数据库中外部连接的格式?
- 右
- 左
- 中心
- 全
答案:C. 除“中心”外,其余 3 种类型是 Oracle 数据库中外部连接的格式类型。使用外部连接的 JOIN 方法,您可以添加 LEFT、RIGHT 或 FULL 关键字。
检查给定的表结构。通过参考以下查询,回答后续的第 56、57 和 58 个问题
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT * FROM employees e NATURAL JOIN department d;
56.您需要查找上述查询仅针对部门 100 和 101 获得的结果。应向上述查询添加/修改以下哪些子句?
- 应添加 ON (e.department_id = d.department_id)
- 应添加 USING (e.department_id)
- 应添加 WHERE e.department_id in (100,101)
- 以上均不正确
答案:C. NATURAL JOIN 子句隐式匹配所有相同名称的列。要添加其他条件,可以使用 WHERE 子句。
57.您需要查找上述查询中所有工资大于 20000 的员工获得的结果。应向上述查询添加/修改以下哪些子句?
- ON (e.department_id = d.department_id) WHERE salary > 20000;
- USING (e.department_id) WHERE salary > 20000;
- USING (department_id) WHERE salary>20000;
- WHERE salary > 20000;
答案:D.
58.如果上述查询中的 NATURAL JOIN 被仅 JOIN 替换,则应向上述查询添加/修改以下哪些内容以提供与部门 100 相关的结果?
- ON (department_id = 100);
- USING (e.department_id =100);
- WHERE d.department_id = 100;
- ON (e.department_id = d.department_id and d.department_id = 100);
答案:D. 等值连接可以在 ON 子句之后添加更多条件。
59.需要提取一份报表,以获取公司“ABC”中部门 10 和 20 中所有员工的经理。以下哪个查询将提供所需的结果?(考虑给定的表结构)
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 a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees" FROM employees a join employees b On (employee_id );
SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees" FROM employees a join employees b On (b.employee_id = a.employee_id );
SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees" FROM employees a join employees b On (a.manager_id = b.employee_id ) WHERE department_id in (10,20);
SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees" FROM employees a join employees b On (a.manager_id = b.employee_id ) WHERE a.department_id in (10,20);
答案:D. 选项 C 是不正确的,因为 WHERE 子句中未加别名的 department_id 将抛出错误。
60.以下哪个查询将提供 EMPLOYEES 和 DEPARTMENT 两个表之间没有重复值的结果?(考虑给定的表结构)
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SELECT * FROM employees e NATURAL JOIN department d;
SELECT * FROM employees e JOIN department d;
SELECT * FROM employees e NATURAL JOIN department d USING (e.department_id );
SELECT * FROM employees e FULL OUTER JOIN department d USING (department_id );
答案:D. FULL OUTER JOIN 将提供两个表中的所有匹配行以及不匹配行,排除重复值。
检查此处给出的表的结构并回答第 61 至 64 个问题。
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)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
SQL> desc locations Name Null? Type ----------------------- -------- ---------------- LOCATION_ID NOT NULL NUMBER(4) STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(12) CITY NOT NULL VARCHAR2(30) STATE_PROVINCE VARCHAR2(25) COUNTRY_ID CHAR(2)
SQL> desc locations Name Null? Type ----------------------- -------- ---------------- LOCATION_ID NOT NULL NUMBER(4) STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(12) CITY NOT NULL VARCHAR2(30) STATE_PROVINCE VARCHAR2(25) COUNTRY_ID CHAR(2)
61.关于以下查询,以下说法正确的是?(选择最合适的答案)
SELECT * FROM bonus b, employees e WHERE b.job_id (+) = e.job_id ;
- 它将显示所有员工获得的所有奖金。
- 如果特定员工没有收到任何奖金,它将为奖金列显示 NULL。
- A 和 B 均正确
- 以上均不正确
答案:B. 等式左侧的 (+) 表示它是 RIGHT OUTER JOIN,反之亦然。
62.您必须列出在名为“XYZ”的公司中还没有员工的所有部门。以下哪个查询将提供所需的结果?
SELECT department_id , department_name FROM departments d NATURAL JOIN employees e;
SELECT department_id , department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id );
SELECT department_id , department_name FROM employees e LEFT OUTER JOIN departments d USING (department_id );
SELECT department_id , department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id );
答案:D.
63.您需要提取一份报表,该报表显示“尚未分配部门”给所有尚未分配到部门的员工。以下哪个选项将满足此目的?
SELECT nvl(department_id ,'No department yet') FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id );
SELECT nvl(department_id ,'No department yet') FROM departments d LEFT OUTER JOIN employees e ON (e.department_id = d.department_id );
SELECT nvl(department_id ,'No department yet') FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id );
SELECT nvl(department_id ,'No department yet') FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id );
答案:C。
64.您需要提取一份报表,该报表显示所有尚未分配到城市的部门。以下哪个查询将提供所需的输出?
SELECT department_id , department_name FROM departments d NATURAL JOIN locations l;
SELECT department_id , department_name FROM departments d FULL OUTTER JOIN locations l ON (d.location_id = l.location_id);
SELECT d.department_id , d.department_name FROM departments d JOIN locations l USING (location_id);
SELECT department_id , department_name FROM departments d LEFT OUTER JOIN locations l ON (d.location_id = l.location_id);
答案:D.
65.在哪些两种情况下应使用外部连接?
- 如果连接表的列具有 NULL 值
- 如果连接表具有 NOT NULL 列
- 如果连接表只有不匹配的数据
- 如果连接表既有匹配数据也有不匹配数据
答案:A,D. 当需要在结果中包含记录但连接表中没有对应的记录时,会创建外部连接。这些记录与 NULL 记录匹配,以便将其包含在输出中。
66.您需要查找每个员工获得的工资等级。您将使用以下哪个查询?(考虑给定的表结构)
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)
SQL> desc grade Name Null? Type ----------------------- -------- ---------------- GRADE NUMBER LOSAL NUMBER HISAL NUMBER
SELECT employee_id , salary, grade FROM employees e JOIN grade g ON g.grade BETWEEN g.losal AND g.hisal
SELECT employee_id , salary, grade FROM employees e FULL OUTER JOIN grade g WHERE g.grade > g.losal AND < g.hisal;
SELECT employee_id , salary, grade FROM employees e JOIN grade g ON (MIN(g.grade) = g.losal AND MAX(g.grade) = g.hisal);
- 以上均不正确
答案:A.
67.检查给定的表结构。
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)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
评估此 SQL 语句
SELECT e.employee_id , (.25* e.salary) + (.5 * e.commission_pct) + (.75 * b.bonus) as calc_val FROM employees e, bonus b WHERE e.employee_id = b.employee_id ;
如果删除计算中的所有括号会发生什么?
- calc_val 列中显示的值将更小。
- calc_val 列中显示的值将更大。
- calc_val 列中没有区别。
- 将报告错误。
答案:C。
68.考虑示例并检查 EMPLOYEES、DEPARTMENTS 和 GRADE 表的结构。在什么情况下您会使用非等值连接查询?
- 查找每个员工的等级
- 列出所有员工的姓名、job_id 和经理姓名
- 查找员工的部门名称。
- 查找在行政部门工作且工资低于 30000 的员工人数
答案:A. 非等值连接根据除等值条件之外的任何条件建立关系。与非等值连接一起使用的范围值必须是互斥的。
69.在哪些三种情况下您会使用 USING 子句?(选择三个。)
- 您要创建非等值连接。
- 要连接的表具有多个 NULL 列。
- 要连接的表具有相同名称但数据类型不同的列。
- 您要使用自然连接,但要限制连接条件中的列数。
答案:C,D。JOIN … USING 方法类似于 NATURAL JOIN 方法,只是在 USING 子句中指定了公共列。不能在 USING 子句中包含条件来指示表之间的关系。此外,不能对 USING 子句中指定的公共列使用列限定符。
70.如果 EMPLOYEES 和 BONUS 表有两个名称相同的列,即:- SALARY 和 JOB_ID,则以下哪些查询彼此等价?(考虑给定的表结构)
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)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
SELECT * FROM employees E JOIN bonus B on (salary, job_id )
SELECT * FROM employees E NATURAL JOIN bonus B on (salary, job_id )
SELECT * FROM employees E JOIN bonus B USING (salary, job_id )
SELECT * FROM employees E JOIN bonus B on (salary, job_id )
答案:B,C。
71.检查给定的表结构。
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
检查以下两个 SQL 语句
查询 1SELECT first_name,department_id FROM employees E JOIN departments D USING (department_id );查询 2
SELECT first_name,department_id FROM employees E NATURAL JOIN departments D USING (department_id );
关于结果,哪个陈述是正确的?
- 只有查询 1 成功执行并给出所需的结果。
- 只有查询 2 成功执行并给出所需的结果。
- 查询 1 和查询 2 都成功执行并给出不同的结果。
- 查询 1 和查询 2 都成功执行并给出相同所需的结果。
答案:D.
72.您需要生成一个报告,显示部门位置以及 2013 年 1 月 20 日之前的所有聘用员工的姓名。
您发出以下查询
SELECT department_name , first_name||' '||last_name FROM employees E JOIN department d ON ( hire_date < '20-JAN-2013') JOIN locations L ON (l.location_id = d.location_id) ;
关于上述查询,哪个陈述是正确的?
- 它成功执行并给出所需的结果。
- 它成功执行,但没有给出所需的结果。
- 它产生错误,因为表的连接顺序不正确。
- 它产生错误,因为等值连接和非等值连接条件不能在同一 SELECT 语句中使用。
答案:B。
73.检查 EMPLOYEES 表的结构
您想知道是否使用不同的 EMPLOYEE_ID 输入了任何员工的详细信息多次,方法是列出所有重复的姓名。您可以使用哪种方法获得所需的结果?
- 自连接
- 自身连接的全外部连接
- 自身连接的左外部连接
- 自身连接的右外部连接
答案:A。当必须将表连接到自身以检索所需数据时,使用自连接。在 FROM 子句中需要表别名才能执行自连接。
检查 DEPARTMENTS 和 LOCATIONS 表的结构,并回答以下第 74 和 75 题。
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
SQL> desc locations Name Null? Type ----------------------- -------- ---------------- LOCATION_ID NOT NULL NUMBER(4) STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(12) CITY NOT NULL VARCHAR2(30) STATE_PROVINCE VARCHAR2(25) COUNTRY_ID CHAR(2)
74.您需要找出尚未分配任何位置的部门。哪个查询会给出所需的结果?
SELECT d.department_id , d.department_name FROM departments d JOIN locations l ON (d.location_id = l.location_id);
SELECT d.department_id , d.department_name FROM departments d RIGHT OUTER JOIN locations l ON (d.location_id = l.location_id);
SELECT d.department_id , d.department_name FROM departments d FULL JOIN locations l ON (d.location_id = l.location_id);
SELECT d.department_id , d.department_name FROM departments d LEFT OUTER JOIN locations l ON (d.location_id = l.location_id);
答案:B。
75.您想列出所有未位于任何位置的部门以及部门名称。评估以下查询
SELECT d.department_id , d.department_name ,l.location_id, l.city FROM departments D __________________ location L ON (d.location_id = l.location_id);
在上述查询中的空白处可以使用哪些两个 JOIN 选项来给出正确的输出?
- JOIN
- NATURAL JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
答案:A、C。
76.您需要生成一个报告,显示所有部门 ID,以及相应的员工(如果有)和奖金详细信息(如果有),适用于所有员工。哪个 FROM 子句给出所需的结果?(考虑给定的表结构)
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)
SQL> desc bonus Name Null? Type ----------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER JOB_ID VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2)
- FROM departments LEFT OUTER JOIN employees USING (department_id ) FULL OUTER JOIN bonus
- FULL OUTER JOIN department USING (department_id );
- FROM bonus JOIN employees USING (job_id )
- FROM employees FULL OUTER JOIN departments FULL OUTER JOIN bonus
答案:A.
77. 检查以下图表
您想生成一个报告,列出员工的 ID、他们相应的佣金和部门(如果有),无论佣金是否存在。评估以下查询
SELECT e.employee_id , bonus, department_name FROM bonus b_____________ employees USING (job_id ) ____________ departments USING (department_id ) WHERE commission_pct IS NOT NULL;
在上述查询中的空白处使用哪种连接组合才能给出正确的输出?
- JOIN; LEFT OUTER JOIN
- FULL OUTER JOIN; FULL OUTER JOIN
- RIGHT OUTER JOIN; LEFT OUTER JOIN
- LEFT OUTER JOIN; RIGHT OUTER JOIN
答案:A.
78.预测以下查询的结果。
SELECT e.salary, bonus FROM employees E JOIN bonus b USING (salary,job_id );
- 它成功执行。
- 它抛出错误,因为 SELECT 中的 bonus 未加别名
- 它抛出错误,因为 USING 子句不能超过 1 列。
- 它成功执行,但结果不正确。
答案:D.
查看图表并检查 EMPLOYEES、DEPARTMENTS、LOCATIONS 和 BONUS 的结构。回答以下第 79 和 80 题
79.您需要列出苏黎世市的所有部门。您执行以下查询
SELECT D.DEPARTMENT_ID , D.DEPARTMENT_NAME , L.CITY FROM departments D JOIN LOCATIONS L USING (LOC_ID,CITY) WHERE L.CITY = UPPER('ZURICH');
预测上述查询的结果。
- 它成功执行。
- 它给出错误,因为在 SELECT 语句中对 CITY 使用了限定符。
- 它给出错误,因为 SELECT 中的列名不匹配
- 它给出错误,因为 USING 子句包含 CITY,它不是匹配的列。
答案:D。USING 子句中只能使用匹配的列名。
80.回答以下给定查询后的问题
SELECT e.first_name, d.department_id , e.salary, b.bonus FROM bonus b join employees e USING (job_id ) JOIN department d USING (department_id ) WHERE d.loc = 'Zurich';
您需要提取一份报告,该报告提供名为“ABC”的公司员工的姓名、部门编号、工资和奖金。以下哪个查询可以解决此问题?
SELECT e.first_name, d.department_id , e.salary, b.bonus FROM bonus b join employees e join departments d on (b.job_id = e.job_id ) on (e.department_id =d.department_id ) WHERE d.loc = 'Zurich';
SELECT e.first_name, d.department_id , e.salary, b.bonus FROM bonus b join employees e on (b.job_id = e.job_id ) JOIN department d on (e.department_id =d.department_id ) WHERE d.loc = 'Zurich';
SELECT e.first_name, d.department_id , e.salary, b.bonus FROM employees e join bonus b USING (job_id ) JOIN department d USING (department_id ) WHERE d.loc = 'Zurich';
- 以上均不正确
答案:C。查询 A 会抛出语法错误,查询 B 会在 bonus 和 department 之间抛出无效标识符错误。
检查以下给出的图表,并回答以下第 81 至 85 题。
81.您需要找到那些工资超过 20000 的员工的经理姓名。以下哪个查询可以用于获取所需的结果?
SELECT e.employee_id "Employee", salary, employee_id , FROM employees E JOIN employees M USING (e.manager_id = m.employee_id ) WHERE e.salary >20000;
SELECT e.employee_id "Employee", salary, employee_id , FROM employees E JOIN employees M USING (e.manager_id) WHERE e.salary >20000;
SELECT e.employee_id "Employee", salary, employee_id , FROM employees E NATURAL JOIN employees M USING (e.manager_id = m.employee_id ) WHERE e.salary >20000;
SELECT e.employee_id "Employee", salary, employee_id , FROM employees E JOIN employees M ON (e.manager_id = m.employee_id ) WHERE e.salary >20000;
答案:D.
82.您发出以下查询
SELECT e.employee_id ,d.department_id FROM employees e NATURAL JOIN department d NATURAL JOIN bonus b WHERE department_id =100;
关于此查询的结果,哪个陈述是正确的?
- 它成功执行。
- 它产生错误,因为 NATURAL 连接只能与两个表一起使用。
- 它产生错误,因为 NATURAL 连接中使用的列不能有限定符。
- 它产生错误,因为 NATURAL 连接中使用的所有列都应该有限定符。
答案:C。
83.您想显示所有员工姓名及其相应的经理姓名。评估以下查询
SELECT e.first_name "EMP NAME", m.employee_name "MGR NAME" FROM employees e ______________ employees m ON e.manager_id = m.employee_id ;
在上述查询中的空白处可以使用哪个 JOIN 选项来获取所需的输出?
- 简单内部 JOIN
- FULL OUTER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
答案:C。左外部连接包含连接左侧列出的表中的所有记录,即使在连接操作中未找到与其他表的匹配项也是如此。
考虑以下图表和以下查询以回答问题 84 和 85。(假设表 department 的列为 manager_id 和 department_name)
Select * FROM employees e JOIN department d ON (e.employee_id = d.manager_id);
84.您需要显示一个句子“(first_name)(last_name) 是 (department_name) 部门的经理”。以下哪个 SELECT 语句将成功替换上述查询中的“*”以满足此要求?
SELECT e.first_name||' '||e.last_name||' is manager of the '||d.department_name||' department.' "Managers"
SELECT e.first_name, e.last_name||' is manager of the '||d.department_name||' department.' "Managers"
SELECT e.last_name||' is manager of the '||d.department_name||' department.' "Managers"
- 以上均不正确
答案:A.
85.如果我们在上述查询中省略在 ON 子句后写入括号“()”,会发生什么情况?
- 它只会给出员工的姓名,并且经理的姓名将从结果集中排除
- 它将给出与括号“()”相同的结果
- 它会给出 ORA 错误,因为在使用 JOIN..ON 子句时必须写入括号“()”
- 以上均不正确
答案:B。括号不是必需的,但使用它们可以清楚地显示其中的条件。
86.以下哪个查询创建笛卡尔连接?
SELECT title, authorid FROM books, bookauthor;
SELECT title, name FROM books CROSS JOIN publisher;
SELECT title, gift FROM books NATURAL JOIN promotion;
- 以上所有
答案:A,B。两个表之间的笛卡尔连接返回表中每一行所有可能的组合。可以通过在查询中不包含连接操作或使用 CROSS JOIN 来生成笛卡尔连接。
87.以下哪个运算符不允许在外连接中使用?
- AND
- =
- OR
- >
答案:C。Oracle 抛出异常“ORA-01719:外连接运算符(+)不允许在 OR 或 IN 的操作数中使用”
88.以下哪个查询包含等值连接?
SELECT title, authorid FROM books, bookauthor WHERE books.isbn = bookauthor.isbn AND retail > 20;
SELECT title, name FROM books CROSS JOIN publisher;
SELECT title, gift FROM books, promotion WHERE retail >= minretail AND retail <= maxretail;
- 以上均不正确
答案:A。当连接来自两个不同表的记录的数据完全匹配时(即,等值条件创建关系),就会创建等值连接。
89.以下哪个查询包含非等值连接?
SELECT title, authorid FROM books, bookauthor WHERE books.isbn = bookauthor.isbn AND retail > 20;
SELECT title, name FROM books JOIN publisher USING (pubid);
SELECT title, gift FROM books, promotion WHERE retail >= minretail AND retail <= maxretail;
- 以上均不正确
答案:D。非等值连接根据不等式表达式匹配来自不同表的列值。源表中每一行中连接列的值与目标表中的相应值进行比较。如果基于不等式运算符的连接中使用的表达式计算结果为真,则会找到匹配项。构建此类连接时,会执行非等值连接。非等值连接使用 JOIN..ON 语法指定,但连接条件包含不等式运算符而不是等号。
90.以下 SQL 语句包含哪种类型的连接?
SELECT title, order#, quantity FROM books FULL OUTER JOIN orderitems ON books.isbn = orderitems.isbn;
- 等值
- 自连接
- 非等值
- 外连接
答案:D. 全外部连接包含两个表中的所有记录,即使在另一个表中找不到对应的记录。
91.以下哪个查询有效?
SELECT b.title, b.retail, o.quantity FROM books b NATURAL JOIN orders od NATURAL JOIN orderitems o WHERE od.order# = 1005;
SELECT b.title, b.retail, o.quantity FROM books b, orders od, orderitems o WHERE orders.order# = orderitems.order# AND orderitems.isbn=books.isbn AND od.order#=1005;
SELECT b.title, b.retail, o.quantity FROM books b, orderitems o WHERE o.isbn = b.isbn AND o.order#=1005;
- 以上均不正确
答案:C。如果连接中的表具有别名,则所选列必须使用别名引用,而不是使用实际的表名。
92.给定以下查询。
SELECT zip, order# FROM customers NATURAL JOIN orders;
以下哪个查询等价?
SELECT zip, order# FROM customers JOIN orders WHERE customers.customer# = orders.customer#;
SELECT zip, order# FROM customers, orders WHERE customers.customer# = orders.customer#;
SELECT zip, order# FROM customers, orders WHERE customers.customer# = orders.customer# (+);
- 以上皆非
答案:B。自然连接指示 Oracle 识别源表和目标表之间名称相同的列。
93.检查给定的表结构。以下 SQL 语句中的哪一行会引发错误?
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)
SQL> DESC departments Name Null? Type ----------------------- -------- ---------------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4)
1. SELECT e.first_name, d.department_name 2. FROM employees e, department d 3. WHERE e.department_id=d.department_id
- 第 1 行
- 第 2 行
- 第 3 行
- 无错误
答案:A。如果查询在连接条件中使用别名,则它们的列应使用别名进行引用。
94.给定以下查询
SELECT lastname, firstname, order# FROM customers LEFT OUTER JOIN orders USING (customer#) ORDER BY customer#;
以下哪个查询返回相同的结果?
SELECT lastname, firstname, order# FROM customers c OUTER JOIN orders o ON c.customer# = o.customer# ORDER BY c.customer#;
SELECT lastname, firstname, order# FROM orders o RIGHT OUTER JOIN customers c ON c.customer# = o.customer# ORDER BY c.customer#;
SELECT lastname, firstname, order# FROM customers c, orders o WHERE c.customer# = o.customer# (+) ORDER BY c.customer#;
- 以上均不正确
答案:B,C。
95.以下哪些陈述是正确的?
- 组函数不能用于来自多个数据源的数据。
- 如果查询中连接了多个表,并且包含相同的列,则 Oracle 只选择其中一个。
- 自然连接用于根据相同的列连接来自两个表的行。
- A 和 B
答案:C。组函数可以在使用 Oracle 连接的查询上使用。不明确的列必须使用限定符引用。
96.以下 SQL 语句中的哪一行会引发错误?
1. SELECT name, title 2. FROM books JOIN publisher 3. WHERE books.pubid = publisher.pubid 4. AND 5. cost < 45.95
- 第 1 行
- 第 2 行
- 第 3 行
- 第 4 行
答案:C。由于表使用 JOIN 关键字连接,因此等值条件应使用 USING 子句编写,而不是 WHERE 子句。
97.给定以下查询
SELECT title, gift FROM books CROSS JOIN promotion;
以下哪个查询等价?
SELECT title, gift FROM books NATURAL JOIN promotion;
SELECT title FROM books INTERSECT SELECT gift FROM promotion;
SELECT title FROM books UNION ALL SELECT gift FROM promotion;
SELECT title, gift FROM books, promotion;
答案:D。笛卡尔连接与交叉连接相同。
98.如果 CUSTOMERS 表包含 7 条记录,而 ORDERS 表包含 8 条记录,则以下查询产生多少条记录?
SELECT * FROM customers CROSS JOIN orders;
- 0
- 56
- 7
- 15
答案:B。交叉连接是两个表中包含的行之间的叉积。
99.以下哪个 SQL 语句无效?
SELECT b.isbn, p.name FROM books b NATURAL JOIN publisher p;
SELECT isbn, name FROM books b, publisher p WHERE b.pubid = p.pubid;
SELECT isbn, name FROM books b JOIN publisher p ON b.pubid = p.pubid;
SELECT isbn, name FROM books JOIN publisher USING (pubid);
答案:A。不明确的列必须使用表限定符引用。
100.以下哪个选项列出了由名为“Printing Is Us”的出版商出版的所有书籍?
SELECT title FROM books NATURAL JOIN publisher WHERE name = 'PRINTING IS US';
SELECT title FROM books, publisher WHERE pubname = 1;
SELECT * FROM books b, publisher p JOIN tables ON b.pubid = p.pubid WHERE name = 'PRINTING IS US';
- 以上皆非
答案:A。假设列 NAME 不包含在 BOOKS 表中,则查询 A 有效。
101.以下哪个 SQL 语句无效?
SELECT isbn FROM books MINUS SELECT isbn FROM orderitems;
SELECT isbn, name FROM books, publisher WHERE books.pubid (+) = publisher.pubid (+);
SELECT title, name FROM books NATURAL JOIN publisher
- 以上所有 SQL 语句均有效。
答案:B。查询 B 抛出异常“ORA-01468:谓词只能引用一个外连接表”。
102.关于两个表之间的外连接,以下哪个陈述是正确的?
- 如果使用 WHERE 子句建立表之间的关系,则两个表都可以包含外连接运算符。
- 为了在结果中包含不匹配的记录,该记录将与不足表中的空记录配对。
- RIGHT、LEFT 和 FULL 关键字等效。
- 以上所有
答案:B。
103. 下面的 SQL 语句中哪一行会引发错误?
1. SELECT name, title 2. FROM books b, publisher p 3. WHERE books.pubid = publisher.pubid 4. AND 5. (retail > 25 OR retail-cost > 18.95);
- 第 1 行
- 第 3 行
- 第 4 行
- 第 5 行
答案:B. 由于查询中使用的表有限定符,因此必须使用相同的限定符来引用列。
104. 表别名的最大字符数是多少?
- 10
- 155
- 255
- 30
答案:D. 表别名最多可以包含 30 个字符。
105. 以下哪个 SQL 语句有效?
SELECT books.title, orderitems.quantity FROM books b, orderitems o WHERE b.isbn= o.ibsn;
SELECT title, quantity FROM books b JOIN orderitems o;
SELECT books.title, orderitems.quantity FROM books JOIN orderitems ON books.isbn = orderitems.isbn;
- 以上皆非
答案:C。