最終更新日2020年2月26日08:07:42(UTC / GMT +8時間)
SQLのサブクエリとは
サブクエリは、より大きなクエリ内にネストされたSQLクエリです。
- サブクエリは次の場所で発生する可能性があります:
- -SELECT句
- -FROM句
- -WHERE句
- サブクエリは、SELECT、INSERT、UPDATE、またはDELETEステートメント内または別のステートメント内にネストできます。サブクエリ。
- サブクエリは通常、別のSQLSELECTステートメントのWHERE句内に追加されます。
- >、<、または=。比較演算子は、IN、ANY、ALLなどの複数行の演算子にすることもできます。
- サブクエリは内部クエリまたは内部選択とも呼ばれ、サブクエリを含むステートメントは内部クエリとも呼ばれます。外部クエリまたは外部選択。
- 内部クエリは親クエリの前に最初に実行されるため、内部クエリの結果を外部クエリに渡すことができます。
あなたSELECT、INSERT、DELETE、またはUPDATEステートメントでサブクエリを使用して、次のタスクを実行できます。
- 式をクエリの結果と比較します。
- かどうかを判断します。クエリの結果に式が含まれます。
- クエリで行が選択されているかどうかを確認します。
構文:
- サブクエリ(内部クエリ)は、メインクエリ(外部クエリ)が実行される前に1回実行されます。
- メインクエリ(外部クエリ)はサブクエリの結果を使用します。
SQLサブクエリの例:
このセクションでは、サブクエリを使用するための要件について学習します。共通フィールド「StudentID」を持つ次の2つのテーブル「student」と「marks」があります。
学生のマーク
ここで、StudentIDが「V002」の学生よりも良いマークを取得したすべての学生を識別するクエリを作成しますが、「V002」のマークはわかりません。
-この問題を解決するには、2つのクエリが必要です。1つのクエリは「V002」のマーク(Total_marksフィールドに保存)を返し、2番目のクエリは最初のクエリの結果よりも良いマークを取得した生徒を識別します。
最初のクエリ:
クエリ結果:
クエリの結果は80です。
-このクエリの結果を使用して、80よりも良い点数を取得した生徒を特定するための別のクエリを作成しました。クエリは次のとおりです:
2番目のクエリ:
クエリ結果:
2つ以上のクエリtを取得する識別された学生StudentIDが「V002」(Abhay)である学生よりも良い番号です。
一方のクエリをもう一方のクエリ内に配置することで、上記の2つのクエリを組み合わせることができます。サブクエリ(「内部クエリ」とも呼ばれます)は、括弧内のクエリです。次のコードとクエリ結果を参照してください。
SQLコード:
クエリ結果:
SQLサブクエリの図解:
サブクエリ:一般規則
サブクエリのSELECTステートメントはほぼ同じですSELECTステートメントに追加され、通常のクエリまたは外部クエリを開始するために使用されます。サブクエリの構文は次のとおりです。
構文:
サブクエリ:ガイドライン
サブクエリを使用する際に考慮すべきガイドラインがいくつかあります:
- サブクエリは括弧で囲む必要があります。
- サブクエリは比較演算子の右側に配置する必要があります。
- サブクエリは結果を内部的に操作できないため、ORDERBY句をサブクエリに追加することはできません。最後の句となるメインのSELECTステートメント(外部クエリ)でORDERBY句を使用できます。
- 単一行のサブクエリで単一行の演算子を使用します。
- サブクエリ(内部クエリ)が外部クエリにnull値を返す場合、WHERE句で特定の比較演算子を使用すると、外部クエリは行を返しません。
サブクエリのタイプ
- 単一行サブクエリ:0行または1行を返します。
- 複数行のサブクエリ:1つ以上の行を返します。
- 複数の列のサブクエリ:1つ以上の列を返します。
- 関連するサブクエリ:外部SQLステートメントの1つ以上の列を参照します。サブクエリは外部SQLステートメントに関連しているため、サブクエリは相関サブクエリと呼ばれます。
- ネストされたサブクエリ:サブクエリは別のサブクエリ内に配置されます。
次のセッションでは、上記のトピックについて徹底的に説明しました。上記のタイプのサブクエリとは別に、INSERT、UPDATE、およびDELETEステートメント内でサブクエリを使用できます。簡単な説明は次のとおりです。
INSERTステートメントを使用したサブクエリ
INSERTステートメントはサブクエリで使用できます。INSERT文を使用したサブクエリの構文と例を次に示します。
構文:
INSERT INTO table_name ) ]SELECT FROM table1 ;
これらの注文を “から挿入する場合Advance_amount2000または5000が “neworder”テーブルに含まれるorders “テーブルでは、次のSQLを使用できます。
サンプルテーブル:orders
SQLコード:
出力:
詳細を表示するにはINSERT文を使用したサブクエリの一覧はここをクリックしてください。
UPDATEステートメントを使用したサブクエリ
UPDATEステートメントでは、単一行のサブクエリによって返される結果と同じ新しい列値を設定できます。 UPDATEステートメントを使用したサブクエリの構文と例を次に示します。
構文:
UPDATE table SET column_name = new_value(SELECT COLUMN_NAMEFROM TABLE_NAME)
そのord_dateを “で更新する場合ord_amountとadvance_amountの差がある “15-JAN-10″のneworder “テーブルは、次のSQLを使用できる” orders “テーブルの最小ord_amountよりも小さい:
サンプルテーブル:neworder
SQLコード:
出力:
UPDATEステートメントを使用したサブクエリの詳細を表示するには、ここをクリックしてください。
DELETEステートメントを使用したサブクエリ
DELETEステートメントはサブクエリで使用できます。 DELETEステートメントを使用したサブクエリの構文と例を次に示します。
構文:
DELETE FROM TABLE_NAME(SELECT COLUMN_NAME FROM TABLE_NAME)
「neworder」テーブルからadvance_amountが「advance_amount」の最大値よりも小さい注文を削除する場合「orders」テーブルでは、次のSQLを使用できます。
サンプルテーブル:neworder
SQLコード:
出力:
DELETEステートメントを使用したサブクエリの詳細を表示するには、ここをクリックしてください。
次は?
- SQLサブクエリ-スライドプレゼンテーション
- 単一行サブクエリ
- 複数行および列サブクエリ
- エイリアスを使用した相関サブクエリ
- ネストされたサブクエリ
注:ここに示されているSQLステートメントの出力は、Oracle Database 10g ExpressEditionを使用して取得されます。
SQL演習の練習
- SQL演習、練習、ソリューション
- SQLテーブルからデータを取得する
- SQLブール演算子とリレーショナル演算子
- SQLワイルドカードおよび特殊演算子
- SQLアグリゲート関数
- SQLフォーマットクエリ出力
- 複数のテーブルでのSQLクエリ
- HRデータベースでのフィルタリングとソート
- SQL結合
- SQL JOINS
- HRデータベースでのSQLJOINS
- SQLサブクエリ
- SQLサブクエリ
- HRデータベースのSQLサブクエリ
- SQLユニオン
- SQLビュー
- SQLユーザーアカウント管理
- ムービーデータベース
- ムービーデータベースのBASICクエリ
- ムービーデータベースのサブクエリ
- ムービーデータベースの結合
- サッカーデータベース
- はじめに
- サッカーデータベースのBASICクエリ
- サッカーデータベースのサブクエリ
- JOINSクエリサッカーデータベース
- 病院データベース
- はじめに
- 基本、サブクエリ、結合
- 従業員データベース
- 従業員データベースの基本クエリ
- 従業員データベースのサブクエリ
- 詳細はこちら!