SQL antrinė užklausa gali būti tiesiog apibrėžta kaip užklausa kitoje užklausoje. Kitaip tariant, galime pasakyti, kad antrinė užklausa yra užklausa, įterpta į kitos SQL užklausos WHERE sąlygą. Svarbios papildomos užklausos taisyklės:
- Papildomą užklausą galite įdėti į keletą SQL sąlygų: KUR sąlyga, HAVING sąlyga, FROM. Papildomos užklausos gali būti naudojamos su SELECT, UPDATE, INSERT, DELETE sakiniais kartu su išraiškos operatoriumi. Tai gali būti lygybės operatorius arba palyginimo operatorius, pvz., =,>, =, <= ir operatorius Like.
- Antrinė užklausa yra užklausa kitoje užklausoje. Išorinė užklausa vadinama kaip pagrindinė užklausa o vidinė užklausa vadinama kaip antrinė užklausa .
- Paprastai antrinė užklausa vykdoma pirmiausia, kai antrinėje užklausoje jos nėra bendras ryšys su pagrindinė užklausa , kai yra bendras ryšys, sprendimą priima analizatorius skrendant pagal kurią užklausą vykdyti pirmenybė ir atitinkamai naudoja antrinės užklausos išvestį.
- Papildoma užklausa turi būti pateikta skliausteliuose.
- Papildomos užklausos yra dešinėje palyginimo operatoriaus pusėje.
- RŪŠIUOTI PAGAL komandą negali būti naudojamas papildomoje užklausoje. GRUPUOTI PAGAL komanda gali būti naudojama atlikti tą pačią funkciją kaip ir komanda ORDER BY.
- Naudokite vienos eilutės operatorius su vienos eilutės papildomomis užklausomis. Naudokite kelių eilučių operatorius su kelių eilučių papildomomis užklausomis.
Sintaksė: Nėra jokios bendros antrinių užklausų sintaksės. Tačiau antrinės užklausos dažniausiai naudojamos su SELECT sakiniu, kaip parodyta toliau:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Lentelės pavyzdys :
DUOMENŲ BAZĖ
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS |
|---|---|---|---|
| Ram | 101 | Čenajus | 9988775566 |
| Raj | 102 | Koimbatorė | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Gydymas | 104 | Salem | 8989898989 |
| sumatai | 105 | Kančipuramas | 8989856868 |
STUDENTAS
| VARDAS | ROLL_NO | SKYRIUS |
|---|---|---|
| Gydymas | 104 | A |
| sumatai | 105 | B |
| Raj | 102 | A |
Užklausų pavyzdžiai
:
- Norėdami rodyti NAME, LOCATION, PHONE_NUMBER mokinių iš DATABASE lentelės, kurios skyrius yra A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Paaiškinimas: pirmoji antrinė užklausa vykdo SELECT ROLL_NO iš STUDENT, kur SECTION='A' grąžina ROLL_NO iš STUDENT lentelės, kurios SECTION yra 'A'. Tada išorinė užklausa ją įvykdo ir grąžina NAME, LOCATION, PHONE_NUMBER iš mokinio, kurio ROLL_NO DUOMENŲ BAZĖS lentelės. grąžinama iš vidinės antrinės užklausos. Išvestis:
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS |
| Gydymas | 104 | Salem | 8989898989 |
| Raj | 102 | Koimbatorė | 8877665544 |
- Įterpti užklausos pavyzdį:
1 lentelė: Studentas1
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS | |
|---|---|---|---|---|
| Ram | 101 | čennai | 9988773344 | |
| Raju | 102 | koimbatore | 9090909090 | |
| Gydymas | 103 | salemas | 8989898989 |
2 lentelė: Studentas2
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS | |
|---|---|---|---|---|
| Raj | 111 | čennai | 8787878787 | |
| Iki | 112 | Mumbajus | 6565656565 | |
| Šri | 113 | koimbatore | 7878787878 |
- Norėdami įterpti Student2 į Student1 lentelę:
INSERT INTO Student1 SELECT * FROM Student2;>
- Išvestis:
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS | |
|---|---|---|---|---|
| Ram | 101 | čennai | 9988773344 | |
| Raju | 102 | koimbatore | 9090909090 | |
| Gydymas | 103 | salemas | 8989898989 | |
| Raj | 111 | čennai | 8787878787 | |
| Iki | 112 | Mumbajus | 6565656565 | |
| Šri | 113 | koimbatore | 7878787878 |
- Ištrinti mokinius iš Student2 lentelės, kurių rollno yra toks pat kaip Student1 lentelėje ir kurio vieta yra chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Išvestis:
1 row delete successfully.>
- Rodyti Student2 lentelę:
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS | |
|---|---|---|---|---|
| Iki | 112 | Mumbajus | 6565656565 | |
| Šri | 113 | koimbatore | 7878787878 |
- Atnaujinti studentų vardus į Geeks Student2 lentelėje, kurių vieta yra tokia pati kaip Raju, Ravi Student1 lentelėje
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Išvestis:
1 row updated successfully.>
- Rodyti Student2 lentelę:
| VARDAS | ROLL_NO | VIETA | TELEFONO NUMERIS | |
|---|---|---|---|---|
| Iki | 112 | Mumbajus | 6565656565 | |
| geeks | 113 | koimbatore | 7878787878 |