68599


SQLの副問い合わせのALLを勉強しているのですが、以下の文は何が違いがわかりません。  
違いが分からず、検証してみたところ出力の違いを出すことはできました。  
以下の文で条件の「<」「>」のうち「>」は出力が一緒なのですが、「<」だと出力が異なります。

[code]

    SELECT * FROM 家計簿 WHERE 入金額 > ALL (SELECT 入金額 FROM 家計簿アーカイブ);
    SELECT * FROM 家計簿 WHERE 入金額 > (SELECT MAX(入金額) FROM 家計簿アーカイブ);
    
[/code]

[code]

    SELECT * FROM 家計簿 WHERE 入金額 < ALL (SELECT 入金額 FROM 家計簿アーカイブ);
    SELECT * FROM 家計簿 WHERE 入金額 < (SELECT MAX(入金額) FROM 家計簿アーカイブ);
    
[/code]

実際に使ったテーブルは以下のように設定しました。

[code]

    DROP TABLE 家計簿 IF EXISTS;
    CREATE TABLE 家計簿(日付 DATE, 費目 VARCHAR(20), メモ VARCHAR(100), 入金額 INTEGER, 出金額 INTEGER);
    INSERT INTO 家計簿 VALUES('2013-01-10','給料','12月の給料',300000,0);
    INSERT INTO 家計簿 VALUES('2013-02-10','給料','1月の給料',280000,0);
    INSERT INTO 家計簿 VALUES('2013-02-18','水道光熱費','1月の電気代',0,7560);
    INSERT INTO 家計簿 VALUES('2013-03-10','給料','2月の給料',290000,0);
    INSERT INTO 家計簿 VALUES('2013-04-10','給料','3月の給料',250000,0);
    
    DROP TABLE 家計簿アーカイブ IF EXISTS;
    CREATE TABLE 家計簿アーカイブ(日付 DATE, 費目 VARCHAR(20), メモ VARCHAR(100), 入金額 INTEGER, 出金額 INTEGER); 
    INSERT INTO 家計簿アーカイブ VALUES('2012-12-10','給料','11月の給料',280000,0);
    INSERT INTO 家計簿アーカイブ VALUES('2012-12-25','居住費','1月の家賃支払い',0,80000);
    INSERT INTO 家計簿アーカイブ VALUES('2013-01-10','給料','12月の給料',280000,0);
    
[/code]


CC BY-SA 4.0
2020-07-14T15:57:56.423
68593
2020-07-15T00:14:50.263
40856
question
sql
SQLの副問い合わせのALLについての質問です。


[ALL句](http://www.sql-
reference.com/select/subquery_all.html)は全ての条件に一致する条件なので、下記のように言い換えることができます。  
つまり項番3と項番5、および項番4と項番6のSQLがそれぞれ等価であり、質問文の項番3と項番4は意味が異なります。

  1. `... hoge > ALL(SELECT fuga ...`

  * hogeがすべてのfugaより大きい

  2. `... hoge > (SELECT MAX(fuga) ...`

  * hogeがすべてのfugaより大きい(← 集計したfugaの最大値より大きい)

  3. `... hoge < ALL(SELECT fuga ...`

  * hogeがすべてのfugaより小さい

  4. `... hoge < (SELECT MAX(fuga) ...`

  * hogeが **いずれかの** fugaより小さい(← 集計したfugaの最大値より小さい)

  5. `... hoge < (SELECT MIN(fuga) ...`

  * hogeがすべてのfugaより小さい(← 集計したfugaの **最小値** より小さい)

  6. `... hoge < ANY(SELECT fuga ...`

  * hogeが **いずれかの** fugaより小さい


CC BY-SA 4.0
2020-07-15T00:14:50.263
68599
2020-07-15T00:14:50.263
9820
68593
answer