logo

SQL | Poddotaz

V SQL lze poddotaz jednoduše definovat jako dotaz v rámci jiného dotazu. Jinými slovy můžeme říci, že poddotaz je dotaz, který je vložen do klauzule WHERE jiného SQL dotazu. Důležitá pravidla pro dílčí dotazy:

  • Poddotaz můžete umístit do několika klauzulí SQL: KDE klauzule, klauzule HAVING, klauzule FROM. Poddotazy lze použít s příkazy SELECT, UPDATE, INSERT, DELETE spolu s výrazovým operátorem. Může to být operátor rovnosti nebo operátor porovnání, jako je operátor =,>, =, <= a Like.
  • Poddotaz je dotaz v rámci jiného dotazu. Vnější dotaz se nazývá as hlavní dotaz a vnitřní dotaz se nazývá jako poddotaz .
  • Poddotaz se obecně spustí jako první, když poddotaz žádný nemá spoluvztah s hlavní dotaz , když existuje korelace, rozhodne analyzátor za běhu na kterém dotazu se má provést přednost a podle toho použije výstup poddotazu.
  • Poddotaz musí být uzavřen v závorkách.
  • Poddotazy jsou na pravé straně operátoru porovnání.
  • SEŘADIT PODLE příkaz nemůže použít v poddotazu. SKUPINA VYTVOŘENÁ příkaz lze použít k provedení stejné funkce jako příkaz ORDER BY.
  • Použijte jednořádkové operátory s jednořádkovými poddotazy. Použijte víceřádkové operátory s víceřádkovými poddotazy.

Syntax: Pro poddotazy neexistuje žádná obecná syntaxe. Zdá se však, že poddotazy se nejčastěji používají s příkazem SELECT, jak je uvedeno níže:

SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>

Vzorová tabulka :



DATABÁZE

NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
RAM 101 Chennai 9988775566
Raj 102 Coimbatore 8877665544
Sasi 103 Madurai 7766553344
Léčba 104 Salem 8989898989
Sumathi 105 Kanchipuram 8989856868

STUDENT

NÁZEV ROLL_NO SEKCE
Léčba 104 A
Sumathi 105 B
Raj 102 A

Ukázkové dotazy

:

  • Chcete-li zobrazit JMÉNO, LOCATION, PHONE_NUMBER studentů z tabulky DATABASE, jejíž sekce je A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
    Vysvětlení: První poddotaz provede SELECT ROLL_NO od STUDENT, kde SECTION='A' vrátí ROLL_NO z tabulky STUDENT, jejíž SECTION je 'A'. Poté jej vnější dotaz provede a vrátí NAME, LOCATION, PHONE_NUMBER z tabulky DATABASE studenta, jehož ROLL_NO je vráceno z vnitřního poddotazu. Výstup:
NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
Léčba 104 Salem 8989898989
Raj 102 Coimbatore 8877665544
  • Příklad vložení dotazu:

Tabulka1: Student1

NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
RAM 101 chennai 9988773344
Raju 102 coimbatore 9090909090
Léčba 103 Salem 8989898989

Tabulka2: Student2

NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
Raj 111 chennai 8787878787
Až do 112 mumbai 6565656565
Sri 113 coimbatore 7878787878
  • Postup vložení Student2 do tabulky Student1:
INSERT INTO Student1 SELECT * FROM Student2;>
  • Výstup:
NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
RAM 101 chennai 9988773344
Raju 102 coimbatore 9090909090
Léčba 103 Salem 8989898989
Raj 111 chennai 8787878787
Až do 112 mumbai 6565656565
Sri 113 coimbatore 7878787878
  • Chcete-li odstranit studenty z tabulky Student2, jejichž rollno je stejné jako v tabulce Student1 a má umístění jako chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
  • Výstup:
1 row delete successfully.>
    Zobrazit tabulku Student2:
NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
Až do 112 mumbai 6565656565
Sri 113 coimbatore 7878787878
  • Aktualizace jmen studentů na geeky v tabulce Student2, jejichž umístění je stejné jako Raju, Ravi v tabulce Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
  • Výstup:
1 row updated successfully.>
    Zobrazit tabulku Student2:
NÁZEV ROLL_NO UMÍSTĚNÍ TELEFONNÍ ČÍSLO
Až do 112 mumbai 6565656565
geeky 113 coimbatore 7878787878