Adatbzis gyakorlat SUBSELECT Tarcsi dm 2005 mrcius Mirl
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám 2005. március
Miről lesz szó? • SUBSELECT • INSERT, DELETE, UPDATE – select • Gyakorlás
Allekérdezés - subselect • Allekérdezés olyan SELECT utasítás, amely értéke(ke)t ad át egy külső utasításnak. • WHERE-ben vizsgálandó értékeket másik SELECT-ből hozzuk. Pl. : Ki idősebb, mint a 13 -as azonosítójú diák? SELECT nev FROM tdiak WHERE kor> (SELECT kor FROM tdiak WHERE DAzon=13); Hogy is van ez?
Allekérdezés – subselect – 2. • Jelentőségük: ha egy külső utasítás eredménytáblájában valamely sor kiválasztása egy teljes tábla kiértékelésétől függ. • Először a belső SELECT hajtódik végre, ez lesz a külső feltétele. • WHERE, HAVING, FROM utasításrészben • Mindig egy összehasonlító operátor jobb oldalán van! • Zárójelbe ( ) kell tenni • Nem tartalmazhat ORDER BY utasításrészt • Fajái: – egysoros – többsoros
Egysoros subselect • A belső SELECT egyetlen sort ad vissza • DISTINCT záradékkal segíthetünk! Példa: - Listázzuk ki azokat a diákokat, akik legalább kétszer olyan idősek, mint a legfiatalabb diák. - Kiket tanít még ‘Kis Pista’ tanára?
Többsoros subselect • Hibás, ha az előbbi alselect több sort ad vissza. èÖsszehasonlító operátort használunk: • IN / NOT IN: a lista bármely elemével egyenlő • ANY: listát ad vissza, ha van egy elem, ami kielégíti a feltételt, akkor a WHERE feltétel teljesül • ALL: listát ad vissza Teljesül a feltétel, ha a visszaadott lista minden eleme minden tagja teljesíti • EXIST: a feltétel teljesül, ha az allekérdezés legalább egy sort ad vissza.
Subselect feladatok • Adjuk meg azon tanárokat, akik legalább egy diákot tanítanak! • Adjuk meg azon tanárokat, akik nem tanítanak egy diákot sem!
Allekérdezés -2. INSERT INTO <táblanév> (<mezőnév 1>, …, <mezőnévn>)(<al-select>) • INSERT INTO t. Diak (DAzon, Nev, Kor, TAzon)(SELECT DAzon, Nev, Kor, 1 FROM t. Osztaly) • INSERT INTO t. Diak (DAzon, Nev, Kor, TAzon)(SELECT *, 1 FROM t. Osztaly)
Allekérdezés -3. – UPDATE • UPDATE <táblanév> SET <mezőnév 1> = <érték 1>, …, <mezőnévk> = <értékk> WHERE <feltétel al-select-ekkel> • Változtassuk a TAzon mező értékét 3 -ra azon diákoknál, akiket Nagy Aranka tanít! UPDATE t. Diak SET TAzon=3 WHERE TAzon IN (SELECT TAzon FROM t. Tanar WHERE Nev=’Nagy Aranka’)
Allekérdezés -3. – DELETE FROM • DELETE FROM <táblanév> WHERE <feltétel al-select-ekkel> • Töröljük azokat a tanárokat, akik egy diákot sem tanítanak! DELETE FROM t. Tanár WHERE TAzon NOT IN (SELECT TAzon FROM t. Diak)
Alkérdés CREATE TABLE-ben CREATE table (… ) AS SELECT …
- Slides: 11