Fájlok írása Pytonban!
Elkészült a Python nyelv Szövegfájlok írása tananyagunk! Jó tanulást, jó gyakorlást!

<info9>

Lekérdezések egymásba ágyazása

Komplexebb SQL problémák megoldásához előfordulhat, hogy nem elegendő egy lekérdezés. Ezen esetekben lehetőségünk van több lekérdezés egymásba ágyazására, melyre általában kerek zárójeleket használunk. Ezek használatára viszonylag sok különféle lehetőség áll rendelkezésre, ezek közül csak néhány alapesetet mutatunk be ebben a fejezetben.

Allekérdezés beágyazása egyszerű feltételekbe

Készítsünk lekérdezést, amely meghatározza Kovács Péter osztálytársait a diak tábla felhasználásával. Ehhez először meg kell találnunk, hogy melyik osztályba jár Kovács Péter:

SELECT `osztaly` FROM `diak` WHERE `nev` = "Kovács Péter"

Mezők az allekérdezésekben
Ha az allekérdezéseket WHERE feltételekbe szeretnénk beágyazni az = (vagy egyéb relációs jel) operátor használatával, akkor ügyelnünk kell rá, hogy a lekérdezés csak egy értéket adjon vissza.
Most pedig ezt a lekérdezést ágyazzuk be egy másik lekérdezésbe, amely az osztály többi tanulóját fogja meghatározni:

SELECT `nev` FROM `diak` 
WHERE `osztaly` = (SELECT `osztaly` FROM `diak` WHERE `nev` = "Kovács Péter")

A lekérdezés kilistázza Kovács Péter osztályának összes tanulójának a nevét. A lekérdezést persze még egy kicsit továbbfejleszthetjük, hogy Kovács Péter maga ne jelenjen meg, csak a többi osztálytársa:

SELECT `nev` FROM `diak` 
WHERE `osztaly` = (SELECT `osztaly` FROM `diak` WHERE `nev` = "Kovács Péter")
AND `nev` <> "Kovács Péter"

Az IN és NOT IN kulcsszó használata

Másik gyakori felhasználása az allekérdezéseknek az IN vagy a NOT IN kulcsszavak használata. Amennyiben azt szeretnénk vizsgálni, hogy egy adott érték szerepel-e egy másik lekérdezés által visszaadott értékek helyett, akkor az IN kulcsszót tudjuk használni. Ez abban tér el az = operátortól, hogy az = csak egy értékkel tud összehasonlítani, az IN viszont több értékkel is.

Érdekel a C#?

A tavaszi C# alapozó bootcampünk tananyagait továbbra is megvásárolhatod! Bár az élő előadásokon már túl vagyunk, az összes előadás anyaga továbbra is visszanézhető!

Irány a bootcamp

Példaként próbáljuk meghatározni azokat a diákokat, akik dicséretben, valamint intőben is részesültek. Ehhez először listázzuk ki azon diákokat, akik kaptak dicséretet:

SELECT `diak`.`nev` FROM `diak` 
       JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
       WHERE `tipus` = "dicséret"

Most pedig keressük meg azokat a diákokat, akik kaptak intőt, ÉS szerepel a nevük az előző lekérdezés eredményében is (azaz dicséretet is kaptak):

SELECT `diak`.`nev` FROM `diak` 
       JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
       WHERE `tipus` = "intő"
       AND `nev` IN (SELECT `diak`.`nev` FROM `diak`
                     JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
                     WHERE `tipus` = "dicséret")

A lekérdezést ide kattintva áttekintheted, módosíthatod, kipróbálhatod az SQL homokozóban! A NOT IN kifejezés az IN ellentétje, azokat a rekordokat adja meg, amelyek adott értéke nem szerepel az allekérdezés értékei között. Ezzel tehát megkaphatjuk azokat az intőt kapott diákokat, akik NEM kaptak dicséretet:

SELECT `diak`.`nev` FROM `diak`
        JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
        WHERE `tipus` = "intő"
        AND `nev` NOT IN (SELECT `diak`.`nev` FROM `diak`
                      JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
                      WHERE `tipus` = "dicséret")

Allekérdezések egyéb felhasználása

Az allekérdezéseket ezen felül felhasználhatjuk a HAVING-ben, de akár a SELECT-ben, vagy a JOIN-ban is.

További példák hamarosan!