oracle单行子查询和多行子查询有什么样的区别,不要说什么一个是单行,一个是多行。。。

我问的是在使用中有什么样的区别,什么情况下使用单行子查询,什么情况下使用多行子查询。。... 我问的是在使用中有什么样的区别,什么情况下使用单行子查询,什么情况下使用多行子查询。。 展开
 我来答
传说中的鹰王
2013-03-05 · TA获得超过1053个赞
知道小有建树答主
回答量:923
采纳率:87%
帮助的人:566万
展开全部
子查询可以返回的行数和列数具有约束。如果您使用 IN、ANY 或 ALL,则子查询可以返回多个行,但只返回一个列。如果您使用其它运算符,则子查询必须返回单个值。
多行子查询

示例数据库中的两个表与财务结果有关。fin_code 表是一个较小的表,保存财务数据及其含义的不同代码:
若要列出 fin_data 表中的收入项,请键入以下语句:
SELECT *

FROM fin_data
WHERE fin_data.code IN
( SELECT fin_code.code
FROM fin_code
WHERE type = 'revenue' )

year quarter code amount
1999 Q1 r1 1023
1999 Q2 r1 2033
1999 Q3 r1 2998
1999 Q4 r1 3014
2000 Q1 r1 3114
本示例使用限定符清楚地标识每个引用中的 code 列所属的表。在这个特殊示例中,限定符可能已被省略。
另外两个关键字(ANY 和 ALL)可以用作运算符的限定符以允许它们处理多个行。
以下查询与上面的成功查询相同:
SELECT *

FROM fin_data
WHERE fin_data.code = ANY
( SELECT fin_code.code
FROM fin_code
WHERE type = 'revenue' )

=ANY 条件与 IN 条件相同,但 ANY 还可以和不等式(如 < 或 >)一起使用,从而更灵活地使用子查询。
ALL 关键字与单词 ANY 相似。例如,以下查询列出非收入财务数据:
SELECT *

FROM fin_data
WHERE fin_data.code <> ALL
( SELECT fin_code.code
FROM fin_code
WHERE type = 'revenue' )

这与下面使用 NOT IN 的命令等同:
SELECT *

FROM fin_data
WHERE fin_data.code NOT IN
( SELECT fin_code.code
FROM fin_code
WHERE type = 'revenue' )使用子查询的常见错误

通常,子查询结果集限制为单个列。以下示例没有意义,这是因为 Adaptive Server Anywhere 不知道将 fin_code 中的哪个列与 fin_data.code 列比较。
-- this query is incorrect

SELECT *
FROM fin_data
WHERE fin_data.code IN
( SELECT fin_code.code, fin_code.type
FROM fin_code
WHERE type = 'revenue' )单行子查询

使用 IN 条件的子查询可以返回一组行,而使用比较运算符的子查询则只能返回一行。例如,由于子查询返回两行,所以以下命令导致一个错误:
-- this query is incorrect

SELECT *
FROM fin_data
WHERE fin_data.code =
( SELECT fin_code.code
FROM fin_code
WHERE type = 'revenue' )
随o天
推荐于2017-10-08 · TA获得超过3159个赞
知道大有可为答主
回答量:1740
采纳率:71%
帮助的人:2071万
展开全部
不管在什么情况下子查询能够保证放回值是1<=1行,则可采用单行比较符:=、<、>、<=、>=等;
否则要采用多行比较符:IN、> ANY 、> ALL、< ANY、< ALL等。
举例说明:
1、单行子查询 -- 查询部门在'NEW YORK'的所有雇员信息。
SELECT * FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE loc='NEW YORK');
语句中子查询SELECT deptno FROM dept WHERE loc='NEW YORK'的返回确定只有一个。
2、多行子查询 -- 查询工资低于2000的雇员所属部门名称。
SELECT * FROM dept WHERE deptno IN (SELECT deptno FROM emp WHERE sal<2000);
语句中子查询SELECT deptno FROM emp WHERE sal<2000佣金小于2000的部门不能确定有几个,因此,采用多行比较符IN。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式