V SQL môže byť poddotaz jednoducho definovaný ako dotaz v rámci iného dotazu. Inými slovami, môžeme povedať, že poddotaz je dotaz, ktorý je vložený do klauzuly WHERE iného SQL dotazu. Dôležité pravidlá pre poddotazy:
- Poddotaz môžete umiestniť do niekoľkých klauzúl SQL: KDE doložka, doložka HAVING, doložka FROM. Poddotazy možno použiť s príkazmi SELECT, UPDATE, INSERT, DELETE spolu s výrazovým operátorom. Môže to byť operátor rovnosti alebo operátor porovnávania, ako napríklad =,>, =, <= a operátor Like.
- Poddotaz je dotaz v rámci iného dotazu. Vonkajší dotaz sa volá as hlavný dotaz a vnútorný dotaz sa nazýva ako poddotaz .
- Poddotaz sa vo všeobecnosti vykoná ako prvý, keď poddotaz žiadne nemá spoluvzťah s hlavný dotaz , keď existuje korelácia, syntaktický analyzátor prijme rozhodnutie za letu na ktorom dotaze sa má vykonať prednosť a podľa toho použije výstup poddotazu.
- Poddotaz musí byť uzavretý v zátvorkách.
- Poddotazy sú na pravej strane operátora porovnávania.
- ZORADIŤ PODĽA príkaz nemôže použiť v poddotaze. GROUPBY príkaz možno použiť na vykonanie rovnakej funkcie ako príkaz ORDER BY.
- Použite jednoriadkové operátory s jednoriadkovými poddotazmi. Použite viacriadkové operátory s viacriadkovými poddotazmi.
Syntax: Pre poddotazy neexistuje žiadna všeobecná syntax. Zdá sa však, že poddotazy sa najčastejšie používajú s príkazom SELECT, ako je uvedené nižšie:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Vzorová tabuľka :
DATABÁZA
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO |
|---|---|---|---|
| Ram | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Liečba | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
ŠTUDENT
| NÁZOV | ROLL_NO | ODDIEL |
|---|---|---|
| Liečba | 104 | A |
| Sumathi | 105 | B |
| Raj | 102 | A |
Vzorové dopyty
break java
:
- Ak chcete zobraziť NAME, LOCATION, PHONE_NUMBER študentov z tabuľky DATABASE, ktorej sekcia je A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Vysvetlenie: Prvý poddotaz vykoná SELECT ROLL_NO od STUDENT, kde SECTION='A' vráti ROLL_NO z tabuľky STUDENT, ktorej SEKCIA je 'A'. Potom ho vykoná vonkajší dotaz a vráti NAME, LOCATION, PHONE_NUMBER z tabuľky DATABASE študenta, ktorého ROLL_NO sa vráti z vnútorného poddotazu. Výkon:
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO |
| Liečba | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Príklad vloženia dopytu:
Tabuľka1: Študent1
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO | |
|---|---|---|---|---|
| Ram | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Liečba | 103 | salem | 8989898989 |
Tabuľka2: Študent2
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO | |
|---|---|---|---|---|
| Raj | 111 | chennai | 8787878787 | |
| Až kým | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Ak chcete vložiť Študent2 do tabuľky Študent1:
INSERT INTO Student1 SELECT * FROM Student2;>
- Výkon:
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO | |
|---|---|---|---|---|
| Ram | 101 | chennai | 9988773344 | |
| Raju | 102 | coimbatore | 9090909090 | |
| Liečba | 103 | salem | 8989898989 | |
| Raj | 111 | chennai | 8787878787 | |
| Až kým | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Ak chcete odstrániť študentov z tabuľky Student2, ktorých rollno je rovnaké ako v tabuľke Študent1 a má umiestnenie ako chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Výkon:
1 row delete successfully.>
- Zobraziť tabuľku Študent2:
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO | |
|---|---|---|---|---|
| Až kým | 112 | mumbai | 6565656565 | |
| Sri | 113 | coimbatore | 7878787878 |
- Ak chcete aktualizovať mená študentov na geekov v tabuľke Študent2, ktorých umiestnenie je rovnaké ako Raju, Ravi v tabuľke Študent1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Výkon:
1 row updated successfully.>
- Zobraziť tabuľku Študent2:
| NÁZOV | ROLL_NO | POLOHA | TELEFÓNNE ČÍSLO | |
|---|---|---|---|---|
| Až kým | 112 | mumbai | 6565656565 | |
| geekov | 113 | coimbatore | 7878787878 |