Oracle SQL比较运算符(ALL)行为

时间:2014-07-30 02:51:05

标签: sql

我是oracle sql&的新手尝试使用以下select语句查询数据库

select first_name || last_name "Name", 
       department_id 
from employees 
where department_id >= all (80,90,100);" 

我期待的结果是80年代,90年代,100年代及以上,但我得到100分及以上。为什么我看不到80和90年代?这是一个截图。

SQL> select first_name|| ' ' || last_name "Name", department_id
  2  from employees where department_id >= all (80, 90, 100);

Name                                           DEPARTMENT_ID
---------------------------------------------- -------------
Nancy Greenberg                                          100
Daniel Faviet                                            100
John Chen                                                100
Ismael Sciarra                                           100
Jose Manuel Urman                                        100
Luis Popp                                                100
Shelley Higgins                                          110
William Gietz                                            110

选择了8行。

SQL> select distinct department_id from employees;

DEPARTMENT_ID
-------------
      100
       30

       90
       20
       70
      110
       50
       80
       40
       60

2 个答案:

答案 0 :(得分:0)

使用>= ALL (...)时,检查您的值是否大于或等于列表中的最大值。在这种情况下,您的列表是(80,90,100),因此只有那些大于或等于100的值才是结果集的一部分。

点击此链接以更全面地了解ALLhttp://www.oracle-base.com/articles/misc/all-any-some-comparison-conditions-in-sql.php

如果您想获得部门为80,90或100的所有记录,即与3个值中的任何一个完全匹配,您应该使用IN关键字,如下所示:

select first_name|| ' ' || last_name "Name", department_id 
from employees 
where department_id in (80, 90, 100);

答案 1 :(得分:0)

这是所有比较器之间的区别。

  • " x = ALL(...)":该值必须与列表中的所有值匹配才能评估为TRUE。
  • " x!= ALL(...)":该值不得与列表中的任何值匹配,以评估为TRUE。
  • " x> ALL(...)":该值必须大于列表中要评估为TRUE的最大值。
  • " x< ALL(...)":该值必须小于列表中的最小值以评估为TRUE。
  • &#34; x&gt; = ALL(...)&#34;:该值必须大于或等于列表中要评估为TRUE的最大值。 < / LI>
  • &#34; x&lt; = ALL(...)&#34;:该值必须小于或等于列表中要评估为TRUE的最小值。

取自Oracle-Base.com