Edellytykset: SQL:n perusteet
Sisäkkäiset kyselyt ovat tapa suorittaa monimutkaisia kyselyitä upottamalla yksi kysely toiseen. Ulkoinen kysely voi soveltaa joitain ehtoja sisäisen kyselyn tuloksiin. Anna meidän käyttää STUDENT, COURSE, STUDENT_COURSE taulukoita sisäkkäisten kyselyjen ymmärtämiseen.
OPISKELIJA
myflixer
| S_ID | S_NAME | S_ADDRESS | S_PHONE | SALVIA |
| S1 | RAM | DELHI | 9455123451 | 18 |
| S2 | RAMESH | GURGAON | 9652431543 | 18 |
| S3 | SUJIT | ROHTAK | 9156253131 | kaksikymmentä |
| S4 | SURESH | DELHI | 9156768971 | 18 |
KURSSI
| C_ID | C_NAME |
| C1 | DSA |
| C2 | Ohjelmointi |
| C3 | DBMS |
STUDENT_COURSE
| S_ID | C_ID |
| S1 | C1 |
| S1 | C3 |
| S2 | C1 |
| S3 | C2 |
| S4 | C2 |
| S4 | C3 |
Sisäkkäisiä kyselyjä on pääasiassa kahdenlaisia:
- Riippumattomat sisäkkäiset kyselyt: Riippumattomissa sisäkkäisissä kyselyissä kyselyn suoritus alkaa sisimmästä kyselystä uloimpiin kyselyihin. Sisäisen kyselyn suoritus on ulkoisesta kyselystä riippumaton, mutta sisäisen kyselyn tulosta käytetään ulkoisen kyselyn suorittamiseen. Erilaisia operaattoreita, kuten IN, NOT IN, ANY, ALL jne. käytetään itsenäisten sisäkkäisten kyselyjen kirjoittamiseen.
SISÄÄN: Jos haluamme ottaa selvää S_ID jotka ovat ilmoittautuneet mukaan C_NAME 'DSA' tai 'DBMS', voimme kirjoittaa sen itsenäisen sisäkkäisen kyselyn ja IN-operaattorin avulla. From KURSSI pöytään, voimme selvittää C_ID varten C_NAME 'DSA' tai DBMS, ja voimme käyttää näitä C_ID s löytämiseen S_ID s alkaen STUDENT_COURSE PÖYTÄ. VAIHE 1: Löytäminen C_ID varten C_NAME ='DSA' tai 'DBMS' Valitse C_ID alkaen KURSSI missä C_NAME = 'DSA' tai C_NAME = 'DBMS' VAIHE 2: Käyttämällä C_ID vaiheesta 1 löytääksesi S_ID Valitse S_ID alkaen STUDENT_COURSE missä C_ID IN (VALITSE C_ID alkaen KURSSI missä C_NAME = 'DSA' tai C_NAME ='DBMS'); Sisäinen kysely palauttaa joukon, jossa on jäseniä C1 ja C3, ja ulompi kysely palauttaa ne S_ID s jota varten C_ID on yhtä suuri kuin mikä tahansa joukon jäsen (tässä tapauksessa C1 ja C3). Joten se palauttaa S1, S2 ja S4. Huomautus: Jos haluamme selvittää nimiä OPISKELIJA jotka ovat joko rekisteröityneet DSA:han tai DBMS:ään, se voidaan tehdä seuraavasti: Valitse S_NAME OPISKELIJA missä S_ID IN (Valitse S_ID alkaen STUDENT_COURSE missä C_ID IN (VALITSE C_ID alkaen KURSSI missä C_NAME ='DSA' tai C_NAME ='DBMS'));
EI MUKANA: Jos haluamme ottaa selvää S_ID s of OPISKELIJA jotka eivät ole rekisteröityneet 'DSA' tai 'DBMS' -ohjelmaan, se voidaan tehdä seuraavasti: Valitse S_ID alkaen OPISKELIJA missä S_ID EI SISÄÄN (Valitse S_ID alkaen STUDENT_COURSE missä C_ID IN (VALITSE C_ID alkaen KURSSI missä C_NAME ='DSA' tai C_NAME ='DBMS')); Sisin kysely palauttaa joukon jäsenillä C1 ja C3. Toinen sisäinen kysely palauttaa ne S_ID s jota varten C_ID on yhtä suuri kuin mikä tahansa joukon jäsen (tässä tapauksessa C1 ja C3), jotka ovat S1, S2 ja S4. Uloin kysely palauttaa ne S_ID missä S_ID ei ole joukon (S1, S2 ja S4) jäsen. Joten se palauttaa S3:n.
- Samanaikaiset sisäkkäiset kyselyt: Samanaikaisissa sisäkkäisissä kyselyissä sisäisen kyselyn tulos riippuu rivistä, jota ulkoisessa kyselyssä parhaillaan suoritetaan. esim.; Jos haluamme ottaa selvää S_NAME / OPISKELIJA s jotka ovat ilmoittautuneet C_ID 'C1', se voidaan tehdä toisiinsa liittyvän sisäkkäisen kyselyn avulla seuraavasti: Valitse S_NAME kohteesta OPISKELIJA S missä ON (valitse * mistä STUDENT_COURSE SC, jossa S. S_ID =SC. S_ID ja SC. C_ID ='C1'); Jokaiselle riville OPISKELIJA S, se löytää rivit alkaen STUDENT_COURSE missä S. S_ID = SC. S_ID ja SC. C_ID ='C1'. Jos a S_ID alkaen OPISKELIJA S, siinä on ainakin rivi STUDENT_COURSE SC kanssa C_ID ='C1', niin sisäinen kysely palauttaa tosi ja vastaavan S_ID palautetaan ulostulona.
ESIMERKKI SQL-KOODISSA:
java poikkeusten käsittely
VALITSE opiskelijan nimi
FROM opiskelijoilta
if-lause javaMISSÄ StudentID IN (
VALITSE opiskelijatunnus
FROM arvosanat
WHERE Aihe = 'Matematiikka' JA pisteet> 90
);