天天看點

OCP-1Z0-051 第161題 insert子句中的子查詢

一、原題

 View the exhibit and examine the description for the SALES and CHANNELS tables.

OCP-1Z0-051 第161題 insert子句中的子查詢

You issued the following SQL statement to insert a row in the SALES table:

INSERT INTO sales

VALUES

  (23,

   2300,

   SYSDATE,

   (SELECT channel_id FROM channels WHERE channel_desc = 'Direct Sales'),

   12,

   1,

   500);

Which statement is true regarding the execution of the above statement?

A. The statement will execute and the new row will be inserted in the SALES table.

B. The statement will fail because subquery cannot be used in the VALUES clause.

C. The statement will fail because the VALUES clause is not required with subquery.

D. The statement will fail because subquery in the VALUES clause is not enclosed with in single quotation marks

答案:A

二、題目翻譯

檢視SALES and CHANNELS表的結構

執行下面的SQL語句給SALES表插入一行:

關于執行上面的語句哪句話是正确的?

A.語句執行成功,并且SALES表會插入一個新行。

B.語句失敗,因為子查詢不能用于VALUES子句中。

C.語句失敗,因為VALUES子句不需要使用子查詢。

D.語句失敗,因為VALUES子句中的子查詢沒有使用單引号引起來。

三、題目解析

A選項,答案是正确的,如果子查詢中隻傳回一行,則這個答案正确,如果子查詢中傳回多行,就會報錯,但相比其它答案,隻有這個還算比較正确。

B選項不正确,values子句中,可以使用子查詢,詳見下面。

C選項不正确,需不需要使用子查詢,是業務需求決定的。

D選項不正确,子查詢使用括号,而不是單引号。

四、測試

SQL>  create table emp3 as select * from emp where 1=0;

Table created.

-- values中的子查詢如果傳回一行,則能插入成功:

SQL>  insert into emp3(empno,ename,deptno) values(1234,'aaa',(select deptno from emp where ename='SCOTT'));

1 row created.

-- values中的子查詢如果傳回多行,則插入失敗:

SQL> insert into emp3(empno,ename,deptno) values(1234,'aaa',(select deptno from emp where deptno=10));

insert into emp3(empno,ename,deptno) values(1234,'aaa',(select deptno from emp where deptno=10))

                                                        *

ERROR at line 1:

ORA-01427: single-row subquery returns more than one row

繼續閱讀