Sql 1Z0-007试题

Sql 1Z0-007试题,sql,plsql,Sql,Plsql,问题: 子查询可以在哪四个子句中使用?选择四个 A.在INSERT语句的INTO子句中 B.在SELECT语句的FROM子句中 C.在SELECT语句的GROUP BY子句中 D.在SELECT语句的WHERE子句中 E.在UPDATE语句的SET子句中 F.在INSERT语句的VALUES子句中 回答:B,D,E,F 但我认为正确的答案如下:A、B、D、E而不是F。不是吗?首先,我们必须承认子查询返回一组值元组行:{value\u 1\u A,value\u 1\u B,…,value\u 2

问题: 子查询可以在哪四个子句中使用?选择四个

A.在INSERT语句的INTO子句中

B.在SELECT语句的FROM子句中

C.在SELECT语句的GROUP BY子句中

D.在SELECT语句的WHERE子句中

E.在UPDATE语句的SET子句中

F.在INSERT语句的VALUES子句中

回答:B,D,E,F


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

首先,我们必须承认子查询返回一组值元组行:{value\u 1\u A,value\u 1\u B,…,value\u 2\u A,value\u 2\u B,…}

A-INTO子句需要一个表名,而不是一组值,因此不能使用子查询。请注意,这与B不同,因为您可以通过子查询返回的一组行来查询匿名表,但在匿名表中插入不使用的值是没有意义的

INSERT语句的VALUES子句期望子查询返回一组值

正确答案是B、D、E和F

下面是关于子查询的更多信息:

否,B,D,E,F听起来正确


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

在!处拾取。。。我发现了一些非常重要的东西,这证明了我的断言

其他DML语句中的子查询

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

合并。下面是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;
删除工资低于平均水平的员工的记录

使用相关子查询的部门薪资:

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');

已创建1行。

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

以下查询工作正常:

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

插入tb2列1值从tb1中选择TOP 1列1应该可以。请注意,子查询总是放在参数中。当我尝试:插入tb2col1值从tb1中选择col1时,它会工作,但当我尝试:插入tb2col1,col2值从tb1中选择col1,col2不工作!!我确切地知道,从tb1中选择col1,col2返回一行为什么???你不是因为张贴问题而违反了考试条件吗?@kupa,它不起作用,因为它必须是标量值,正如我所写的那样。@Mitch,我想问题的关键不在于问为什么正确答案与预期的不同,kupa似乎在试图理解和学习,而是如何提前知道正确答案;它将在MySQL上尝试将行插入到table1中,但无效。不幸的是,我无法在Oracle上进行测试,但我认为您的查询毫无意义。这可能有效,但毫无意义。参数可以在我的答案中找到。Oracle和其他RDBMS允许可写视图,并且基本上相同的规则适用于这里的子查询。但正如我在回答中所写的那样,子查询通常不能在那里使用,但前提是它基本上使用与可写视图相同的结构/规则;它会在表1中插入行,你能告诉我你说的是什么意思吗?在F中,你可以使用返回标量值的子查询。如果insert-to中的子查询定义为要添加的列是明确的,它可能会接受它;但这只是一个特例,不是一般规则。例如,通过添加一个函数调用,比如从表1中选择GETDATE作为col1、col2,可以使查询变得更复杂,这样它就不起作用了。关于标量值,我已经在问题的注释中解释过了。太好了!!!我理解你的意思,答案A不是真的,因为它不总是有效的,特别是对于你的案例,从表1中选择GETDATE作为col1,col2,但问题可以使用并不意味着在某些情况下可以使用它不是强制的,总是必须使用