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