Query nidificate in SQL

Prerequisiti: Nozioni di base su SQL

Le query nidificate rappresentano un modo per eseguire query complesse incorporando una query all'interno di un'altra. La query esterna può applicare alcune condizioni sui risultati della query interna. Usiamolo STUDENTE, CORSO, STUDENTE_CORSO tabelle per comprendere le query nidificate.

ALUNNO

S_ID S_NOME S_INDIRIZZO S_TELEFONO SAGGIO
S1 RAM DELHI 9455123451 18
S2 RAMESH GURGAON 9652431543 18
S3 SUJIT ROHTAK 9156253131 venti
S4 SICURO DELHI 9156768971 18

CORSO

C_ID C_NOME
C1 DSA
C2 Programmazione
C3 DBMS

STUDENTE_CORSO

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

Esistono principalmente due tipi di query nidificate:

  • Query nidificate indipendenti: Nelle query nidificate indipendenti, l'esecuzione delle query inizia dalla query più interna a quella più esterna. L'esecuzione della query interna è indipendente dalla query esterna, ma il risultato della query interna viene utilizzato nell'esecuzione della query esterna. Vari operatori come IN, NOT IN, ANY, ALL ecc. vengono utilizzati per scrivere query nidificate indipendenti.
    IN: Se vogliamo scoprirlo S_ID che sono iscritti C_NOME 'DSA' o 'DBMS', possiamo scriverlo con l'aiuto di query nidificate indipendenti e operatore IN. Da CORSO tabella, possiamo scoprirlo C_ID per C_NOME 'DSA' o DBMS' e possiamo usarli C_ID s per trovare S_ID da STUDENTE_CORSO TAVOLO. PASSO 1: Trovare C_ID per C_NOME ='DSA' o 'DBMS' Selezionare C_ID da CORSO Dove C_NOME = ‘DSA’ o C_NOME = 'DBMS' PASSO 2: Utilizzando C_ID del passaggio 1 per la ricerca S_ID Selezionare S_ID da STUDENTE_CORSO Dove C_ID IN (SELEZ C_ID da CORSO Dove C_NOME = ‘DSA’ o C_NOME ='DBMS'); La query interna restituirà un set con i membri C1 e C3 e la query esterna li restituirà S_ID è per questo C_ID è uguale a qualsiasi membro dell'insieme (C1 e C3 in questo caso). Quindi, restituirà S1, S2 e S4. Nota: Se vogliamo scoprire i nomi di ALUNNO s che si sono iscritti a 'DSA' o 'DBMS', possono farlo come: Seleziona S_NAME da ALUNNO Dove S_ID IN (Seleziona S_ID da STUDENTE_CORSO Dove C_ID IN (SELEZ C_ID da CORSO Dove C_NOME ='DSA' o C_NOME ='DBMS'));
    NON IN: Se vogliamo scoprirlo S_ID s di ALUNNO s che non sono iscritti né a 'DSA' né a 'DBMS', può essere fatto come: Seleziona S_ID da ALUNNO Dove S_ID NON IN (Seleziona S_ID da STUDENTE_CORSO Dove C_ID IN (SELEZ C_ID da CORSO Dove C_NOME ='DSA' o C_NOME ='DBMS')); La query più interna restituirà un set con i membri C1 e C3. La seconda query interna restituirà quelli S_ID è per questo C_ID è uguale a qualsiasi membro dell'insieme (C1 e C3 in questo caso) che sono S1, S2 e S4. La query più esterna restituirà quelli S_ID ecco dove S_ID non è un membro dell'insieme (S1, S2 e S4). Quindi restituirà S3.
  • Query nidificate correlate: Nelle query nidificate correlate, l'output della query interna dipende dalla riga attualmente eseguita nella query esterna. per esempio.; Se vogliamo scoprirlo S_NOME Di ALUNNO s che sono iscritti a C_ID 'C1', può essere eseguito con l'aiuto di query nidificate correlate come: Seleziona S_NAME da ALUNNO S dove ESISTE (seleziona * da STUDENTE_CORSO SC dove S. S_ID =SC. S_ID e SC. C_ID ='C1'); Per ogni riga di ALUNNO S, troverà le righe da STUDENTE_CORSO dov 'è. S_ID = SC. S_ID e SC. C_ID ='C1'. Se per a S_ID da ALUNNO S, esiste almeno una riga in STUDENTE_CORSO SC con C_ID ='C1', la query interna restituirà vero e corrispondente S_ID verrà restituito come output.

ESEMPIO IN CODICE SQL:

SELEZIONA NomeStudente

DA Studenti

DOVE IDSTUDENTE IN (

SELEZIONA IDStudente

DA Gradi

DOVE Materia = 'Matematica' E Punteggio> 90

);