1Z0-007考题

时间:2010-10-10 11:17:56

标签: sql plsql

问题: 哪个子句可以使用子查询? (选择四项。)

一个。在INSERT语句的INTO子句中

B中。在SELECT语句的FROM子句中

℃。在SELECT语句的GROUP BY子句中

d。在SELECT语句的WHERE子句中

电子。在UPDATE语句的SET子句中

F。在INSERT语句的VALUES子句中

答案: B,D,E,F

但我认为正确的答案如下: A,B,D,E 但不是 F 。不是吗???

4 个答案:

答案 0 :(得分:4)

不, B,D,E,F 听起来是正确的。

你为什么认为A应该有效? INTO指定了一个目标行集,它不能是子查询。在F中你可以使用返回标量值的子查询。

答案 1 :(得分:2)

首先,我们必须承认子查询返回一组值元组(行):{(value_1_A, value_1_B, ...), (value_2_A, value_2_B, ...), ...}

A - INTO子句需要表名,而不是一组值,因此您不能使用子查询。请注意,这与 B 不相似,因为您可以查询匿名表(子查询返回的一组行),但将值插入到不会出现的匿名表中是没有意义的。使用。

F - INSERT语句的VALUES子句完全符合我所说的子查询返回的一组值。

正确的答案是 B D E F

以下是有关子查询的更多信息:http://www.techonthenet.com/oracle/subqueries.php

答案 2 :(得分:2)

嘲笑! ......我发现了一些非常重要的东西,证明了我的主张......

其他DML语句中的子查询

子查询可用于DML语句,例如 INSERT UPDATE DELETE

MERGE 。以下是DML中的子查询的一些示例

语句。

将所有员工的薪水更新为

中的最高薪水

相应的部门(相关子查询):

UPDATE employees e1

SET  salary = (SELECT MAX(salary)

     FROM  employees e2

     WHERE e1.department_id = e2.department_id);

删除薪水低于平均值的员工的记录

部门的薪水(使用相关子查询):

DELETE FROM employees e

WHERE salary < (SELECT AVG(salary) FROM employees

      WHERE  department_id = e.department_id);

使用子查询将记录插入表:

INSERT INTO employee_archive

SELECT * FROM employees;

在INSERT语句的VALUES子句中指定子查询:

INSERT INTO departments

       (department_id, department_name)

VALUES ((SELECT MAX(department_id)

         +10 FROM departments), 'EDP');

您还可以在INSERT,UPDATE和DELETE语句中使用子查询代替表名 。这是一个例子:

DELETE FROM

(SELECT * FROM departments

 WHERE department_id < 20)

WHERE department_id = 10;




INSERT INTO (SELECT department_id, department_name

FROM departments

WHERE department_id < 20)

VALUES (35, 'MARKETING');

创建了一行。

答案 3 :(得分:1)

子查询可以在INSERT语句的INTO子句中使用。所以A也是正确答案。

以下查询有效:

insert into (select name from emp) 
values ((select 'sunil' from dual));