单行和多行子查询

转载 2006年06月02日 23:55:00

子查询可以返回的行数和列数具有约束。如果您使用 INANY 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' )

1.子查询知识体系,单行子查询,多行子查询

 1查询工资比scott高的员工信息 A 第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; ...
  • toto1297488504
  • toto1297488504
  • 2014年10月10日 01:05
  • 3211

单行和多行子查询

子查询可以返回的行数和列数具有约束。如果您使用 IN、ANY 或 ALL,则子查询可以返回多个行,但只返回一个列。如果您使用其它运算符,则子查询必须返回单个值。多行子查询 示例数据库中的两个表与财务结...
  • zhouqixiang
  • zhouqixiang
  • 2007年12月16日 20:30
  • 1043

【Oracle】Oracle的子查询——单行子查询和多行子查询;

1、查询部分分为主查询和子查询; 2、根据返回值的记录多少分为单行子查询和多行子查询;单行子查询用单行比较符=连接;多行子查询用多行比较符in连接; 3、子查询的内容可以放在FROM后面,也可以放...
  • River_Continent
  • River_Continent
  • 2018年01月01日 04:56
  • 234

ORA-01427: 单行子查询返回多个行

有人问题我一个问题,情况如下: 他要用根据divide_act_channel_day的new_amount字段去更新divide_stat的new_amount字段。 两张表关联的条件:day=...
  • qiu512300471
  • qiu512300471
  • 2014年08月05日 16:38
  • 1057

单行子查询返回多个行

大家是不是也经常碰到单行子查询返回多个行的错误提示。我已经碰到数次这种错误了,这种错误是基于数据存在的,开发人员也许在最初写这个查询语句的时候没有合适的数据,所以没有发现错误,当满足条件的数据出现后才...
  • zhangzl1012
  • zhangzl1012
  • 2017年09月21日 21:47
  • 932

ORA-01427:单行子查询返回多个行

今天写了一个sql,多张表关联,其中一个字段受理日期是与另一张表关联后,还要求是另一张表状态为什么什么的条件。sql语句:        “select a.id,a.case_id,e.case_...
  • u010097777
  • u010097777
  • 2016年09月21日 22:55
  • 10853

12.在where中使用子查询-子查询返回单行单列和单行多列的数据

子查询: 子查询简单来理解就是用查询的结果在内存中构建一个数据表,而我们可以使用普通sql语句来操控这个内存中的数据表,这个数据表就叫做子查询。 一、返回单行单列数据的子查询。 select enam...
  • lzhui1987
  • lzhui1987
  • 2016年05月22日 17:26
  • 1588

MySQL学习(二)DQL 加强,多表查询

多表查询有如下几种: 合并结果集;UNION 、 UNION ALL 连接查询 内连接 [INNER] JOIN ON 外连接 OUTER JOIN ON 左外连接 LEFT [OUTER...
  • pengyu1801
  • pengyu1801
  • 2017年02月23日 13:28
  • 229

ORA-01427 单行子查询返回多于一个行

报错前pl/sql语句:UPDATE "DEVELOP"."PRODUCE_PLAN_NEED_PRODUCT" ASET A.REMAIN_AMOUNT=A.AMOUNT-(SELECT BAMOU...
  • jklugv
  • jklugv
  • 2008年10月16日 11:23
  • 3376

ORACLE单行函数与多行函数之一

单行函数与多行函数 最直观的解释是:单行函数输入一行,输出一行。多行函数输入多行,输出一行。如下图: 单行函数分为五种类型:字符函数、数值函数、日期函数、转换函数、通用函数 多行函数: 从...
  • q947817003
  • q947817003
  • 2013年11月02日 14:01
  • 1433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单行和多行子查询
举报原因:
原因补充:

(最多只允许输入30个字)