• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • ALL子查询

    句法:

    operand comparison_operator ALL (subquery)
    

    这个词ALL,它必须遵循一个比较操作符,表示“回报TRUE如果比较TRUEALL列的子查询返回的值。”例如:

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

    假设表格t1中有一行包含(10)。表达式是TRUEif table t2包含,(-5,0,+5)因为10它大于中的所有三个值t2。表达是FALSE如果表t2包含(12,6,NULL,-100),因为有一个单一的值12在表t2是大于10。如果table 包含,则表达式是未知的(即NULL)。t2(0,NULL,1)

    最后,表达式是TRUEif table t2为空。因此,TRUE当表t2为空时,以下表达式是:

    SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
    

    但是此表达式是NULL当表t2为空时:

    SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
    

    此外,NULL当表t2为空时,以下表达式是:

    SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
    

    通常,包含NULL值的表空表都是“极端情况”。”当编写子查询,总是考虑是否采取了这两种可能性考虑在内。

    NOT IN是的别名<> ALL。因此,这两个语句是相同的:

    SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
    SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
    

    MySQL 8.0.19支持该TABLE语句。与INANY和和一样SOME,您可以TABLEALL和一起使用,NOT IN只要满足以下两个条件:

    • 子查询中的表仅包含一列
    • 子查询不依赖于列表达式

    例如,假设该表t2由单个列组成,则可以使用TABLE t2以下方式编写前面显示的最后两个语句:

    SELECT s1 FROM t1 WHERE s1 <> ALL (TABLE t2);
    SELECT s1 FROM t1 WHERE s1 NOT IN (TABLE t2);
    

    查询诸如SELECT * FROM t1 WHERE 1 > ALL(SELECT MAX(s1)FROM t2);不能使用被写入TABLE t2因为子查询取决于列表达式。