数据库教程-Oracle Any/Some运算符

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

在本教程中,您将学习如何使用Oracle ANY运算符将值与列表或子查询进行比较。

Oracle ANY运算符简介

Oracle ANY运算符用于将值与子查询返回的值或结果集列表进行比较。下面举例说明ANY运算符与列表或子查询一起使用时的语法:

operator ANY ( v1, v2, v3)  operator ANY ( subquery) 

在这个语法中:

  • ANY运算符前面必须有一个运算符,例如:=!=>>=<<=
  • 列表或子查询必须用圆括号包围。

使用ANY运算符将值与列表进行比较时,Oracle将初始条件扩展到列表的所有元素,并使用OR运算符将它们组合,如下所示:

SELECT     * FROM     table_name WHERE     c > ANY (         v1,         v2,         v3     ); 

Oracle将上述查询转换为以下内容:

SELECT     * FROM     table_name WHERE     c > v1     OR c > v2     OR c > v3; 

如果使用ANY运算符将一个值与子查询返回的结果集进行比较,则Oracle使用EXISTS运算符将查询转换为等效的查询,而不使用ANY运算符。 例如,以下语句返回列表价格大于类别编号:1中产品的任何标价的所有产品:

SELECT     product_name,     list_price FROM     products WHERE     list_price > ANY(         SELECT             list_price         FROM             products         WHERE             category_id = 1     ) ORDER BY     product_name; 

由于查询与ANY运算符一起使用子查询,因此Oracle执行了单个转换,如下所示:

SELECT     product_name,     list_price FROM     products p1 WHERE     EXISTS(         SELECT             list_price         FROM             products p2         WHERE             category_id = 1             AND p1.list_price > p2.list_price     ) ORDER BY     product_name; 

请注意,如果子查询不返回任何行,则以下条件的计算结果为false

operator ANY (subquery) 

因此,整个查询不返回行:

SELECT     * FROM     table_name WHERE     col operator ANY(subquery); 

在Oracle中,SOMEANY的行为完全相同,因此它们完全可以互换。

Oracle ANY运算符的例子

如果子查询返回行或列表具有值,则以下语句适用于ANY运算符:

1. col = ANY ( list )

如果col在列表中匹配一个或多个值,则表达式的计算结果为true,例如:

SELECT     product_name,     list_price FROM     products WHERE     list_price = ANY(         2200,         2259.99,         2269.99     )     AND category_id = 1; 

执行上面示例代码,得到以下结果 –

Oracle Any/Some运算符

2. col != ANY(list)

如果列与列表中的一个或多个值不匹配,则表达式的计算结果为true。参考以下查询语句 –

SELECT     product_name,     list_price FROM     products WHERE     list_price != ANY(         2200,         2259.99,         2269.99     )     AND category_id = 1 ORDER BY     list_price DESC; 

执行上面示例代码,得到以下结果 –

Oracle Any/Some运算符

3. col > ANY (list)

如果col大于列表中的最小值,则表达式的计算结果为true

SELECT     product_name,     list_price FROM     products WHERE     list_price > ANY(         2200,         2259.99,         2269.99     )     AND category_id = 1 ORDER BY     list_price DESC; 

执行上面示例代码,得到以下结果 –

Oracle Any/Some运算符

4. col >= ANY (list)

如果col大于或等于列表中的最小值,则表达式的计算结果为true。参考以下查询语句 –

SELECT     product_name,     list_price FROM     products WHERE     list_price >= ANY(         2200,         2259.99,         2269.99     )     AND category_id = 1 ORDER BY     list_price DESC; 

执行上面示例代码,得到以下结果 –

Oracle Any/Some运算符

5. col < ANY (list)

如果col小于列表中的最大值,则表达式的计算结果为true

SELECT     product_name,     list_price FROM     products WHERE     list_price < ANY(         2200,         2259.99,         2269.99     )     AND category_id = 1 ORDER BY     list_price DESC; 

执行上面示例代码,得到以下结果 –

Oracle Any/Some运算符

6. col <= ANY (list)

如果col小于或等于列表中的最大值,则表达式的计算结果为true

SELECT     product_name,     list_price FROM     products WHERE     list_price <= ANY(         2200,         2259.99,         2269.99     )     AND category_id = 1 ORDER BY     list_price DESC; 

执行上面示例代码,得到以下结果 –

Oracle Any/Some运算符

在本教程中,您已学习如何使用Oracle ANY运算符将值与列表或子查询进行比较。

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/16/数据库教程-oracle-any-some运算符/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注