In SQL una sottoquery può essere semplicemente definita come una query all'interno di un'altra query. In altre parole possiamo dire che una Subquery è una query incorporata nella clausola WHERE di un'altra query SQL. Regole importanti per le subquery:
- È possibile inserire la subquery in una serie di clausole SQL: DOVE clausola, clausola HAVING, clausola FROM. Le sottoquery possono essere utilizzate con le istruzioni SELECT, UPDATE, INSERT, DELETE insieme all'operatore di espressione. Potrebbe essere un operatore di uguaglianza o un operatore di confronto come =,>, =, <= e l'operatore Like.
- Una sottoquery è una query all'interno di un'altra query. La query esterna è chiamata as interrogazione principale e la query interna è chiamata as sottoquery .
- La sottoquery generalmente viene eseguita per prima quando la sottoquery non ne ha correlazione con il interrogazione principale , quando c'è una correlazione il parser prende la decisione al volo su quale query eseguire precedenza e utilizza di conseguenza l'output della sottoquery.
- La sottoquery deve essere racchiusa tra parentesi.
- Le sottoquery si trovano sul lato destro dell'operatore di confronto.
- ORDINATO DA comando non può essere utilizzato in una subquery. RAGGRUPPA PER il comando può essere utilizzato per eseguire la stessa funzione del comando ORDER BY.
- Utilizzare operatori a riga singola con sottoquery a riga singola. Utilizzare operatori su più righe con sottoquery su più righe.
Sintassi: Non esiste una sintassi generale per le subquery. Tuttavia, le sottoquery vengono utilizzate più frequentemente con l'istruzione SELECT come mostrato di seguito:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Tabella campione :
BANCA DATI
Java tabella hash
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO |
|---|---|---|---|
| Ram | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Trattamento | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
ALUNNO
| NOME | ROLL_NO | SEZIONE |
|---|---|---|
| Trattamento | 104 | UN |
| Sumathi | 105 | B |
| Raj | 102 | UN |
Query di esempio
convertire carattere in stringa
:
- Per visualizzare NOME, LOCALITÀ, NUMERO_TELEFONO degli studenti dalla tabella DATABASE la cui sezione è A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Spiegazione: La prima sottoquery esegue SELECT ROLL_NO da STUDENT dove SECTION='A' restituisce ROLL_NO dalla tabella STUDENT la cui SEZIONE è 'A'. Quindi la query esterna la esegue e restituisce NOME, POSIZIONE, NUMERO_TELEFONO dalla tabella DATABASE dello studente il cui ROLL_NO viene restituito dalla sottoquery interna. Produzione:
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO |
| Trattamento | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Inserisci esempio di query:
Tabella1: Studente1
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO | |
|---|---|---|---|---|
| Ram | 101 | Chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Trattamento | 103 | salem | 8989898989 |
Tabella2: Studente2
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO | |
|---|---|---|---|---|
| Raj | 111 | Chennai | 8787878787 | |
| Fino a | 112 | Mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Per inserire Student2 nella tabella Student1:
INSERT INTO Student1 SELECT * FROM Student2;>
- Produzione:
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO | |
|---|---|---|---|---|
| Ram | 101 | Chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Trattamento | 103 | salem | 8989898989 | |
| Raj | 111 | Chennai | 8787878787 | |
| Fino a | 112 | Mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Per eliminare gli studenti dalla tabella Studente2 il cui numero di registro è uguale a quello nella tabella Studente1 e con ubicazione come Chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Produzione:
1 row delete successfully.>
- Visualizza la tabella Student2:
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO | |
|---|---|---|---|---|
| Fino a | 112 | Mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Per aggiornare il nome degli studenti in geek nella tabella Student2 la cui posizione è la stessa di Raju, Ravi nella tabella Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Produzione:
1 row updated successfully.>
- Visualizza la tabella Student2:
| NOME | ROLL_NO | POSIZIONE | NUMERO DI TELEFONO | |
|---|---|---|---|---|
| Fino a | 112 | Mumbai | 6565656565 | |
| geek | 113 | coimbatore | 7878787878 |