În SQL, o subinterogare poate fi definită pur și simplu ca o interogare în cadrul unei alte interogări. Cu alte cuvinte, putem spune că o subinterogare este o interogare care este încorporată în clauza WHERE a unei alte interogări SQL. Reguli importante pentru subinterogări:
- Puteți plasa subinterogarea într-un număr de clauze SQL: UNDE clauză, clauză HAVING, clauză FROM. Subinterogările pot fi utilizate cu instrucțiunile SELECT, UPDATE, INSERT, DELETE împreună cu operatorul expresiei. Ar putea fi operator de egalitate sau operator de comparație, cum ar fi =,>, =, <= și operator Like.
- O subinterogare este o interogare în cadrul unei alte interogări. Interogarea exterioară este numită ca interogare principală iar interogarea interioară se numește ca subinterogare .
- În general, subinterogarea se execută prima când subinterogarea nu are niciuna corelație cu interogare principală , atunci când există o corelație, analizatorul ia decizia pe fuga pe care interogare să se execute precedenta și utilizează rezultatul subinterogării în consecință.
- Subinterogarea trebuie inclusă între paranteze.
- Subinterogările sunt în partea dreaptă a operatorului de comparație.
- COMANDA PENTRU comanda nu poti să fie utilizat într-o subinterogare. A SE GRUPA CU comanda poate fi folosită pentru a îndeplini aceeași funcție ca și comanda ORDER BY.
- Utilizați operatori cu un singur rând cu subinterogări cu un singur rând. Utilizați operatori cu mai multe rânduri cu subinterogări cu mai multe rânduri.
Sintaxă: Nu există nicio sintaxă generală pentru subinterogări. Cu toate acestea, subinterogările sunt considerate a fi utilizate cel mai frecvent cu instrucțiunea SELECT, după cum se arată mai jos:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Tabel de probă :
BAZĂ DE DATE
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON |
|---|---|---|---|
| RAM | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Tratament | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
STUDENT
| NUME | ROLA NUMĂRUL | SECȚIUNE |
|---|---|---|
| Tratament | 104 | A |
| Sumathi | 105 | B |
| Raj | 102 | A |
Exemple de interogări
:
- Pentru a afișa NAME, LOCATION, PHONE_NUMBER ale studenților din tabelul DATABASE a cărui secțiune este A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Explicație: Prima subinterogare execută SELECT ROLL_NO din STUDENT unde SECTION='A' returnează ROLL_NO din tabelul STUDENT a cărui SECȚIUNE este 'A'. Apoi interogarea externă o execută și returnează NAME, LOCATION, PHONE_NUMBER din tabelul DATABASE al studentului al cărui ROLL_NO este returnat de la subinterogare interioară. Ieșire:
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON |
| Tratament | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Exemplu de interogare de inserare:
Tabelul 1: Student1
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON | |
|---|---|---|---|---|
| RAM | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Tratament | 103 | salem | 8989898989 |
Tabelul 2: Student2
hashtable java
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON | |
|---|---|---|---|---|
| Raj | 111 | chennai | 8787878787 | |
| Pana cand | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Pentru a insera Student2 în tabelul Student1:
INSERT INTO Student1 SELECT * FROM Student2;>
- Ieșire:
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON | |
|---|---|---|---|---|
| RAM | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Tratament | 103 | salem | 8989898989 | |
| Raj | 111 | chennai | 8787878787 | |
| Pana cand | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Pentru a șterge studenții din tabelul Student2 al căror rol este același cu cel din tabelul Student1 și având o locație ca chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Ieșire:
1 row delete successfully.>
- Afișează tabelul Student2:
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON | |
|---|---|---|---|---|
| Pana cand | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Pentru a actualiza numele studenților la tocilari în tabelul Student2 a căror locație este aceeași cu Raju, Ravi în tabelul Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Ieșire:
1 row updated successfully.>
- Afișează tabelul Student2:
| NUME | ROLA NUMĂRUL | LOCAȚIE | NUMĂR DE TELEFON | |
|---|---|---|---|---|
| Pana cand | 112 | mumbai | 6565656565 | |
| tocilari | 113 | coimbatore | 7878787878 |