单行和多行子查询

转载 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'; ...

【ORACLE】[问题解决]ORA-01427 单行子查询返回多个行

有人问题我一个问题,情况如下: 他要用根据divide_act_channel_day的new_amount字段去更新divide_stat的new_amount字段。 两张表关联的条件:day=...

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum 分页,视图,序列,索引...

SQL 查询重复和删除重复行的绝招(包括多行和单行)

--1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId f...
  • sumirry
  • sumirry
  • 2014年11月29日 09:17
  • 330

13.子查询返回多行多列的数据

假设有下面两张表: 部门表dept 雇员表emp         列出公司各个部门的经理的姓名、薪金、部门名称、部门人数、部门平均工资。 步骤1:查找每个部门经理的姓名和薪金。 selec...

oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询

比较运算符  >, >=. =:等于  !=, 逻辑运算符运算的优先顺序是NOT,AND,OR。如果要改变优先顺序,可以使用括号  逻辑运算符  AND:逻辑与,表示两个条件必须...
  • llxlett
  • llxlett
  • 2014年07月14日 09:53
  • 356

Oracle-27-集合操作(交集、并集、差集)&子查询之单行子查询

一、集合操作 1.UNION:并集运算。 语法结构: SQL>select 表1的列1, 表1的列2 from 表1 union select 表2的列1, 表2的列2 from 表2; 其中表...
  • wy_0928
  • wy_0928
  • 2016年04月15日 08:16
  • 5454

CSS实现单行、多行文本溢出显示省略号(…)

.inaline { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; /*clip 修剪...
  • cometwo
  • cometwo
  • 2016年07月10日 16:14
  • 6109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单行和多行子查询
举报原因:
原因补充:

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