You are on page 1of 76

Adatbáziskezelés

programozás alapjai
Adatmodellezés
Az adatmodellezés feladata:
a való világ vizsgálat alá vont részének
(az alkalmazásnak és környezetének)
információs (adatkapcsolati) struktúráját feltárni.
Az adatmodellezésről
 Az adatbázisnak tükröznie kell a valós világot.
 Csak így tudunk válaszolni a valós világ
kérdéseire.
 Az adatmodellezés hangsúlya a valóság
reprezentációján van.
 A cél azoknak a tényeknek az azonosítása,
amelyeket az adatbázisban tárolni akarunk.
 Az adatmodellezésben felhasználók és
elemzők vesznek részt.
 Független az adatbázis-kezelő rendszertől.
Az információs struktúra leírása
1. Az adatszótár az információs struktúrába
bevont adatokat írja le. Ez a leírás az
adatok szintaktikájára koncentrál, azaz,
hogyan néznek ki az adatok, milyen
jellemzőkkel rendelkeznek.
2. Az adatmodell az információs struktúrába
bevont adatok kapcsolatait írja le. Ez a
leírás az adatok szemantikájára, az adatok
jelentésére helyezi a hangsúlyt.
Az adatszótár funkciói
 Az adatleírás dokumentálása.
 Az információk kézben tartása az
adatbázis tervezése, telepítése és
üzemeltetése során.
 Az adatokra vonatkozó információk
tárolása, módosítása, bemutatása.
 A felhasználók segítése.
 Adatszótár = metaadatbázis.
Az adatszótár jellemzői
 Rendszerfejlesztési eszköz.
 Konzisztens adatleírás.
 Hatékonyság.
 Hivatkozási lehetőségek.
 Kommunikációs alap.
 Módosítások karbantartása.
 Alternatív elnevezések karbantartása.
Adatszótár összetevői
 Adatleírások
 Adatnevek, alternatív adatnevek.
 Adatszerkezet, típus, méret, formátum.
 Adatdefiníciók
 Az adatok részletes leírása, funkciója.
 Adatforrások
 Adatok származási helye, származtatása (pl.
képlettel).
 Adatok előfordulási helye.
 Opcionális információk
 Tulajdonosok, jogosultságok.
Egyed-kapcsolat diagram (ERD)
Az egyed-kapcsolat diagram egy olyan
adatmodellezési eszköz, amelynek feladata az
adatosztályok és a közöttük fennálló
kapcsolatok megmutatása. Nem foglalkozik
az adatok implementációjával, létrehozásával,
módosításával, használatával vagy törlésével.
Első változatát 1976-ban ismertette Chen.
Ma már a kibővített egyed-kapcsolat diagramot
(EER) használják.
Egyed-kapcsolat diagram összetevői
 Egyed (egyedtípus, osztály, adatobjektum).
 Kapcsolat (reláció, adatreláció, adatkapcsolat).
 Tulajdonság (adat).
Az egyed-kapcsolat diagram összetevőit
típus és előfordulás szerint különböztetjük
meg.
Típus: egyedek, kapcsolatok és tulajdonságok
absztrakciója.
Előfordulás: konkrétan létező egyed, kapcsolat
vagy tulajdonság.
Az egyed definíciója és jelölése
Az egyed a valós világ
olyan objektuma,
amely tulajdonságai
alapján megfigyelhető EGYEDNÉV

és jellemezhető.
Lehet fizikailag
definiálható dolog, de
absztrakt módon is
meghatároz-ható.
A kapcsolat definíciója és jelölése
Az egy vagy több egyed között fennálló
termé-szetes összefüggést kapcsolatnak
nevez-zük. A kapcsolat szimbóluma
azokkal az egyedekkel van összekötve,
KAPCSOLATNÉV
amelyek az adott kapcsolatban vannak
egymással.
A tulajdonság definíciója és
jelölése
Az egyedekről megálla-pított tényeket,
jellemzőket (egyed)tulajdon-ságnak
nevezzük. A tulajdonság szimbó-luma
össze van kötve azzal az egyeddel,
TULAJDONSÁGNÉV

amelyikre vonatkozik.
Példa egyed-kapcsolat diagramra
TELEFON KATEGÓRIA
NÉV
AZONOSÍTÓ
CÍM ÉV
CÍM

ÜGYFÉL KÖLCSÖNZI KÖNYV

SZERZŐK

SZDÁTUM

BELÉPÉS TARTALOM
Megjegyzések
1. Amit köznapi értelemben adatnak nevezünk, az
egyed-kapcsolat diagramban egy
tulajdonságtípus előfordulásának felel meg.
2. Az egyed-kapcsolat diagram mindig a típusok
viszonyait, jellemzőit sohasem az
előfordulásokéit ábrázolja.
3. Egy definiált kapcsolat az irány
megkülönböztetésével tulajdonképpen két
kapcsolat.
(Az ügyfél kölcsönzi a kazettát, a kazetta
kölcsönözve van az ügyfél által.)
Kapcsolattípus foka
Bináris kapcsolat DOLGOZÓ
DOLGOZÓ

Unáris v.
rekurzív
kapcsolat DOLGOZIK
FŐNÖKE

Hármas TERV
kapcsolat FELADAT

KÖLTSÉG
DOLGOZÓ KÉSZÍT VETÉS
Kapcsolatok ordinalitása és
kardinalitása
 Az ordinalitás azt jelzi, hogy egy egyedek
közti kapcsolat kötelező vagy opcionális.
 A kardinalitás egy egyedtípus
előfordulásainak maximumát jelzi egy
kapcsolatban.
 Jelölése: ordinalitás: kardinalitás
 Egyszerűsített szóhasználat: egy-az egyhez
(1:1), egy-a-többhöz (1:N), több-a-többhöz
(N:M) kapcsolat.
 Átalakítás után:(N:1 - 1:M)
Ordinalitás és kardinalitás jelentése
I.
0:1 1:M
ÜGYFÉL KÖLCSÖNZI KÖNYV

Az 1 itt azt jelenti, hogy az ügyfél - ha már


kölcsönöz - legalább egy könyvet kölcsö-
nöznie kell.
Ordinalitás és kardinalitás jelentése
II.
0:1 1:M
ÜGYFÉL KÖLCSÖNZI KÖNYV

Az M itt azt jelenti, hogy az ügyfél egynél


több könyvet kölcsönözhet, és a kazetták
maximális száma nincsen korlátozva.
Ordinalitás és kardinalitás jelentése
III.
0:1 1:M
ÜGYFÉL KÖLCSÖNZI KÖNYV

A 0 itt azt jelenti, hogy nem kell minden


könyvet kikölcsönözni, lesz olyan könyv,
amelyiket nem kölcsönzi ki senki.
Ordinalitás és kardinalitás jelentése
IV.
0:1 1:M
ÜGYFÉL KÖLCSÖNZI KÖNYV

Az 1 itt azt jelenti, hogy egy könyv csak egy


ügyfélnél lehet kölcsön.
Egyed-kapcsolat diagram kibővítése

szupertípus

altípu
s
Általánosítás Összetett tulajdonság

Azonosító Többértékű Származtatott


tulajdonság tulajdonság tulajdonság
Az adatmodellezés lépései
1. Egyedek azonosítása.
2. Kapcsolatok azonosítása.
3. Információgyűjtés az egyedek és a
kapcsolatok tulajdonságairól.
4. Egyedtulajdonságok meghatározása.
5. Egyed-kapcsolat diagram első változatának
elkészítése.
6. Egyed-kapcsolat diagram ellenőrzése,
felbontási szint azonosítása.
7. A folyamat ismétlése.
Egyed-kapcsolat diagram első vázlata
TELEFON KATEGÓRIA
NÉV
AZONOSÍTÓ
CÍM ÉV
CÍM

ÜGYFÉL KÖLCSÖNZI KÖNYV

RENDEZŐ

SZDÁTUM

BELÉPÉS TARTALOM
Azonosítók definiálása
TELEFON KATEGÓRIA
NÉV
AZONOSÍTÓ
CÍM ÉV
CÍM

ÜGYFÉL KÖLCSÖNZI KÖNYV

BELÉPÉS RENDEZŐ

SZDÁTUM
AZONOSÍTÓ TARTALOM
Kapcsolat-felbontás
Kapcsolat-felbontás
DÁTUM
0:1 IGÉNYBE 1:M KÖL-
ÜGYFÉL KIDŐ
_VESZ CSÖNZÉS
NÉV 0:1 KDÍJ
SZSZÁM
TELEFON IDŐPONT
VONAT-
KOZIK
SZDÁTUM
CÍM 1:N KATEGÓRIA

BELÉPÉS CÍM
KÖNYV
AZONOSÍTÓ
ÉV
AZONOSÍTÓ
RENDEZŐ TARTALOM
ADATTÁBLA
 Az adatbázis táblákból épül fel.
 A tábla sorai az egy egyedhez tartozó
adatokat tartalmazza
 A tábla oszlopai az egyed tulajdonságait
tárolja
ADATTÁBLA
 Tábla = EGYEDTÍPUS
 Mező = TULAJDONSÁGTÍPUS
 Rekord = EGYEDELŐFORDULÁS (EGYED)
 Adat = TULAJDONSÁGÉRTÉK
ADATTÁBLA
 Kulcs:
 egyértelműen beazonosítja az egyedek többi
tulajdonságát
 minden kulcsérték csak egyszer fordulhat elő
 kötelező megadni, nem lehet üres
ADATTÁBLA
 Összetett kulcs:
 több tulajdonság együtt azonosítja be az egyed
többi tulajdonságát
Normalizálás
 Az adatok optimális tárolási elvét
meghatározó módszer.
 A hatékonyabb működés érdekében minél
magasabb számú normál forma (NF)
kialakítására van szükség.
 Az adatokat úgy kell szervezni, hogy
legalább 3. NF-ban legyenek.
Normalizálás
 Funkcionális függőség: ha egy
tulajdonságtípus bármely értékéhez egy
másik tulajdonságtípus csakis egy értéke
rendelhető hozzá. (Pl: személyi szám –
név; 1:többhöz kapcsolat)
 Kölcsönös funkcionális függőség: ha
az előző feltétel mindkét irányba igaz. (Pl:
rendszám – motorszám; 1:1 kapcsolat)
Normalizálás
 Funkcionális függetlenség: ha az
előzőekben ismertetett viszony egyike sem
áll fenn. (Pl: lakcím - testmagasság)
 Tranzitív funkcionális függőség: ha
egy egyedtípuson belül egy
tulajdonságtípus értékei meghatároznak
egy másik tulajdonságtípus értékeit. (Pl:
FEOR kód - szakképzettség)
Normalizálás

 1. NF
a tábla minden sorában a logikailag
összetartozó adatok állnak
 Minden sorban oszloponként csak egy
érték szerepel
 az értékek sorrendje minden sorban azonos
 minden sor különböző (Kulcsmező(k))
 van legalább egy vagy több tulajdonság,
amelyekkel a sorok egyértelműen
megkülönböztethetők egymástól
Normalizálás
Vizsgáljuk meg az alábbi táblát!

A tábla nincs első normál formában, mert van olyan


egyed, amelynek egyik tulajdonságához egynél
több érték tartozik.
Normalizálás

Az alábbi tábla már első normál formában van.


Normalizálás
Ha a táblát első normál formában hagyjuk, az
alábbi problémák léphetnek fel:
• felviteli anomália
• módosítási anomália
• törlési anomália
Normalizálás
 2. NF
 Az adatbázis első normál formában van és
minden érték, amely nem kulcs,
funkcionálisan függ a kulcstól.
 Megoldás: bontsuk a táblát több táblára,
hogy a fenti feltétel teljesüljön!
Normalizálás
Normalizálás
 3. NF
 Az adatbázis második normál formában van
és minden érték, amely nem kulcs,
funkcionálisan kizárólag a kulcstól függ.
Ez azt jelenti, hogy a tranzitív funkcionális
függéseket kell kiküszöbölni.
 Megoldás: bontsuk a táblát ismét több
táblára, hogy a fenti feltétel teljesüljön!
Normalizálás
A példa szemléltetése érdekében nézzünk
meg egy autófényező műhely
adatbázisának egy részletét, amelyben az
autók egyedtípushoz felvettük a színkód
tulajdonságot a pontos színárnyalat
meghatározásához.
Normalizálás

Jól látszik, hogy minden nem kulcs függ a


kulcstól, de a szín nem csak kizárólag a
kulcstól, hanem a színkódtól is függ.
Normalizálás
A helyes megoldás:
Kapcsolattípusok
 Egy az egyhez (1:1)
 Pl: személyi szám - személy
 Egy a többhöz (1:N)
 Pl: tulajdonos – autó
 Több a többhöz (N:M)
 Pl: ingatlan - tulajdonos
Kapcsolattípusok
Több a többhöz kapcsolat megvalósítása
kapcsolótábla segítségével lehetséges.
Iskola – adatbázis

Tanuló - tábla
Tanárok – tábla
diákigazolvány száma
Neve
tanárikód
Születésidátum
Tanár.neve
Anyjaneve
tantárgykód
lakcím
Megjegyzés
Szülőemail 1:N
szülőtelefon
Évfolyam
Osztály N
N: 1 :
Neme
Tajszáma 1
Személyiigazolványszáma Napló – tábla
lakcimkártyaszáma Tantágyak – tábla
adószám Naplósorszám
Tanulóitevékenység.kezdete Diákigazolvány száma tantárgykód
Beiratkozásdátuma Osztályzat.értéke (érdemjegy) N : Tantárgy.neve
Nemzetisége Osztályzat.dátuma 1 Megjegyzés
Megjegyzes(pl:t.Krónikusbetegség, Tantárgykód
Ételintolerancia, allergiák, Tanárikód
anyanyelve, fogyatékossága) megjegyzés
Adatbázis létrehozása

› CREATE DATABASE adatbazisnev;

› Példa:
CREATE DATABASE alma
CHARACTER SET utf8
COLLATE utf8_general_ci;
Adatmodell létrehozása
Adatmodell létrehozása
› A táblák létrehozása a Create utasítással történik:

› CREATE TABLE táblanév(


oszlop név ADATTÍPUS érték] [NULL|NOT NULL oszlop szintű
[DEFAULT megszorítások, ]
...
oszlop név ADATTÍPUS érték] [NULL|NOT NULL oszlop szintű
[DEFAULT megszorítások, ]
tábla szintű megszorítások);

› Tábla definiálása során megadható megszorítások:


– PRIMARY KEY: Elsődleges kulcs definiálása
– UNIQUE [KEY]: Kulcs jelöltek definiálása
– [FOREIGN KEY] REFERENCES tábla(oszlop): Idegen kulcs másik
táblára
Adatmodell létrehozása (példa)

› CREATE TABLE diak( ID INT PRIMARY KEY,


Nev VARCHAR(50) NOT NULL,
Adoszam INT NOT NULL UNIQUE,
Szak VARCHAR(40) DEFAULT
'SZOFTVERFEJLESZTŐ');

› CREATE TABLE tantargy( ID INT PRIMARY KEY,


Nev VARCHAR(30));

› CREATE TABLE vizsgaeredmeny(


DiakID INT REFERENCES diak(ID),
TargyID INT REFERENCES tantargy(ID), VizsgaDatum DATETIME,
Erdemjegy INT,
PRIMARY KEY(DiakID, TargyID, VizsgaDatum));
Adatmanipuláció és lekérdezés

› Rekord létrehozása (beszúrása)


INSERT INTO táblanév(oszlopok listája) VALUES(értékek listája);

Példa:
INSET INTO diak(Nev, Adoszam, Szak) VALUES('Kiss Jolán’, '1234FG’,
'Rendszerüzemeltető‚);

› Meglévő rekord(ok) törlése


DELETE
FROM táblanév WHERE logikai feltétel;

Példa:
DELETE FROM diak WHERE Nev LIKE 'Kiss Jolán';
Adatmanipuláció és lekérdezés

› Meglévő rekord(ok) módosítása


UPDATE táblanév
SET oszlopnév1 = érték1, oszlopnév2 = érték2 WHERE logikai feltétel;

Példa:
UPDATE vizsgaeredmeny SET Erdemjegy = Erdemjegy+1 WHERE
Erdemjegy > 1 AND Erdemjegy <5;
Rekordok lekérdezése – Egy táblás

› Egyszerű lekérdezések SELECT oszlop lista


FROM táblanév WHERE logikai feltétel(ek)

Példa:
SELECT * FROM diak WHERE Nev LIKE
´Orsós Jolás´;
Rekordok lekérdezése - Operátorok
› A WHERE feltételben használható legfontosabb
operátorok:
Rekordok lekérdezése - Operátorok
› A WHERE feltételben használható legfontosabb
operátorok:
Rekordok lekérdezése - Operátorok

› A WHERE feltételben használható legfontosabb


operátorok:
Rekordok lekérdezése – Egyszerűbb példák

› 200 Ft-nál drágább termékek listája:


SELECT *
FROM termek
WHERE ar>200;

› 200 és 300 Ft
közé eső
termékek listája:
SELECT *
FROM termek
WHERE ar
BETWEEN 200
AND 300;
Rekordok lekérdezése – Egyszerűbb példák
› Azon termékek listája, ahol az ár nincs megadva:
SELECT *
FROM termek
WHERE ar IS NULL;

› Azon termékek listája, amelyek neve tartalmazza z „er” karaktersorozatot és


ára
több, mint 250 Ft:
SELECT *
FROM termek
WHERE nev LIKE
´%er%’ AND ar>250;
Rekordok lekérdezése –
Eredményhalmaz rendezése
› Csökkenő vagy növekvő sorrendben rendezhetünk
oszlopok szerint:
SELECT *
FROM termek
ORDER BY ar DESC, nev ASC;

A duplikált rekordokat szűrhetjük is:


SELECT DISCTINCT ar
FROM termek
Rekordok lekérdezése –
Top N eredmény megjelenítése

› Ha az eredményhalmazban csak az első N rekordot szeretnénk


megjeleníteni:
› A Milka csokoládék közül a legolcsóbb
SELECT Nev, Ar
FROM termek
WHERE Nev LIKE ´%Milka%´
ORDER BY ar
LIMIT 1;
Rekordok lekérdezése –
Egymásba ágyazott lekérdezések

SELECT oszlop lista FROM táblanév


WHERE logikai feltétel (SELECT oszlop lista FROM táblanév
WHERE logikai feltétel);
Rekordok lekérdezése –
Egymásba ágyazott lekérdezések

› Példa: Ki az a diák, akik a 2018.01.07.


vizsgán a legtöbb pontszámot elérte?
SELECT Nev FROM diak WHERE ID
LIKE (SELECT DiakID FROM
vizsgaeredmeny
 ORDER BY
pontszam DESC
LIMIT 1);
Rekordok lekérdezése –
Eredményhalmazok összefésülése

› Lekérdezések eredményei között értelmezhetők a halmazműveletek is, ha az


egyes lekérdezések unió kompatibilisek – tehát ha az egyes oszlopok
adattípusai kompatibilisek egymással.

› UNION: halmazműveleti unió, duplikált rekordok szűrésével

› UNION ALL: halmazműveleti unió, duplikált rekordok szűrése nélkül

› INTERSECT: halmazok metszete -> MySQL Server nem támogatja


› ECXCEPT: halmazok különbsége -> MySQL Server nem támogatja
Rekordok lekérdezése –
Eredményhalmazok összefésülése

› A halmazműveleti lekérdezések általában egyszerbben, hatékonyabban


is megfogalmazhatók, a következő példa csak a demonstráció végett
került fel a diára:
SELECT
gyarto FROM
termek
WHERE
termekID=1
UNION ALL
SELECT gyarto
FROM termek
WHERE
termekID=4;
Rekordok lekérdezése –
Táblák összekapcsolása
› Táblák összekapcsolása alapvetően két szintaktikával adható meg:
– A FROM listán, vesszővel elválasztva adjuk meg az összekapcsolandó
táblákat és a WHERE feltételben adjuk meg az EQUI JOIN művelethez
tartozó szűrő
feltételt
– FROM listán JOIN operátort kiírva az összekapcsoló feltétellel együtt

SELECT *
FROM termek, gyarto
WHERE termek.gyartoid=gyarto.id;

SELECT*
FROM termek JOIN gyarto on termek.gyartoid=gyarto.id;
Rekordok lekérdezése –
Táblák összekapcsolása
› A JOIN művelet tulajdonsága, hogy a nem
párosítható rekordokat nem tartalmazza az
eredményhalmaz!
› Ha olyan lekérdezést szeretnénk megfogalmazni, amely a
párral nem rendelkező rekordokat is visszaadja, akkor
OUTER JOIN műveletet kell megfogalmazni.
Szeretnénk látni azokat a gyártókat is, akiknek nincs
termékük az adatbázisban:
SELECT*
FROM termek RIGHT OUTER JOIN gyarto on
termek.gyartoid=gyarto.id;

SELECT*
FROM gyarto LEFT OUTER JOIN termek on
gyarto.id=termek.gyartoid;
Rekordok lekérdezése –
Táblák összekapcsolása
› Ugyanaz mind a három, de…
SELECT *
FROM gyarto
WHERE NOT
EXIST (
SELECT
* FROM
termek
WHERE
gyarto.
id =
termek.
gyartoi
d);

SELECT *
FROM gyarto
WHERE id NOT
IN (
SELECT
gyartoi
d FROM
Rekordok lekérdezése–
Táblák összekapcsolása
› Az előző három lekérdezés egymással ekvivalens, viszont nem
feltétlenül egyforma a teljesítményük.
› A not exists operátort tartalmazó esetben minden egyes gyártó
rekordra
egyesével le kell futtatnia az allekérdezést a végrehajtó motornak
› A második esetben az allekérdezést elég egyszer lefuttatni
› A harmadik esetben tulajdonképpen az outer join operátor
párképző tulajdonságát használjuk ki, ráadásul a join művelet
végrehajtása rutinfeladat az adatbázis-kezelő rendszernek.
› A korszerű adatbáziskezelő-rendszerek ma már a fenti három
lekérdezéshez ugyanolyan végrehajtási tervet készítenek,
viszont komplexebb esetekben érdemes megfontolni, hogy
melyik lekérdezési formát válasszuk.
Rekordok lekérdezése - Oszlopfüggvények

› A keresés eredményeként kapott rekordhalmazon lehetséges


utólagos kalkulációt végezni, erre valók az oszlopfüggvények:
– SUM: értékek összegzése
– MIN: legkisebb érték kiválasztása
– MAX: legnagyobb érték kiválasztása
– AVG: átlag kiszámolása
– COUNT: rekordok megszámolása

› A kiszámítandó oszlopfüggvényeket a SELECT listában kell


megadni
Rekordok lekérdezése - Oszlopfüggvények

› Az oszlopfüggvények működését úgy lehet elképzelni, hogy az


adatbázis-kezelő szerver először lefuttatja a lekérdezést az
oszlopfüggvények nélkül
› Majd az egyes rekordokat átadja az oszlopfüggvényeknek, az
értékek kiszámítására. Az oszlopfüggvények a null értékeket nem
veszik figyelembe, kivéve a count(*)

SELECT MIN(ar), MAX(ar), AVG(ar) Average =


FROM termek Átlag
Rekordok lekérdezése - Oszlopfüggvények

› Az oszlopfüggvények használhatók csoportokra is, azaz a rekordokat


csoportosíthatjuk, és ezen csoportok mentén számítunk ki különböző
oszlopfüggvényeket.
› Például ha az előző statisztikát gyártónként szeretnénk látni, akkor
ez azt jelenti, hogy az egyes oszlopfüggvények gyartoid-inként
értékelődjenek ki. A csoportosítás megadására szolgál a GROUP BY
kifejezés.

SELECT gyartoid, MIN(ar), MAX(ar), AVG(ar)


FROM termek
GROUP BY gyartoid
Rekordok lekérdezése - Oszlopfüggvények

› Azokat az oszlopokat, melyeket felsoroltunk a SELECT listán, azokat


mindenképpen fel kell sorolni a GROUP BY listán is!
› Ezen megkötésből adódik, hogy ha a globális szélsőértékhez tartozó
rekordokat szeretnénk megtalálni, akkor azt csak allekérdezéssel
tudjuk megtenni. Egy allekérdezésben elő kell állítani a globális
szélsőértéket és ezt, mint egy értéket kell felhasználnunk, hogy
megtaláljuk azokat a rekordokat, akik felveszik a szélsőértéket. Az
alábbi példa a legolcsóbb termékek listáját állítja elő.
SELECT *
FROM termek
WHERE ar = (SELECT MIN(ar) FROM termek);
Rekordok lekérdezése - Oszlopfüggvények

› Elképzelhető, hogy az oszlopfüggvény eredményére teszünk


megkötést, ekkor ezt a WHERE részben nem adhatjuk meg, mivel az
kiértékelődik még az oszlopfüggvények kiszámítása előtt.
› Ha az oszlopfüggvények kimenetére szeretnénk szűrni, akkor azt
külön, a HAVING kulcsszó után lehet megadni.

› Azokat a gyártókat listázzuk ki, akik által szállított termékek


átlagára
eléri a 200Ft-ot:
SELECT gyarto.id, gyarto.nev, AVG(ar)
FROM gyarto JOIN termek ON gyarto.id=termek.gyartoid
GROUP BY gyarto.id, gyarto.nev
HAVING AVG(ar)>200;

Tipikus állásinterjú kérdés:


Mi a különbség a
WHERE és a HAVING
között?
Rekordok lekérdezése

› Összegzésül nézzük meg, hogy milyen eszközeink vannak a


lekérdezésekhez (avagy SELECT-FLOW):

SELECT [DISTINCT] oszloplista


FROM táblalista
[WHERE logikai kifejezés]
[GROUP BY oszloplista]
[HAVING logikai kifejezés]
[ORDER BY oszloplista]
[LIMIT N]
Néhány MySQL sajátosság (kiegészítő)

You might also like