I SQL kan en underfråga enkelt definieras som en fråga i en annan fråga. Med andra ord kan vi säga att en Subquery är en fråga som är inbäddad i WHERE-satsen i en annan SQL-fråga. Viktiga regler för delfrågor:
- Du kan placera underfrågan i ett antal SQL-satser: VAR klausul, HAVING-sats, FRÅN-sats. Underfrågor kan användas med SELECT, UPDATE, INSERT, DELETE-satser tillsammans med uttrycksoperator. Det kan vara likhetsoperator eller jämförelseoperator som =,>, =, <= och Like-operator.
- En underfråga är en fråga i en annan fråga. Den yttre frågan kallas som huvudfrågan och inre fråga kallas som underfråga .
- Underfrågan körs vanligtvis först när underfrågan inte har någon samförhållande med huvudfrågan , när det finns en samrelation tar parsern beslutet i farten på vilken fråga som ska köras på företräde och använder utdata från underfrågan i enlighet därmed.
- Underfrågan måste omges inom parentes.
- Underfrågor finns till höger om jämförelseoperatorn.
- SORTERA EFTER kommando kan inte användas i en underfråga. GRUPP AV kommandot kan användas för att utföra samma funktion som ORDER BY-kommandot.
- Använd enradsoperatorer med enkelradsunderfrågor. Använd operatorer med flera rader med underfrågor med flera rader.
Syntax: Det finns ingen allmän syntax för Subqueries. Undersökningar används dock oftast med SELECT-satsen som visas nedan:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Exempeltabell :
DATABAS
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER |
|---|---|---|---|
| Bagge | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Behandling | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
STUDERANDE
| NAMN | ROLL_NO | SEKTION |
|---|---|---|
| Behandling | 104 | A |
| Sumathi | 105 | B |
| Raj | 102 | A |
Exempel på frågor
:
- För att visa NAME, LOCATION, PHONE_NUMBER av eleverna från DATABASE-tabellen vars sektion är A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Förklaring: Första underfrågan exekverar SELECT ROLL_NO från STUDENT där SECTION='A' returnerar ROLL_NO från STUDENT-tabellen vars SECTION är 'A'. Sedan exekverar den yttre frågan den och returnerar NAME, LOCATION, PHONE_NUMBER från DATABASE-tabellen för studenten vars ROLL_NO returneras från inre delfråga. Produktion:
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER |
| Behandling | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Infoga frågeexempel:
Tabell1: Elev1
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER | |
|---|---|---|---|---|
| Bagge | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Behandling | 103 | salem | 8989898989 |
Tabell2: Elev2
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER | |
|---|---|---|---|---|
| Raj | 111 | chennai | 8787878787 | |
| Fram tills | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Så här infogar du Student2 i Elev1-tabellen:
INSERT INTO Student1 SELECT * FROM Student2;>
- Produktion:
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER | |
|---|---|---|---|---|
| Bagge | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Behandling | 103 | salem | 8989898989 | |
| Raj | 111 | chennai | 8787878787 | |
| Fram tills | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Att ta bort elever från Student2-tabellen vars rollno är samma som i Student1-tabellen och har plats som chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Produktion:
1 row delete successfully.>
- Visa elev2-tabell:
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER | |
|---|---|---|---|---|
| Fram tills | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- För att uppdatera namnet på eleverna till nördar i Student2-tabellen vars plats är samma som Raju,Ravi i Student1-tabellen
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Produktion:
1 row updated successfully.>
- Visa elev2-tabell:
| NAMN | ROLL_NO | PLATS | TELEFONNUMMER | |
|---|---|---|---|---|
| Fram tills | 112 | mumbai | 6565656565 | |
| nördar | 113 | coimbatore | 7878787878 |