logo

Vnořené dotazy v SQL

Předpoklady: Základy SQL

npm vymazat mezipaměť

Vnořené dotazy představují způsob, jak provádět složité dotazy vložením jednoho dotazu do druhého. Vnější dotaz může aplikovat některé podmínky na výsledky vnitřního dotazu. Nechte nás použít STUDENT, COURSE, STUDENT_COURSE tabulky pro pochopení vnořených dotazů.



STUDENT

S_ID S_NAME S_ADDRESS S_PHONE ŠALVĚJ
S1 RAM DILLÍ 9455123451 18
S2 RAMESH GURGAON 9652431543 18
S3 SUJIT ROHTAK 9156253131 dvacet
S4 SURESH DILLÍ 9156768971 18

CHOD

C_ID C_NAME
C1 DSA
C2 Programování
C3 DBMS

STUDENT_KURZ



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

Existují hlavně dva typy vnořených dotazů:

  • Nezávislé vnořené dotazy: V nezávislých vnořených dotazech začíná provádění dotazu od nejvnitřnějšího dotazu k nejvzdálenějším dotazům. Provedení vnitřního dotazu je nezávislé na vnějším dotazu, ale výsledek vnitřního dotazu se použije při provádění vnějšího dotazu. Při psaní nezávislých vnořených dotazů se používají různé operátory jako IN, NOT IN, ANY, ALL atd.
    V: Pokud to chceme zjistit S_ID kteří jsou zapsáni v C_NAME ‚DSA‘ nebo ‚DBMS‘, můžeme to napsat pomocí nezávislého vnořeného dotazu a operátoru IN. Z CHOD tabulky, můžeme to zjistit C_ID pro C_NAME „DSA“ nebo DBMS“ a můžeme je použít C_ID s pro nalezení S_ID s od STUDENT_KURZ STŮL. KROK 1: Nález C_ID pro C_NAME = „DSA“ nebo „DBMS“ Vyberte C_ID z CHOD kde C_NAME = ‚DSA‘ nebo C_NAME = 'DBMS' KROK 2: Použitím C_ID kroku 1 pro nalezení S_ID Vybrat S_ID z STUDENT_KURZ kde C_ID IN (VYBRAT C_ID z CHOD kde C_NAME = ‚DSA‘ nebo C_NAME = „DBMS“); Vnitřní dotaz vrátí sadu se členy C1 a C3 a vnější dotaz vrátí ty S_ID s pro které C_ID se rovná jakémukoli členu množiny (v tomto případě C1 a C3). Takže vrátí S1, S2 a S4. Poznámka: Pokud chceme zjistit jména STUDENT pro uživatele, kteří se zapsali do „DSA“ nebo „DBMS“, lze to provést takto: Vyberte S_NAME z STUDENT kde S_ID IN (Vyberte S_ID z STUDENT_KURZ kde C_ID IN (VYBRAT C_ID z CHOD kde C_NAME = ‚DSA‘ nebo C_NAME = „DBMS“));
    NE V: Pokud to chceme zjistit S_ID s z STUDENT Pokud jste se nezapsali ani do „DSA“ ani do „DBMS“, lze to provést takto: Vyberte S_ID z STUDENT kde S_ID NENÍ IN (Vyberte S_ID z STUDENT_KURZ kde C_ID IN (VYBRAT C_ID z CHOD kde C_NAME = ‚DSA‘ nebo C_NAME = „DBMS“)); Nejvnitřnější dotaz vrátí sadu se členy C1 a C3. Druhý vnitřní dotaz je vrátí S_ID s pro které C_ID se rovná jakémukoli členu množiny (v tomto případě C1 a C3), což jsou S1, S2 a S4. Nejvzdálenější dotaz je vrátí S_ID s kde S_ID není členem množiny (S1, S2 a S4). Takže vrátí S3.
  • Související vnořené dotazy: U souvisejících vnořených dotazů závisí výstup vnitřního dotazu na řádku, který je aktuálně prováděn ve vnějším dotazu. např.; Pokud to chceme zjistit S_NAME z STUDENT s, kteří jsou zapsáni v C_ID „C1“, lze to provést pomocí souvisejícího vnořeného dotazu jako: Vyberte S_NAME z STUDENT S kde EXISTS (vyberte * z STUDENT_KURZ SC, kde S. S_ID =SC. S_ID a SC. C_ID = „C1“); Pro každý řádek STUDENT S, najde řádky z STUDENT_KURZ kde S. S_ID = SC. S_ID a SC. C_ID = ‚C1‘. Pokud pro a S_ID z STUDENT S, existuje alespoň jeden řádek STUDENT_KURZ SC s C_ID = ‚C1‘, pak vnitřní dotaz vrátí hodnotu true a odpovídající S_ID bude vrácen jako výstup.

PŘÍKLAD V KÓDU SQL:

SELECT Jméno studenta



OD Studentů

WHERE StudentID IN (

VYBERTE ID studenta

OD tříd

WHERE Předmět = ‚Matematika‘ A skóre> 90

);

.net tutoriál