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
);