logo

Sisäkkäiset kyselyt SQL:ssä

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 java

MISSÄ StudentID IN (

VALITSE opiskelijatunnus

FROM arvosanat

WHERE Aihe = 'Matematiikka' JA pisteet> 90

);