In SQL kan een subquery eenvoudigweg worden gedefinieerd als een query binnen een andere query. Met andere woorden, we kunnen zeggen dat een subquery een query is die is ingebed in de WHERE-clausule van een andere SQL-query. Belangrijke regels voor subquery's:
- U kunt de Subquery in een aantal SQL-clausules plaatsen: WAAR clausule, HAVING-clausule, FROM-clausule. Subquery's kunnen worden gebruikt met SELECT-, UPDATE-, INSERT-, DELETE-instructies samen met de expressie-operator. Dit kan een gelijkheidsoperator of een vergelijkingsoperator zijn, zoals de operator =,>, =, <= en Like.
- Een subquery is een query binnen een andere query. De buitenste query wordt aangeroepen als belangrijkste vraag en innerlijke query wordt genoemd als subquery .
- De subquery wordt doorgaans als eerste uitgevoerd als de subquery er geen heeft co-relatie met de belangrijkste vraag , wanneer er een co-relatie is, neemt de parser de beslissing op de vlucht op welke query moet worden uitgevoerd voorrang en gebruikt de uitvoer van de subquery dienovereenkomstig.
- Subquery's moeten tussen haakjes staan.
- Subquery's bevinden zich aan de rechterkant van de vergelijkingsoperator.
- BESTEL DOOR commando kan niet worden gebruikt in een subquery. GEGROEPEERD Het commando kan worden gebruikt om dezelfde functie uit te voeren als het ORDER BY-commando.
- Gebruik operatoren met één rij met subquery's met één rij. Gebruik operatoren met meerdere rijen met subquery's met meerdere rijen.
Syntaxis: Er is geen algemene syntaxis voor subquery's. Subquery's worden echter het vaakst gebruikt met de SELECT-instructie, zoals hieronder weergegeven:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Voorbeeldtabel :
DATABANK
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER |
|---|---|---|---|
| Ram | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Behandeling | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
STUDENT
| NAAM | ROLL_NO | SECTIE |
|---|---|---|
| Behandeling | 104 | A |
| Sumathi | 105 | B |
| Raj | 102 | A |
Voorbeeldvragen
:
- Om NAME, LOCATION en PHONE_NUMBER van de studenten uit de DATABASE-tabel waarvan sectie A is weer te geven
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Uitleg: De eerste subquery voert SELECT ROLL_NO uit STUDENT uit, waarbij SECTION='A' ROLL_NO retourneert uit de STUDENT-tabel waarvan SECTION 'A' is. Vervolgens voert de buitenste query deze uit en retourneert de NAME, LOCATION, PHONE_NUMBER uit de DATABASE-tabel van de student wiens ROLL_NO wordt geretourneerd door een innerlijke subquery. Uitgang:
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER |
| Behandeling | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Voorbeeld van query invoegen:
Tabel1: Student1
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER | |
|---|---|---|---|---|
| Ram | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Behandeling | 103 | verkoop | 8989898989 |
Tabel2: Student2
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER | |
|---|---|---|---|---|
| Raj | 111 | chennai | 8787878787 | |
| Tot | 112 | Mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Om Student2 in de tabel Student1 in te voegen:
INSERT INTO Student1 SELECT * FROM Student2;>
- Uitgang:
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER | |
|---|---|---|---|---|
| Ram | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Behandeling | 103 | verkoop | 8989898989 | |
| Raj | 111 | chennai | 8787878787 | |
| Tot | 112 | Mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Om studenten uit de tabel Student2 te verwijderen waarvan het rolnummer hetzelfde is als dat in de tabel Student1 en de locatie Chennai heeft
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Uitgang:
1 row delete successfully.>
- Tabel Student2 weergeven:
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER | |
|---|---|---|---|---|
| Tot | 112 | Mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Om de naam van de studenten bij te werken naar nerds in de Student2-tabel waarvan de locatie dezelfde is als Raju, Ravi in de Student1-tabel
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Uitgang:
1 row updated successfully.>
- Tabel Student2 weergeven:
| NAAM | ROLL_NO | PLAATS | TELEFOONNUMMER | |
|---|---|---|---|---|
| Tot | 112 | Mumbai | 6565656565 | |
| nerds | 113 | coimbatore | 7878787878 |