Hirdetés

Keresés

Új hozzászólás Aktív témák

  • nyunyu

    félisten

    válasz Micsurin #4777 üzenetére

    Első példádban:
    SELECT e.department_id, last_name, legkisebb
    FROM employees e,
    (SELECT department_id, MIN(salary) legkisebb
    FROM employees
    GROUP BY department_id) min
    WHERE e.salary=min.legkisebb AND e.department_id=min.department_id;

    "e" néven hivatkozik az employees táblára, míg az alquery eredményhalmaza a "min" aliast kapta.

    WHERE után láthatod, hogy táblanév.oszlop vagy alias.oszlop formátummal lehet hivatkozni az egyes táblák vagy alqueryk elemeire.
    Vagy a SELECT mezőlistájánál is azért van kitéve az e. az első mező elé, mert mind a táblában, mind az alqueryben van department_id, és az Oracle megköveteli, hogy egyértelműen megmondd, hogy melyik oszlopra hivatkozol.
    (Másik két oszlopa önmagában is egyértelmű, mivel a "last_name" csak a táblában, "legkisebb" meg csak az alqueryben van meg.)

  • nyunyu

    félisten

    válasz Micsurin #4777 üzenetére

    Mi a rák az a natural join?

    Utána kellett néznem, mert ilyet még nem láttam.
    Azt írják, hogy az SQL:2011 óta opcionális nyelvi elem, nem kötelező implementálni. (Akkor azért nem láttam eddig. :DDD)

    Mindenesetre arra jó, hogy a lustáknak ne kelljen kiírni a JOIN feltételeket, hanem a DB motorra bízzák az azonos nevű oszlopok összehasonlítását.
    (magyarul az ON tábla1.id=tábla2.id elhagyható, vagy ha az oldschool from tábla1, tábla2 szintaxist használod, akkor WHERE mögül a tábla1.id=tábla2.id)

    Egyáltalán miért nem szabvány SQLt tanítanak?
    Mikor BMEn különböző DB jellegű tárgyakat hallgattam, ott nagyrészt szabvány SQL volt, de megmutatták azon felül a legelterjettebb DBk szintaktikai különbségeit. (T-SQL (MS) vs PL-SQL (Oracle))

    Másik kérdésre meg az a válasz, hogy nincs különbség a 2 query között.

    Első az oldschool formátumban van írva, amikor még nem volt szabványosítva a JOIN szintaxis, hanem minden DB kezelő a saját feje szerint toldozta-foltozta az akkor érvényes szabványt, így alakult ki a FROM után vesszővel felsoroljuk a táblákat, majd WHERE mögé kerülnek a JOIN feltételek szintaxis, amit elég sokan implementáltak anno ahhoz, hogy még ma is elterjedt legyen, emiatt az újabb DB kezelőkbe is bele szokták tenni. (Pl. SQL Server 2008-ba betették, mivel MS lőni akart a Teradata júzereire is)

    Második meg az SQL92-ben definiált szabványos írásmód, amit minden DB kezelőnek ismernie kell.

    Működésben nincs különbség a kettő között, mivel a DB SQL optimalizálója átrendezi a futtatandó kódot, ide-oda pakolászva a feltételeket, végül mindkettő szintaxisnak ugyanaz lesz a végrehajtási terve.

  • martonx

    veterán

    válasz Micsurin #4777 üzenetére

    Használj légyszi dbfiddle-t, azon keresztül minden sokkal jobban látszik, és rögtön futtatni, próbálgatni is lehet.
    A problémádat nem értem, hogy mit nem értesz. Mi a kérdésed? Vagy csak panaszkodsz? :D

  • Micsurin

    nagyúr

    válasz Micsurin #4777 üzenetére

    Annyival tudom finomítani, hogy ha jól értem a dolgot azzal van gondom nem ismerem fel mikor kéne az allekérdezést:
    -Mező
    -Tábla
    -Feltétel
    Helyett használnom. Ill a mező helyetti az egyértelmű én a tábla és a feltételt nem ismerem fel, hogy feladat szövegben mire kéne figyeljek, hogy feltűnjön.

    Az kezd egyértelmű lenni, hogy az 1. példa lesz a feltétel és értelemszerűen 2. példa a tábla helyetti.

    Tudom nagyon lámán értelmezem! :R De itt nem a megszokott demo srácok tartották a labort és a tanárt aki beugrott nem igazán értettem. :(((

Új hozzászólás Aktív témák