• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 带有ANY,IN或SOME的子查询

    句法:

    operand comparison_operator ANY (subquery)
    operand IN (subquery)
    operand comparison_operator SOME (subquery)
    

    comparison_operator这些运算符之一在哪里:

    =  >  <  >=  <=  <>  !=
    

    ANY关键字,它必须遵循一个比较操作符,表示“回报TRUE如果比较TRUEANY列的子查询返回的值。”例如:

    SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
    

    假设表格t1中有一行包含(10)。表达是TRUE如果表t2包含(21,14,7)因为有一个值7t2小于10。表达式是FALSEtable是否t2包含(20,10),或者table t2是否为空。如果table 包含,则表达式是未知的(即NULL)。t2(NULL,NULL,NULL)

    与子查询一起使用时,该词IN是的别名= ANY。因此,这两个语句是相同的:

    SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
    SELECT s1 FROM t1 WHERE s1 IN    (SELECT s1 FROM t2);
    

    IN= ANY表达式列表一起使用时不是同义词。IN可以获取一个表达式列表,但= ANY不能。请参见“比较函数和运算符”。

    NOT IN不是的别名<> ANY,而是的别名<> ALL。请参见“带有ALL的子查询”。

    这个词SOME是的别名ANY。因此,这两个语句是相同的:

    SELECT s1 FROM t1 WHERE s1 <> ANY  (SELECT s1 FROM t2);
    SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
    

    这个词SOME很少使用,但是这个例子说明了为什么它可能有用。对大多数人来说,英语短语“一个不等于任何B-”手段“没有B,其等于,”但这并不是什么是SQL语法的意思。语法的含义是“存在一些b不等于a。”使用<> SOME,而不是有助于确保每个人都理解该查询的真正含义。

    从MySQL 8.0.19开始,可以使用TABLE在一个标量INANYSOME子查询中提供的表格只包含一列。如果t2只有一列,则本节前面显示的语句可以如下所示编写,在每种情况下都替换TABLE t2SELECT s1 FROM t2

    SELECT s1 FROM t1 WHERE s1 > ANY (TABLE t2);
    
    SELECT s1 FROM t1 WHERE s1 = ANY (TABLE t2);
    
    SELECT s1 FROM t1 WHERE s1 IN (TABLE t2);
    
    SELECT s1 FROM t1 WHERE s1 <> ANY  (TABLE t2);
    
    SELECT s1 FROM t1 WHERE s1 <> SOME (TABLE t2);