单行和多行子查询

转载 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' )

相关文章推荐

【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...

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

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

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

如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览。 实现方法: overflow: hidden...

jquery datatable 多行(单行)选择(select),行获取/行删除

jquery datatable 多行(单行)选择(select),行获取/行删除代码展示// 示例数据源 var dataSet = [ ['Tasman','Internet Explor...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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