mysql之any,some all

ALL、ANY和SOME子查询

ALL和ANY操作符的常见用法是结合一个相对比较操作符对一个数据列子查询的结果进行测试。它们测试比较值是否与子查询所返回的全部或一部分值匹配。比如说,如果比较值小于或等于子查询所返回的每一个值,<= ALL将是true;只要比较值小于或等于子查询所返回的任何一个值,<= ANY将是true。SOME是ANY的一个同义词。

下面这条语句用来检索最早出生的总统,具体做法是选取出生日期小于或等于president数据表里的所有出生日期(只有最早的出生日期满足这一条件)的那个数据行:

 
  1. mysql>SELECTlast_name,first_name,birthFROMpresident
  2. ->WHEREbirth<=ALL(SELECTbirthFROMpresident);
  3. +------------+------------+------------+
  4. |last_name|first_name|birth|
  5. +------------+------------+------------+
  6. |Washington|George|1732-02-22|
  7. +------------+------------+------------+

下面这条语句的用处就不大了,它将返回所有的数据行,因为对于每个日期,至少有一个日期(它本身)大于或等于它:

 
  1. mysql>SELECTlast_name,first_name,birthFROMpresident
  2. ->WHEREbirth<=ANY(SELECTbirthFROMpresident);
  3. +------------+---------------+------------+
  4. |last_name|first_name|birth|
  5. +------------+---------------+------------+
  6. |Washington|George|1732-02-22|
  7. |Adams|John|1735-10-30|
  8. |Jefferson|Thomas|1743-04-13|
  9. |Madison|James|1751-03-16|
  10. |Monroe|James|1758-04-28|
  11. ...

当ALL、ANY或SOME操作符与"="比较操作符配合使用时,子查询可以是一个数据表子查询。此时,你需要使用一个数据行构造器来提供与子查询所返回的数据行进行比较的比较值。

 
  1. mysql>SELECTlast_name,first_name,city,stateFROMpresident
  2. ->WHERE(city,state)=ANY
  3. ->(SELECTcity,stateFROMpresident
  4. ->WHERElast_name='Roosevelt');
  5. +-----------+-------------+-----------+-------+
  6. |last_name|first_name|city|state|
  7. +-----------+-------------+-----------+-------+
  8. |Roosevelt|Theodore|NewYork|NY|
  9. |Roosevelt|FranklinD.|HydePark|NY|
  10. +-----------+-------------+-----------+-------+

前一节里提到过,IN和NOT IN操作符是= ANY和< > ALL的简写。也就是说,IN操作符的含义是"等于子查询所返回的某个数据行",NOT IN操作符的含义是"不等于子查询所返回的任何数据行"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值