问题: 哪个子句可以使用子查询? (选择四项。)
一个。在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 。不是吗???
答案 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));