ER és EER modell közti különbség

ER és EER modell közti különbség

Adatbázis

ER és EER modell

Az ER (Entity-Relationship) és az EER (Enhanced Entity-Relationship) modell közötti különbségek az alábbiakban foglalhatók össze

Az ER-modell jellemzői

Az ER modell a koncepcionális adatbázis-tervezés alapvető eszköze, amely az adatok logikai struktúráját írja le:

  • Egyedtípusok (entitások): Egy valós világot reprezentáló objektum, például egy személy, hely vagy dolog.
  • Attribútumok: Az egyedek tulajdonságai, például egy személy neve vagy kora.
  • Kapcsolattípusok: Az egyedek közötti összefüggések (pl. "Kölcsönöz" kapcsolat a Könyv és Olvasó között).
  • Az ER-modell független az implementációtól, így alkalmas a rendszer-független tervezésre.
  • Flexibilis és vizuálisan jól ábrázolható grafikus eszközökkel (például Chen-jelölés, holláb-jelölés).

 

    Az EER-modell jellemzői

    • Az EER-modell az ER-modell kiterjesztett változata, amely további koncepciókat vezet be az összetettebb adatkapcsolatok kezelésére:
      • Főosztály és alosztályok: Lehetőséget biztosít az egyedek hierarchikus csoportosítására. Például a "Dolgozó" főosztálynak lehetnek alosztályai, mint "Mérnök", "Technikus", "Titkárnő".
      • Specializáció és általánosítás:
        • Specializáció: Főosztály felosztása alosztályokra, például a "Jármű" osztály specializálása "Személyautó" és "Tehergépkocsi" alosztályokra.
        • Általánosítás: Alosztályok egyesítése egy közös főosztályba, például a "Személyautó" és "Tehergépkocsi" osztályok általánosítása "Jármű" főosztályba.
      • Attribútum és kapcsolat öröklődése: Az alosztályok öröklik a főosztály attribútumait és kapcsolatait.
      • Unió típus (kategória): Több főosztály közös alosztálya, például egy "Tulajdonos" alosztály, amelynek elemei lehetnek "Személy" vagy "Vállalat" főosztályokból.

    3. Különbségek az ER és EER modellek között

    Jellemző ER-modell EER-modell
    Bonyolultság Alapvető adatszerkezeteket kezel. Komplexebb adatszerkezeteket támogat.
    Főosztály/Alosztály Nem tartalmaz ilyen fogalmakat. Támogatja a főosztály-alosztály viszonyokat.
    Specializáció/Általánosítás Nincs benne. Támogatott.
    Unió típus (kategória) Nem érhető el. Elérhető, különböző főosztályok közös alosztálya.
    Attribútum öröklődése Nem támogatott. Az alosztályok öröklik a főosztály attribútumait.

    Miért hasznos az EER-modell?

    • Az EER-modell pontosabb és részletesebb leírást nyújt a valós világ összetett kapcsolatairól.
    • Objektum-orientált adatmodellezési alapelveket is tartalmaz, mint az öröklődés és hierarchia, amelyek segítenek az adatstruktúrák könnyebb megértésében és kezelésében.

    Példa az EER-modell alkalmazására

    • Egy vállalatnál a "Dolgozó" főosztály tartalmazhat alosztályokat, például "Mérnök" és "Titkárnő". Az EER-modell segítségével ezek külön attribútumokkal és kapcsolatokkal láthatók el, miközben öröklik a "Dolgozó" főosztály tulajdonságait (pl. név, azonosító).

    Edvac működés közben
    Relációs adatmodell – műveletek és leképezés

    Relációs adatmodell – műveletek és leképezés

    Adatbázis

    Relációs adatmodell – műveletek és leképezés

    A relációs adatmodell fogalmairól már korábban volt szó, itt megtalálod. Most egy kicsit részletesebben írok róla. 

      Bevezetés

      • A relációs adatbázisok az adatkezelés egyik legelterjedtebb módszerét jelentik. Ezek az adatbázisok teljes mértékben megfeleltethetők az egyed-kapcsolat modellnek, amely az adatstruktúrák logikai szervezését írja le. Az egész rendszer alapja a halmazelméleti reláció, amely matematikai alapelveket használ az adatok kezelésére és kapcsolataik meghatározására.

      Relációk

      A relációs adatbázisokban a reláció egy kétdimenziós adathalmaz, amelyet táblázatként lehet elképzelni. A következő kulcsfogalmak segítenek megérteni a relációkat:

      Reláció: Kétdimenziós adathalmaz (táblázat).

      • Számosság: A relációban található rekordok száma (azaz a sorok száma).
      • Fok: Az attribútumok (oszlopok) száma, azaz hány különböző tulajdonságot tárol egy rekord.

       

         Attribútum: Az oszlopok nevei, amelyek egy reláció tulajdonságait írják le. Minden attribútumhoz egy domain tartozik.

        • Domain: Az értékkészlet, amelyből az attribútum értékei kiválasztásra kerülnek (pl. városok nevei, vezetéknevek) 

        Előfordulás (rekord): Egy adott sor, amely egy egyed adatait tartalmazza. Például egy személy adatai: név, cím, születési hely.

        Relációs séma: Az adatok struktúráját határozza meg a tervezési fázisban. Példa: Felhasználók(Név, Kor, Város).

        Relációs adatbázisok szabályai

        1. Az egyedek (rekordok) sorrendje nem számít, mivel halmazokról beszélünk.
        2. Nem lehet két azonos rekord a relációban (ismétlődés tilalma).
        3. Az attribútumok sorrendje lényegtelen.
        4. Minden attribútumhoz egyértelmű név tartozik.
        5. Minden attribútumnak van értéke, amely a domainből származik.

        Táblázatos ábrázolás

        A relációk táblázatokban jelennek meg:

        • Fejléc: Az attribútumok nevei.
        • Sorok (rekordok): Az egyedek adatai.
        • Cellák: Egy adott attribútumhoz tartozó konkrét értékek.

        Információtartalom

        Az információt nem az egyedi adatok hordozzák, hanem az, hogy egy soron belül milyen adatok kapcsolódnak egymáshoz. Például a "Kovács István Kaposváron él" sor ad információt, míg önmagában a "Kovács" vagy "Kaposvár" nem.

        Műveletek relációkon

        Alapműveletek

        1. Descartes-szorzat: Két halmaz összes lehetséges elempárjának kombinációja.

          • Pl. D1 = {A, B}, D2 = {1, 2} → (A,1), (A,2), (B,1), (B,2).
        2. Unió (egyesítés): Két reláció összes egyedi rekordjának összevonása.

          • Példa:
            R1 = {(1,2,3), (3,2,1)}, R2 = {(1,4,3), (2,2,3)}
            R1 ∪ R2 = {(1,2,3), (3,2,1), (1,4,3), (2,2,3)}.
        3. Különbség (kivonás): Az első relációból azokat a rekordokat hagyjuk meg, amelyek a másodikban nem szerepelnek.

          • Példa:
            R1 = {(1,2,3), (3,2,1)}
            R2 = {(1,2,3)}
            R1 \ R2 = {(3,2,1)}.
        1. Szelekció (kiválasztás): Egy reláció azon rekordjainak kiválasztása, amelyek megfelelnek egy adott feltételnek.

        2. Projekció (vetítés): Adott attribútumok kiválasztása a relációból.

        Származtatott műveletek

        1. Metszet (közös rész): Két reláció közös rekordjait adja meg.

        2. Natural Join (természetes illesztés): Két reláció közös attribútumainak egyezése alapján végzett illesztés.

        3. Theta Join (általános illesztés): Rekordok illesztése egy tetszőleges logikai feltétel alapján.

          A relációs adatbázisok lehetővé teszik, hogy hatékonyan tároljuk, rendezzük, és elemezzük az adatokat matematikai alapelvek alapján. Az alapműveletek és származtatott műveletek segítségével komplex adatkapcsolatok hozhatók létre, amelyeket táblázatok formájában ábrázolunk, de a lényeg mindig az információk közötti összefüggés.

          Leképezés 

          Az ER-modell egy adatbázis tervezési módszer, amely az egyedeket (entitások) és azok tulajdonságait (attribútumokat) írja le. A relációs adatmodell az ER-modell alapján strukturált formában jeleníti meg az adatokat.

          Először az adat egy egyed-kapcsolat modellben jelenik meg 

          • Az "E" jelöli az egyed típust (pl. egy személy vagy tárgy).
          • Az "A1", "A2", "A3", "A4" az egyedhez tartozó attribútumokat jelöli (pl. név, cím, telefonszám).
          • Az ER-modell segít az adatok logikai tervezésében, de nem definiálja, hogy ezeket hogyan tároljuk.

        Ez az adat relációs adatmodellben: 

          • Az egyedet egy táblázat reprezentálja, amelynek neve szintén "E".
          • Az attribútumok oszlopokként jelennek meg (pl. "A1", "A2", "A3", "A4").
          • A táblázat sorai az egyed konkrét előfordulásait (rekordjait) tartalmazzák, például egy-egy személy adatait.

        Átalakítás folyamata

        Az ER-modell logikai struktúrája átültethető a relációs adatmodellbe:

        • Az egyedekből táblák lesznek.
        • Az attribútumok az oszlopokat alkotják.
        • Az egyedi előfordulások (rekordok) töltik meg a táblák sorait.

        Fontos megjegyzések

        • Kulcs attribútum: Egy attribútum vagy attribútumkombináció, amely egyértelműen azonosít egy rekordot (pl. "A1" lehet az elsődleges kulcs).
        • Kapcsolatok leképezése: Ha két egyed között kapcsolat van, akkor az a relációs modellben külön táblaként vagy idegen kulcsok segítségével ábrázolható.

         

        Edvac működés közben
        GROUP BY – SQL

        GROUP BY – SQL

        adatbázis

        GROUP BY - SQL

        Adatbázis - SQL

        Csoportosítás SQL-ben

        GROUP BY:

        • Csoportosítás: A GROUP BY parancsot akkor használjuk, amikor egy táblát oszlop(ok) alapján csoportosítani szeretnénk. Ez különösen hasznos, ha aggregáló függvényeket (pl. COUNT, AVG, SUM, MAX, MIN) szeretnénk alkalmazni csoportokra.
        • Működése: A megadott oszlop(ok) alapján csoportosítja az adatokat, és minden egyes csoporthoz egy sor eredményt ad vissza.

        SELECT varos, COUNT(*) AS 'Dolgozók száma' FROM dolgozo GROUP BY varos;

        Ez megadja, hogy dolgozó van városonként. 

         

        HAVING:

        • Utólagos szűrés: A HAVING kifejezés az aggregált adatokra vonatkozó szűrési feltételeket határozza meg. Ez különbözik a WHERE-től, mert WHERE-rel csak az eredeti adatokra lehet szűrni, míg HAVING-gel az aggregált eredményeket szűrhetjük.

          SELECT osztaly, AVG(fizetes) AS 'Átlagfizetés' FROM dolgozo GROUP BY osztaly HAVING AVG(fizetes) > 500000;

        Ez a lekérdezés megadja, hogy mely osztályokban haladja meg az átlagfizetés az 500.000 forintot.

        FELADATOK

        1. Listázd ki, hogy az egyes városokból hány dolgozó érkezik, és nevezd el a várost tartalmazó oszlopot "Város"-nak, a darabszámot pedig "Dolgozók száma"-nak.

        SELECT varos AS 'Város', COUNT(*) AS 'dolgozók száma'
        FROM dolgozo
        GROUP BY varos;

        2.  Listázd ki, hogy az egyes osztályokban hány dolgozó van. Az oszlopok neve legyen "Osztály" és "Létszám".
        SELECT o.onev AS 'Osztály', COUNT(*) AS 'Létszám' FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid GROUP BY o.onev;

        3. Listázd ki azoknak az osztályoknak a nevét, ahol az átlagfizetés meghaladja a 400000 Forintot
        SELECT o.onev AS 'Osztály', AVG('d.fizetes') AS 'átlagfizetés' FROM dolgozo d INNER JOIN osztaly o ON o.oid = d.oid GROUP BY o.onev HAVING AVG(d.fizetes) > 400000;

         4. Melyik városból származik a legtöbb dolgozó? Használj MAX és COUNT függvényeket a megoldáshoz.
        SELECT varos, COUNT(*) AS 'Dolgozok száma' FROM dolgozo GROUP BY varos ORDER BY COUNT(*) DESC LIMIT 1;

        5. Az egyes osztályok átlagfizetése mellett listázd ki a minimális fizetést is az adott osztályban.
        SELECT o.onev AS 'Osztály', AVG(d.fizetes) AS 'Átlagfizetés', MIN(d.fizetes) AS 'Minimális fizetés' FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid GROUP BY o.onev;

        Aggregáló függvények – SQL

        Aggregáló függvények – SQL

        adatbázis

        Aggregáló függvények - SQL

        Adatbázis - SQL

        Aggregáló függvények

        Az aggregáló szó azt jelenti, hogy valami összegez, csoportosít vagy összefoglal adatokat. Az SQL aggregáló függvények olyan speciális függvények, amelyek egy adathalmaz értékeit egyetlen eredménybe sűrítik.

        Például:

        • AVG: Kiszámolja az adathalmaz átlagát.
        • SUM: Összeadja az adathalmaz elemeit.
        • COUNT: Megszámolja az elemek számát.
        • MIN: Kiválasztja a legkisebb értéket.
        • MAX: Kiválasztja a legnagyobb értéket.

        Az SQL aggregáló függvények segítségével a táblázatokból adatokat lehet összesíteni és különböző számításokat végezni. Ezeket gyakran használjuk statisztikai és riportkészítési feladatokhoz. Az alábbiakban részletezve bemutatom a legfontosabb függvényeket és azok használatát.

        Aggregáló függvények:

         

        1. AVG (átlag): Egy oszlop értékeinek átlagát számítja ki.
          • Példa: SELECT AVG(fizetes) AS 'Átlagfizetés' FROM dolgozo;
        2. COUNT (darabszám): Az adott oszlop értékeinek számát adja vissza.
          • Példa: SELECT COUNT(*) AS 'Dolgozók száma' FROM dolgozo;
        3. MIN (legkisebb): Az oszlop legkisebb értékét adja vissza.
          • Példa: SELECT MIN(fizetes) AS 'Legalacsonyabb fizetés' FROM dolgozo;
        4. MAX (legnagyobb): Az oszlop legnagyobb értékét adja vissza.
          • Példa: SELECT MAX(fizetes) AS 'Legmagasabb fizetés' FROM dolgozo;
        5. SUM (összeg): Az oszlop értékeinek összegét számítja ki.
          • Példa: SELECT SUM(fizetes) AS 'Összes fizetés' FROM dolgozo;

        Feladatok 

        1. Mikor született a legfiatalabb dolgozó?
        SELECT MAX(szuldat) AS 'Legfiatalabb születési dátum' FROM dolgozo;

         2. Hány női dolgozó van?
        SELECT COUNT(*) AS 'Nők száma' FROM dolgozo WHERE nem = 'N';

        3: Mekkora a dolgozók átlagos életkora?
        SELECT AVG(YEAR(CURRENT_DATE()) - YEAR(szuldat)) AS 'Átlag életkor' FROM dolgozo;

        Részletes bontás

        • YEAR(CURRENT_DATE()): Ez a rész kinyeri az aktuális év számát. Például, ha ma 2025. január 5-e van, akkor az eredmény 2025.

        • YEAR(szuldat): Ez a függvény az adott dolgozó születési dátumából (pl. 1985-07-20) csak az évet veszi ki. Ha az alkalmazott 1985-ben született, akkor az eredmény 1985.

        • YEAR(CURRENT_DATE()) - YEAR(szuldat): Ez a különbség megadja a dolgozó életkorát az aktuális év alapján. Például:

          • 2025 (aktuális év) - 1985 (születési év) = 40 év.
        • AVG(...): Az AVG függvény kiszámolja az összes dolgozó életkorának átlagát. Tehát összeadja az összes életkort, majd elosztja a dolgozók számával.

        • AS 'Átlag életkor': Ez csak egy alias, amely nevet ad az eredménynek, hogy az oszlop neve az eredménytáblában "Átlag életkor" legyen.

        4. Listázd ki a legmagasabb fizetést
        SELECT MAX(fizetes) AS 'legmagasabb fizetes' FROM dolgozo

        5. Számold meg, hány alkalmazott van a cégnél
        SELECT COUNT(*) AS 'dolgozok_szama' FROM dolgozo

        6. Add meg a dolgozok összes fizetését
        SELECT SUM(fizetes) AS 'Összes fizetés' FROM dolgozo;

        7. Listázd ki a legidősebb dolgozó születési dátumát
        SELECT MIN(szuldat) AS 'Legidősebb születési dátum' FROM dolgozo;

        8. Számold meg, hány dolgozó van, akinek a fizetése 400000 vagy annál nagyobb
        SELECT COUNT(*) AS 'dolgozok száma' FROM dolgozo WHERE fizetes >= 400000;

         

         

         

        Többtáblás lekérdezések – SQL

        Többtáblás lekérdezések – SQL

        adatbázis

        Többtáblás lekérdezések - SQL

        Adatbázis - SQL

        Lekérdezések - SQL

        Az SQL-ben a többtáblás lekérdezések lehetővé teszik, hogy különböző táblák adatait kombináljuk és egységes eredményként jelenítsük meg. Ehhez az JOIN utasítást használjuk. Nézzük meg részletesen, hogyan működnek ezek a lekérdezések.

        1. INNER JOIN – Csak az egyező sorok

        Az INNER JOIN segítségével csak azok a sorok kerülnek be az eredménybe, amelyeknél a két tábla közötti feltétel teljesül.
        Példa: SELECT dolgozo.*, osztaly.onev FROM dolgozo INNER JOIN osztaly ON dolgozo.oid = osztaly.oid WHERE varos = 'Veszprém';

        • dolgozo: Ez a dolgozók adatait tartalmazza.
        • osztaly: Ez a dolgozók osztályát tartalmazza.
        • ON dolgozo.oid = osztaly.oid: Ez a kapcsolódási feltétel (a dolgozó és az osztály kapcsolatát adja meg).
        • WHERE varos = 'Veszprém': Csak a veszprémi dolgozókat listázza ki.

         

        Eredmény:

        Az eredmény csak azokat a dolgozókat tartalmazza, akiknek van érvényes oid értékük mindkét táblában.

        2. LEFT JOIN – Minden az első táblából, hiányzó értékekkel

        A LEFT JOIN az első táblából (jelen esetben a dolgozo) minden rekordot megjelenít, akkor is, ha a második táblában (osztaly) nincs hozzá tartozó adat.

        SELECT dolgozo.*, osztaly.onev FROM dolgozo LEFT JOIN osztaly ON dolgozo.oid = osztaly.oid WHERE varos = 'Veszprém';

        Az eredmény tartalmazza mind a veszprémi dolgozókat, mind azokat, akiknek nincs osztályuk (az onev mezőjük NULL lesz).

         

        3. RIGHT JOIN – Minden a második táblából

        A RIGHT JOIN ritkábban használt, de fordított logikát követ: a második táblából minden rekordot megjelenít, akkor is, ha az első táblában nincs hozzá tartozó adat.

        SELECT dolgozo.*, osztaly.onev FROM dolgozo RIGHT JOIN osztaly ON dolgozo.oid = osztaly.oid;

        Magyarázat a példák alapján

        1. Kapcsolódó mezők: A dolgozo és az osztaly táblák az oid mezőn keresztül kapcsolódnak.
        2. Feltételek: A WHERE feltétel szűkíti az eredményt, például csak veszprémi dolgozókat mutat meg.
        3. NULL értékek: A LEFT JOIN esetében a második táblából hiányzó adatok helyett NULL érték jelenik meg.

        Gyakorlatban

        • INNER JOIN: Használd, ha csak az egyező rekordokra van szükséged.
        • LEFT JOIN: Használd, ha az első tábla összes rekordjára szükséged van, de a második táblából csak a meglévő adatok érdekelnek.
        • RIGHT JOIN: Használd, ha fordított logikával dolgozol (ritkábban használt).

        Feladatok

        1. Listázd ki a veszprémi dolgozók nevét és osztálynevét
        SELECT d.nev, o.onev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.varos = 'Veszprém';

        Ez a lekérdezés egy többtáblás SQL lekérdezés, amely két táblát – dolgozo és osztaly – kapcsol össze az oid mezőn keresztül. Lássuk részletesen, miért van szükség a d.nev, o.onev, valamint a kapcsolás (ON d.oid = o.oid) megadására:

        1. Miért kell d.nev és o.onev?

        Amikor két vagy több táblát kapcsolsz össze, a lekérdezés során a mezők nevét egyértelműen meg kell határozni, hogy a rendszer tudja, melyik táblából hivatkozol az adott mezőre.

        • d.nev: Ez azt jelenti, hogy a nev mezőt a dolgozo táblából szeretnéd használni. Az alias (d) egy rövidítés, amelyet a dolgozo tábla azonosítására hoztál létre. Ha csak nev-et írnál, a rendszer nem tudná, hogy a nev mezőt a dolgozo vagy az osztaly táblából kéred (ha esetleg mindkét táblában van ilyen nevű mező).

        • o.onev: Ugyanígy, ez azt jelenti, hogy a onev mezőt az osztaly táblából szeretnéd használni. Az alias (o) itt is segít az osztaly tábla egyértelmű azonosításában.

        Alias használat előnyei:

        • Rövidebb, áttekinthetőbb kódot írhatsz (pl. d helyett nem kell mindig dolgozo-t kiírni).
        • Egyértelművé teszi, hogy melyik táblából származik az adott mező.

        2. Miért kell az ON d.oid = o.oid?

        Ez a lekérdezés INNER JOIN típusú kapcsolást alkalmaz, ami azt jelenti, hogy csak azokat a sorokat adja vissza, amelyek mindkét táblában egyeznek a megadott feltétel szerint.

        • d.oid: A dolgozo táblában az oid mezőt használjuk az osztály azonosítására.
        • o.oid: Az osztaly táblában az oid mező az osztály azonosítója.

        Az ON d.oid = o.oid feltétel azt mondja meg a rendszernek, hogy csak azokat a dolgozókat kapcsolja össze a megfelelő osztályokkal, ahol a két tábla oid értékei megegyeznek.

        Kapcsolás nélkül: Ha az ON feltételt kihagynád, a rendszer nem tudná, hogyan kapcsolja össze a táblákat, és minden sor minden sorral párosítva jelenne meg (ezt cross join-nak hívjuk), ami hibás eredményt adna.

        3. Mit csinál a teljes lekérdezés?

        1. A dolgozo tábla és az osztaly tábla oid mezője alapján összekapcsolódik.
        2. Csak azokat a dolgozókat listázza, akik Veszprémből származnak.
        3. A visszaadott eredmény tartalmazza:
          • A dolgozó nevét a dolgozo táblából (d.nev).
          • Az osztály nevét az osztaly táblából (o.onev).

        2. feladat: Listázd ki csak azokat a dolgozókat, akik "Veszprém" városban dolgoznak, az osztály nevükkel együtt!

        SELECT d.nev, d.fizetes, o.onev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.varos = 'Veszprém';

        3. feladat: Listázd ki az összes osztályt és az ahhoz tartozó dolgozók számát!
        SELECT o.onev, COUNT(d.szigszam) AS dolgozok_szama FROM osztaly o LEFT JOIN dolgozo d ON o.oid = d.oid GROUP BY o.onev;

        Azért használtam itt LEFT JOIN-t, hogy kiadja azokat az értékeket is, ahol nincs hozzárendelve senki (pl egy olyan osztályt, ahol nincs alkalmazott)

        4. feladat: Listázd ki azokat az osztályokat, amelyekhez még nem tartozik dolgozó!
        SELECT o.onev FROM osztaly o LEFT JOIN dolgozo d ON o.oid = d.oid
        WHERE d.oid IS NULL

        5. feladat: Listázd ki a legmagasabb fizetéssel rendelkező dolgozót minden osztályban!

        SELECT o.onev, d.nev, MAX(d.fizetes) AS max_fizetes FROM osztaly o INNER JOIN dolgozo d ON o.oid = d.oid GROUP BY o.onev;

        6. feladat: Listázd ki a dolgozókat, akik ugyanazon az osztályon dolgoznak, mint Fehér Alajos

        SELECT d.nev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.oid = ( SELECT oid FROM dolgozo WHERE nev = 'Fehér Alajos' ) AND d.nev != 'Fehér Alajos';

        Részekre bontva: SELECT d.nev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid - a dolgozó táblából kilistázza a neveket és összekapcsolja az osztály táblával, így mindkét tábla értékei elérhetőek ebben a lekérdezésben

        WHERE d.oid = ( SELECT oid FROM dolgozo WHERE nev = 'Fehér Alajos' )

        • Kiválasztja azokat a dolgozókat, akik ugyanahhoz az oid-hoz (osztályhoz) tartoznak, mint "Fehér Alajos".
        • Az allekérdezés (SELECT oid FROM dolgozo WHERE nev = 'Fehér Alajos') visszaadja az oid értékét, amely az "Fehér Alajos"-hoz tartozik.
        • A WHERE d.oid = (...) feltétel ezt az oid értéket használja, hogy megtalálja azokat a dolgozókat, akik ugyanabban az osztályban vannak, mint "Fehér Alajos".

          AND d.nev != 'Fehér Alajos'; - kizárja Fehér Alajost az eredmények közül. 

        7. feladat: Listázd ki a dolgozók városait, de csak egyszer jelenjen meg minden város!

        SELECT DISTINCT varos FROM dolgozo;

         8. feladat: Listázd ki azokat a dolgozókat, akiknek a fizetése meghaladja az osztályuk átlagfizetését!

        SELECT d.nev, d.fizetes, o.onev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.fizetes > ( SELECT AVG(d2.fizetes) FROM dolgozo d2 WHERE d2.oid = d.oid );

        9. feladat: Listázd ki az osztályokat, amelyekben több mint 2 dolgozó van!

        SELECT o.onev, COUNT(d.szigszam) AS dolgozok_szama FROM osztaly o INNER JOIN dolgozo d ON o.oid = d.oid GROUP BY o.onev HAVING COUNT(d.szigszam) > 2;

        SQL lekérdezések

        SQL lekérdezések

        adatbázis

        SELECT Lekérdezések - SQL

        Adatbázis - SQL

        Lekérdezések - SQL

        Feladatok
        (Az előző bejegyzésben készített adatbázist veszem alapul)

        1. Listázd ki a dolgozók adatait név szerint csökkenő sorrendben
        SELECT FROM dolgozo
        ORDER BY dolgozo.nev DESC

        2. Készíts egy lekérdezést, amely megjeleníti a dolgozó nevét, egy mezőben az irányítószámot és várost '-'-el elválasztva város néven, valamint az utca_hsz mezőt.
        SELECT nev AS dolgozó_neve, CONCAT(irsz, '-', varos) AS város, utca_hsz FROM dolgozo;

        • nev AS dolgozó_neve:

          • A dolgozó neve (nev mező) jelenik meg egyértelmű címkével (dolgozó_neve).
        • CONCAT(irsz, '-', varos) AS város:

          • A CONCAT függvény összefűzi az irsz (irányítószám) és varos (város) mezőket, egy - karakterrel középen.
          • Az eredményt "város" néven aliasolja, hogy az oszlop neve egyértelmű legyen.
        • utca_hsz:

          • Az utca és házszámot tartalmazó mezőt közvetlenül jeleníti meg.
        • FROM dolgozo:

          • A dolgozo tábla az adatforrás.

        3. Listázd ki, milyen városokból jönnek a dolgozók
        SELECT DISTINCT varos AS városok FROM dolgozo;

        • SELECT DISTINCT:

          • Csak az egyedi városokat jeleníti meg, így egy város csak egyszer fog szerepelni az eredményben.
        • varos AS városok:

          • A varos mező értékeit "városok" néven jeleníti meg.
        • FROM dolgozo:

          • A dolgozo táblából kérdezi le az adatokat.

        4. Listázd ki ABC sorrendben az első 5 dolgozót
        SELECT nev FROM dolgozo ORDER BY nev ASC LIMIT 5;

        • SELECT nev:

          • Csak a nev (név) mezőt jeleníti meg az eredményben.
        • ORDER BY nev ASC:

          • A nev mező szerint rendezi az adatokat növekvő (ABC) sorrendben. Az ASC az alapértelmezett, de expliciten is megadható.
        • LIMIT 5:

          • Csak az első 5 rekordot adja vissza az eredményben.

        5. Listázd ki ABC sorrendben az 5-7. dolgozót
        SELECT nev FROM dolgozo ORDER BY nev ASC LIMIT 3 OFFSET 4;

        • SELECT nev:

          • Csak a nev (név) mezőt jeleníti meg az eredményben.
        • ORDER BY nev ASC:

          • A nev mező szerint rendezi az adatokat növekvő (ABC) sorrendben.
        • LIMIT 3:

          • Csak 3 rekordot ad vissza, mert az 5., 6. és 7. dolgozót szeretnénk látni.
        • OFFSET 4:

          • Kihagyja az első 4 rekordot (az 1-4. dolgozót).

        6. Listázd ki az 5 legjobban kereső alkalmazott adatait

        SELECT nev, fizetes, szigszam, varos, utca_hsz FROM dolgozo ORDER BY fizetes DESC LIMIT 5;

        • SELECT nev, fizetes, szigszam, varos, utca_hsz:

          • Csak azokat az oszlopokat jeleníti meg, amelyekre szükséged van: név, fizetés, személyi szám (szigszam), város, utca és házszám.
        • ORDER BY fizetes DESC:

          • A dolgozókat a fizetes (fizetés) mező szerint rendezi csökkenő sorrendben (DESC).
        • LIMIT 5:

          • Az eredményhalmazból csak az első 5 rekordot jeleníti meg, azaz a legjobban kereső 5 dolgozót.

        7. Listázd ki a veszprémi vagy ajkai férfi alkalmazottak nevét, fizetését
        SELECT nev, fizetes FROM dolgozo WHERE (varos = 'Veszprém' OR varos = 'Ajka') AND nem = 'F';    vagy
        SELECT nev, fizetes FROM dolgozo WHERE varos IN ('Veszprém', 'Ajka') AND nem = 'F';

        • SELECT nev, fizetes:

          • Csak a nev (név) és a fizetes (fizetés) oszlopokat jeleníti meg.
        • WHERE (varos = 'Veszprém' OR varos = 'Ajka'):

          • A varos mezőt szűri úgy, hogy csak azok a rekordok jelenjenek meg, ahol a város "Veszprém" vagy "Ajka".
        • AND nem = 'F':

          • További feltételként a nem mezőt szűri, hogy csak a férfi alkalmazottakat ('F') vegye figyelembe.