logo

SQL のネストされたクエリ

前提条件: SQLの基本

ネストされたクエリは、あるクエリを別のクエリ内に埋め込むことで、複雑なクエリを実行する方法です。外部クエリは、内部クエリの結果にいくつかの条件を適用できます。使ってみましょう 学生、コース、学生_コース ネストされたクエリを理解するための表。



学生

S_ID S_NAME S_アドレス S_PHONE セージ
S1 ラム デリー 9455123451 18
S2 ラメシュ グルガオン 9652431543 18
S3 スジット ロータク 9156253131 二十
S4 スレシュ デリー 9156768971 18

コース

C_ID C_NAME
C1 DSA
C2 プログラミング
C3 DBMS

STUDENT_COURSE



S_ID C_ID
S1 C1
S1 C3
S2 C1
S3 C2
S4 C2
S4 C3

ネストされたクエリには主に 2 つのタイプがあります。

  • 独立したネストされたクエリ: 独立したネストされたクエリでは、クエリの実行は最も内側のクエリから最も外側のクエリに向かって開始されます。内部クエリの実行は外部クエリから独立していますが、内部クエリの結果は外部クエリの実行に使用されます。 IN、NOT IN、ANY、ALL などのさまざまな演算子は、独立したネストされたクエリを作成する際に使用されます。
    で: それを知りたいなら S_ID に在籍している人 C_NAME 「DSA」または「DBMS」は、独立したネストされたクエリと IN 演算子を使用して作成できます。から コース 表を見れば分かります C_ID のために C_NAME 「DSA」または「DBMS」、これらを使用できます C_ID 見つけるための S_ID からの STUDENT_COURSE テーブル。 ステップ1: 見つける C_ID のために C_NAME ='DSA' または 'DBMS' を選択してください C_ID から コース どこ C_NAME =「DSA」または C_NAME = 「DBMS」 ステップ2: 使用する C_ID ステップ 1 の検索 S_ID 選択する S_ID から STUDENT_COURSE どこ C_ID IN (選択 C_ID から コース どこ C_NAME =「DSA」または C_NAME ='DBMS');内部クエリはメンバー C1 と C3 を含むセットを返し、外部クエリはそれらを返します。 S_ID どれのための C_ID セットの任意のメンバーと等しい (この場合は C1 と C3)。したがって、S1、S2、および S4 が返されます。 注記: の名前を調べたい場合は、 学生 「DSA」または「DBMS」のいずれかに登録している場合は、次のように実行できます: Select S_NAME from 学生 どこ S_ID IN (選択 S_ID から STUDENT_COURSE どこ C_ID IN (選択 C_ID から コース どこ C_NAME ='DSA' または C_NAME ='DBMS'));
    ありませんで: それを知りたいなら S_ID 学生 「DSA」にも「DBMS」にも登録していない場合は、次のように行うことができます。 S_ID から 学生 どこ S_ID 入っていない (選択してください) S_ID から STUDENT_COURSE どこ C_ID IN (選択 C_ID から コース どこ C_NAME ='DSA' または C_NAME ='DBMS'));最も内側のクエリは、メンバー C1 と C3 を含むセットを返します。 2 番目の内部クエリはそれらを返します S_ID どれのための C_ID セットの任意のメンバー (この場合は C1 と C3)、つまり S1、S2、および S4 に等しい。最も外側のクエリはそれらを返します。 S_ID どこですか S_ID セット (S1、S2、および S4) のメンバーではありません。したがって、S3 が返されます。
  • 相互に関連するネストされたクエリ: 相関関係のあるネストされたクエリでは、内部クエリの出力は、外部クエリで現在実行されている行に依存します。例えば。;それを知りたいなら S_NAME 学生 に在籍している人は C_ID 「C1」。これは、相関関係のあるネストされたクエリを使用して次のように実行できます。 Select S_NAME from 学生 S where EXISTS ( select * from STUDENT_COURSE SC どこで S. S_ID =SC. S_ID そしてSC。 C_ID ='C1');各行ごとに、 学生 S、次の行を検索します。 STUDENT_COURSE ここで、S. S_ID =SC。 S_ID そしてSC。 C_ID ='C1'。の場合 S_ID から 学生 S、少なくとも行が存在します STUDENT_COURSE SC付き C_ID ='C1' の場合、内部クエリは true を返し、対応する S_ID が出力として返されます。

SQL コードの例:

生徒名を選択してください



学生から

StudentID の場所 (

学生IDを選択してください

成績から

WHERE 科目 = 「数学」 AND スコア> 90

);