TIL-サブクエリ
4280 ワード
サブクエリは、SELECTコマンドによって実行されるデータクエリであり、上位レベルではなく下位レベルのサブクエリを指します.
⇒
特に、サブクエリは主にSQLコマンドのWHERE文に使用されます.
DELTEのWHEREフレーズでサブクエリを使用
sample 54テーブルからa列の最小値の行を削除するには、次の手順に従います.
この場合、まずsample 54からaの最大値が取得される.
次に、このSELECTコマンドをDELETEコマンドのWHERE文で使用し、必要な行を1つのDELETEコマンドで削除できます.
これは、MySQLでは、データの追加/更新/削除時に同じテーブルをサブクエリとして使用できないためです.
SELECTコマンドで実行できます.
エラーが発生しないように実行するには、ロー・ビューを使用してテンポラリ・テーブルを作成するように処理します.
*行ビュー-ROMセクションで使用されるサブクエリ.
ERROR 1248(42000):Every derivedテーブルには独自の別名エラーが必要です.
MySQLの正式なドキュメントでは、FROMセクションのすべてのテーブルに名前が必要です.Aliasは必須であり、一意の名前を持つ必要があります.
*変数
MySQLクライアントでは、次の変数を実行できます.このとき@は変数になります.
setは変数を代入するコマンドになります.
変数を設定すると、次のように使用できます.
スカラー値
SELECTコマンドは、「戻りスカラー値」と呼ばれる値を1つだけ返します.
-WHERE条件が1行しか検索できない場合、それは1つの値となり、スカラー値を返すSELECTコマンドとなる.
-SELECTコマンドは、サブクエリとして使用しやすいため、スカラー値を返す特殊なコマンドと見なされます.
通常、2つの特定の値が同じかどうかを比較すると、それらは単一の値として比較されます.スカラー値を返すサブクエリは、=演算子で比較できます.
-スカラー値を返すサブクエリは、特に
SELECT文でのサブクエリの使用
-SELECT文でステータクエリを指す場合は、量子クエリが必要です.
MySQLなどではFROM文は実際に省略できますが、従来のデータベース製品(Oralなど)ではFROM文は省略できません.
Oracleは、FROM DUAL実行として指定できます.
SETボールでのサブクエリの使用
-SET文がサブクエリを使用する場合は、スカラー値を返すためにスカラー量子クエリを指定する必要があります.
FROMボールでのサブクエリの使用
-これまでFROM球は表のみを指定していましたが、表以外の内容も指定できます.
-FROM文にサブクエリを指定する場合は、SELECTコマンドをカッコで囲むこともできます.
-前のSELECT文またはSET文は、スカラー量子クエリを指定する必要がありますが、FROM文はスカラー値を返す必要はありません.
SELECTコマンドにSELECTコマンドが含まれる構成を
FROM文は、テーブルまたはサブクエリに別名を追加できます.たとえば、SELECT文でカラムまたは式に別名を追加します.
-実際の作業でFROMボールフィンガー固定子クエリの場合
OracleにはLIMIT文がないため、行数をROWNUMに制限できますが、ROWNUMはWHERE文のために番号が割り当てられているため、ソート後に上位ビットを抽出するための条件を追加することはできません.
SELECT *FROM sample33 WHERE ROWNUM<=3;
ただし、FROM文のサブクエリを使用すると、Oracleはソート後に前の項目を抽出することもできます.
INSERTコマンドとサブクエリ
-INSERTコマンドには
INSERT INTO表名VALES(値1、値2、...)
-サブクエリをVALESボールの値として使用します.
-SELECTコマンドを使用してVALESボールではない場合
返される値は、必ずしもスカラー値ではありません.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で返される列数が挿入するテーブルと一致すればよい.
Reference
この問題について(TIL-サブクエリ), 我々は、より多くの情報をここで見つけました https://velog.io/@whytili/TIL-서브쿼리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol