SQL第一歩第24話.相関サブクエリ


相関サブクエリ


サブクエリの一種で、関連サブクエリと呼ばれます.詳細な定義については、関連サブクエリを参照してください.

1. EXISTS


サブクエリを使用して検索する場合は、データが存在するかどうかを判断する条件を指定できます.

  • この場合、EXISTS述語を使用できます.

  • EXISTS述語は、返されたローのみが返されているかどうかをチェックし、値の「真」と「偽」が返されるので、スカラー量子クエリである必要はありません.

  • sample 551およびsample 552の場合、no=no 2行の値を「あり」に変更しようとすると、EXISTSを使用して条件を満たす行を更新することができる.
  • UPDATE sample551 SET a="있음" WHERE EXISTS (SELECT * FROM sample552 WHERE no2=no);

    2. NOT EXISTS


    NOT EXISTSで逆の場合に戻ることもできます.
    UPDATE sample551 SET a="없음" WHERE NOT EXISTS (SELECT * FROM sample552 WHERE no2=no);

    3.関連サブクエリ

    UPDATE sample551 SET a = '있음' WHERE
        EXISTS (SELECT * FROM sample552 WHERE no2 = no); 
    UPDATEコマンド(親)は、クエリ
  • に示すように、WHERE文のサブクエリ(子)と特定の関係を確立する.
    「関連サブクエリ」と呼ばれます.
  • 単純サブクエリとは異なり、関連するサブクエリのサブクエリは単独で実行できません.
  • DELETE FROM sample54 WHERE a = (SELECT a FROM (SELECT MIN(a) AS a FROM sample54) AS x);
  • DELETEで使用される次の文は、関連するサブクエリではありません.これは、サブクエリが個別のクエリとして実行できるためです.
  • 関連サブクエリの場合、親コマンドに関連付けられているため、サブクエリの一部を個別に切断して実行することはできません.
  • 3-1. 名前付きテーブル

    SELECT * FROM sample552 WHERE no2=no → no2불분명 에러
  • テーブルsample 552のカラム名がno 2でない場合、sample 551のカラムと重複します.
  • カラム名が重複し、どのテーブルに属するカラムを区別できない場合はエラーが発生します.
  • 点(.)列が属するテーブル名を前に入力することで区切ることができます.文の例は次のとおりです.
  • このときsample 551no, sample552.Noのように明確に指定すればいいです.
    SELECT * FROM sample552,sample551 WHERE sample552.no2 = sample551.no
    また、以下のように使用することもできます.
    UPDATE sample551 SET a = '있음' WHERE EXISTS (
        SELECT * FROM sample552 WHERE sample552.no = sample551.no
    );

    4. IN


    スカラー値間の比較では=演算子を使用しますが、比較セットではINを使用して比較します.
    SELECT * FROM sample552 WHERE no2 = no;
  • 上のクエリではエラーが発生しますが、INで次のように変更できます.
  • SELECT * FROM sample551 WHERE no IN (SELECT no2 FROM sample552);
  • 統計関数はNULL値を無視して処理するが、INはNULL=NULLを正しく処理できないため、IS NULLで比較する必要がある.
  • 、NOT INは、集合内にNULLがある場合、真/偽ではなく0またはNULLなどを返す.