MySQL中IN、ALL、ANY、SOME的解释

@[TOC](列子查询(row subquery)中的IN、ANY、SOME、ALL的理解)

IN、ALL、ANY、SOME的解释

  1. IN:在范围内的值,只要有就true
  2. ALL: 与子查询返回的所有值比较为true 则返回true
  3. ANY:与子查询返回的任何值比较为true 则返回true
  4. SOME:是ANY的别称,很少用

注意:

ALL、ANY、SOME的使用 必须 要用到比较操作符


/*
举个例子: 表1(table1)中 列r1有 1 2 8
		表2(table2)中  列r2有 2 3
*/
-- 用IN举例子  返回的结果是 2 
SELECT r2			
FROM table2
WHERE r2 IN (SELECT r1
             FROM table1
            );
            
-- ALL 例子   没有返回结果  因为 2 3没有都大于或等于 1 2 8 所有的数值
--  也就是 子查询中的所有值都成立 则成立 
SELECT r2
FROM table2
WHERE r2 >= ALL(SELECT r1
             FROM table1
            );
--ANY例子  返回结果是2 3  只要子查询中返回的值 有一个成立 则成立
SELECT r2
FROM table2
WHERE r2 >= ANY(SELECT r1
             FROM table1
            );            

ALL、ANY操作符的特殊情况

  1. ALL的特殊情况

    1. 如果table1为空表 则都为TRUE
    2. 与如果子查询中有NULL 最终父查询返回结果都是NULL
  2. ANY的特殊情况

    空表和NULL的结果都是NULL

你可能感兴趣的:(MySQL)