TIL-サブクエリ


サブクエリは、SELECTコマンドによって実行されるデータクエリであり、上位レベルではなく下位レベルのサブクエリを指します.
하나의 SQL문에 포함되어 있는 또 다른 SQL문サブクエリは、SQL文で指定された低レベルSELECTコマンドで、괄호로 묶어 지정個です.
特に、サブクエリは主にSQLコマンドのWHERE文に使用されます.

  • DELTEのWHEREフレーズでサブクエリを使用SELECT *FROM sample54;
    sample 54テーブルからa列の最小値の行を削除するには、次の手順に従います.DELETE FROM sample54 where a=20;コマンドで削除できますが、行数が多すぎると、この方法で削除するのは難しいです.
    この場合、まずsample 54からaの最大値が取得される.SELECT MIN(a) FROM sample54;
    次に、このSELECTコマンドをDELETEコマンドのWHERE文で使用し、必要な行を1つのDELETEコマンドで削除できます.DELETE FROM sample54 where a=(SELECT MIN(a) FROM sample54);ただし、MySQLではクエリーを実行できません.
    これは、MySQLでは、データの追加/更新/削除時に同じテーブルをサブクエリとして使用できないためです.
    SELECTコマンドで実行できます.
    エラーが発生しないように実行するには、ロー・ビューを使用してテンポラリ・テーブルを作成するように処理します.
    *行ビュー-ROMセクションで使用されるサブクエリ.DELETE FROM sample54 WHERE a =(SELECT a FROM(SELECT MIN(a) AS a FROM sample54) AS x);ASXを入力しない場合
    ERROR 1248(42000):Every derivedテーブルには独自の別名エラーが必要です.
    MySQLの正式なドキュメントでは、FROMセクションのすべてのテーブルに名前が必要です.Aliasは必須であり、一意の名前を持つ必要があります.
    *変数
    MySQLクライアントでは、次の変数を実行できます.このとき@は変数になります.
    setは変数を代入するコマンドになります.set @a = (SELECT MIN(a) FROM sample54);
    変数を設定すると、次のように使用できます.DELETE FROM sample54 WHERE a = @a;

  • スカラー値
    SELECTコマンドは、「戻りスカラー値」と呼ばれる値を1つだけ返します.
    -WHERE条件が1行しか検索できない場合、それは1つの値となり、スカラー値を返すSELECTコマンドとなる.
    -SELECTコマンドは、サブクエリとして使用しやすいため、スカラー値を返す特殊なコマンドと見なされます.DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM sample54);
    通常、2つの特定の値が同じかどうかを比較すると、それらは単一の値として比較されます.スカラー値を返すサブクエリは、=演算子で比較できます.
    -スカラー値を返すサブクエリは、特に스칼라 서브쿼리と呼ばれます.

  • SELECT文でのサブクエリの使用
    -SELECT文でステータクエリを指す場合は、量子クエリが必要です.SELECT (SELECT COUNT(*) FROM sample51) AS sq1, (SELECT COUNT(*) FROM sample54) AS sq2;
    MySQLなどではFROM文は実際に省略できますが、従来のデータベース製品(Oralなど)ではFROM文は省略できません.
    Oracleは、FROM DUAL実行として指定できます.SELECT (SELECT COUNT(*) FROM sample51 AS sq1, (SELECT COUNT(*) FROM sample55 AS sq2 FROM DUAL;

  • SETボールでのサブクエリの使用
    -SET文がサブクエリを使用する場合は、スカラー値を返すためにスカラー量子クエリを指定する必要があります.SELECT *FROM sample54; UPDATE sample54 SET a = (SELECT a FROM(SELECT MAX(a) AS a FROM sample54) AS x);

  • FROMボールでのサブクエリの使用
    -これまでFROM球は表のみを指定していましたが、表以外の内容も指定できます.
    -FROM文にサブクエリを指定する場合は、SELECTコマンドをカッコで囲むこともできます.
    -前のSELECT文またはSET文は、スカラー量子クエリを指定する必要がありますが、FROM文はスカラー値を返す必要はありません.SELECT *FROM(SELECT *FROM sample54) sq;
    SELECTコマンドにSELECTコマンドが含まれる構成をnested구조または중첩구조または내포구조と呼ぶ.
    FROM文は、テーブルまたはサブクエリに別名を追加できます.たとえば、SELECT文でカラムまたは式に別名を追加します.ASキーワードを使用して指定することもできますが、ASの追加によるエラーはありません.
    -実際の作業でFROMボールフィンガー固定子クエリの場合
    OracleにはLIMIT文がないため、行数をROWNUMに制限できますが、ROWNUMはWHERE文のために番号が割り当てられているため、ソート後に上位ビットを抽出するための条件を追加することはできません.
    SELECT *FROM sample33 WHERE ROWNUM<=3;
    ただし、FROM文のサブクエリを使用すると、Oracleはソート後に前の項目を抽出することもできます.SELECT *FROM (SELECT *FROM sample54 ORDER BY a DESC) sq WHERE ROWNUM <=2;
            

  • INSERTコマンドとサブクエリ
    -INSERTコマンドにはVALUES 구의 값으로 서브쿼리를 사용하는 경우VALUES 구 대신 SELECT 명령을 사용を行うには2つの方法がある.
    INSERT INTO表名VALES(値1、値2、...)
    -サブクエリをVALESボールの値として使用します.INSERT INTO sample541 VALUES((SELECT COUNT(*) FROM sample51), (SELECT COUNT(*) FROM sample54));
    -SELECTコマンドを使用してVALESボールではない場合INSERT INTO sample541 SELECT 1,2;
    返される値は、必ずしもスカラー値ではありません.SELECTで返される列数が挿入するテーブルと一致すればよい.