SQL apakšvaicājumu var vienkārši definēt kā vaicājumu citā vaicājumā. Citiem vārdiem sakot, mēs varam teikt, ka apakšvaicājums ir vaicājums, kas ir iegults cita SQL vaicājuma WHERE klauzulā. Svarīgi apakšvaicājumu noteikumi:
- Apakšvaicājumu var ievietot vairākās SQL klauzulās: KUR klauzula, HAVING klauzula, FROM klauzula. Apakšvaicājumus var izmantot ar SELECT, UPDATE, INSERT, DELETE priekšrakstiem kopā ar izteiksmes operatoru. Tas varētu būt vienlīdzības operators vai salīdzināšanas operators, piemēram, =,>, =, <= un operators Like.
- Apakšvaicājums ir vaicājums citā vaicājumā. Ārējais vaicājums tiek saukts kā galvenais vaicājums un iekšējo vaicājumu sauc kā apakšvaicājums .
- Apakšvaicājums parasti tiek izpildīts pirmais, ja apakšvaicājumā tāda nav kopattiecības Ar galvenais vaicājums , ja pastāv kopsakarība, parsētājs pieņem lēmumu lidojumā kurā vaicājumā izpildīt prioritāte un attiecīgi izmanto apakšvaicājuma izvadi.
- Apakšvaicājums jāiekļauj iekavās.
- Apakšvaicājumi atrodas salīdzināšanas operatora labajā pusē.
- SAKĀRTOT PĒC komandu nevar izmantot apakšvaicājumā. GROUPBY komandu var izmantot, lai veiktu to pašu funkciju kā komanda ORDER BY.
- Izmantojiet vienas rindas operatorus ar vienas rindas apakšvaicājumiem. Izmantojiet vairāku rindu operatorus ar vairāku rindu apakšvaicājumiem.
Sintakse: Apakšvaicājumiem nav vispārējas sintakses. Tomēr tiek uzskatīts, ka apakšvaicājumi tiek izmantoti visbiežāk ar SELECT priekšrakstu, kā parādīts tālāk:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Tabulas paraugs :
DATU BĀZE
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS |
|---|---|---|---|
| Ram | 101 | Čennaja | 9988775566 |
| Raj | 102 | Koimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Ārstēšana | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kančipurama | 8989856868 |
STUDENTS
| VĀRDS | ROLL_NO | SADAĻA |
|---|---|---|
| Ārstēšana | 104 | A |
| Sumathi | 105 | B |
| Raj | 102 | A |
Vaicājumu paraugi
:
- Lai parādītu NAME, LOCATION, PHONE_NUMBER no skolēniem no DATABASE tabulas, kuras sadaļa ir A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Paskaidrojums: pirmais apakšvaicājums izpilda SELECT ROLL_NO no STUDENT, kur SECTION='A' atgriež ROLL_NO no tabulas STUDENT, kuras SECTION ir 'A'. Pēc tam ārējais vaicājums izpilda to un atgriež NAME, LOCATION, PHONE_NUMBER no skolēna, kura ROLL_NO DATU BĀZES tabulas. tiek atgriezts no iekšējā apakšvaicājuma. Izvade:
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS |
| Ārstēšana | 104 | Salem | 8989898989 |
| Raj | 102 | Koimbatore | 8877665544 |
- Ievietot vaicājuma piemēru:
1. tabula: Student1
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS | |
|---|---|---|---|---|
| Ram | 101 | čennai | 9988773344 | |
| Raju | 102 | koimbatore | 9090909090 | |
| Ārstēšana | 103 | Salem | 8989898989 |
2. tabula: Student2
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS | |
|---|---|---|---|---|
| Raj | 111 | čennai | 8787878787 | |
| Līdz plkst | 112 | Mumbaja | 6565656565 | |
| Šri | 113 | koimbatore | 7878787878 |
- Lai ievietotu Student2 tabulā Student1:
INSERT INTO Student1 SELECT * FROM Student2;>
- Izvade:
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS | |
|---|---|---|---|---|
| Ram | 101 | čennai | 9988773344 | |
| Raju | 102 | koimbatore | 9090909090 | |
| Ārstēšana | 103 | Salem | 8989898989 | |
| Raj | 111 | čennai | 8787878787 | |
| Līdz plkst | 112 | Mumbaja | 6565656565 | |
| Šri | 113 | koimbatore | 7878787878 |
- Dzēst studentus no tabulas Student2, kuru rollno ir tāds pats kā Student1 tabulā un kura atrašanās vieta ir chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Izvade:
1 row delete successfully.>
- Parādīt Student2 tabulu:
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS | |
|---|---|---|---|---|
| Līdz plkst | 112 | Mumbaja | 6565656565 | |
| Šri | 113 | koimbatore | 7878787878 |
- Atjaunināt studentu vārdus uz Geeks tabulā Student2, kuru atrašanās vieta ir tāda pati kā Raju, Ravi tabulā Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Izvade:
1 row updated successfully.>
- Parādīt Student2 tabulu:
| VĀRDS | ROLL_NO | ATRAŠANĀS VIETA | TELEFONA NUMURS | |
|---|---|---|---|---|
| Līdz plkst | 112 | Mumbaja | 6565656565 | |
| geeks | 113 | koimbatore | 7878787878 |