Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

Adatbázisok

9. gyakorlat

SQL: SELECT

2015. október 26.

2015. október 26. Adatbázisok 1 / 14


SQL SELECT

• Lekérdezésre a SELECT utasítás szolgál, mely egy vagy több


adattáblából egy eredménytáblát állít el®
• Szintaxis:
SELECT [DISTINCT] oszloplista
FROM táblanévlista
[WHERE feltétel];
• Ha a SELECT utáni oszloplista helyére *-ot írunk, akkor az
összes oszlop értéke lesz lekérdezhet®
• A FROM utáni táblanév listában több tábla is szerepelhet, ilyen-
kor ezek Descartes-szorzata képz®dik
• WHERE feltétellel a számunkra relevánsak kiválasztása

2015. október 26. Adatbázisok 2 / 14


SQL SELECT

• Kib®vített szintaxis:
SELECT [DISTINCT] oszlop1 , ..., oszlopn
FROM tábla1 , ..., táblan
[WHERE feltétel]
[GROUP BY oszlop1 , ..., oszlopn ]
[HAVING feltétel]
[ORDER BY oszlop1 , ..., oszlopn ]

2015. október 26. Adatbázisok 3 / 14


El®z® órai példa módosítása

CREATE TABLE Osztaly(


osztalykod INT(3) PRIMARY KEY,
osztalynev CHAR(20),
vezAdoszam DECIMAL(10)
);

CREATE TABLE Dolgozo(


adoszam DECIMAL(10) PRIMARY KEY,
nev CHAR(30),
lakcim CHAR(40) DEFAULT 'ismeretlen',
zetes INT(6),
osztalykod INT(3) REFERENCES Osztaly(osztalykod)
);

2015. október 26. Adatbázisok 4 / 14


Példák

• Legegyszer¶bb SELECT utasítás egy tábla teljes tartalmának


lekérdezése:
• SELECT * FROM Dolgozo;
• Ha csak bizonyos adatokra vagyunk kíváncsiak (adószám, név,
zetés):
• SELECT adoszam, nev, zetes FROM Dolgozo;
• A WHERE feltétel megadásával a sorokra adhatunk meg sz¶rési
feltételeket
• Pl.: az összes 50000 forintnál nagyobb zetés¶ dolgozók nevé-
nek kilistázása
• SELECT DISTINCT nev FROM Dolgozo
WHERE zetes > 50000;
• DISTINCT - az azonos sorok közül csak egyet jelenít meg

2015. október 26. Adatbázisok 5 / 14


Függvények

• Összesít® függvények
• COUNT (oszlop): sorok számát adja vissza (oszlop helyett * is
szerepelhet, ilyenkor nem lehet DISTINCT)
• SUM (oszlop): adott oszlopban szerepl® értékek összegét adja
vissza
• MIN (oszlop): adott oszlopban szerepl® értékek minimumát adja
vissza
• MAX (oszlop): adott oszlopban szerepl® értékek maximumát
adja vissza
• AVG (oszlop): adott oszlopban szerepl® értékek átlagát adja
vissza
• Az oszlopnév el®tt szerepelhet a DISTINCT kulcsszó

2015. október 26. Adatbázisok 6 / 14


Példák

• Dolgozók számának lekérdezése


• SELECT COUNT(*) FROM Dolgozo;
• Hány osztályon vannak dolgozók?
• SELECT COUNT(DISTINCT osztkod) FROM Dolgozo;
• A dolgozók átlagzetése
• SELECT AVG(zetes) FROM Dolgozo;
• A dolgozók zetésének összege
• SELECT SUM(zetes) FROM Dolgozo;

2015. október 26. Adatbázisok 7 / 14


Függvények

• Logikai függvények:
• AND - és kapcsolat
• OR - vagy kapcsolat
• NOT - negáció, tagadás
• Speciális logikai függvények:
• x IS NULL - igaz, ha az x mez® értéke NULL
• x BETWEEN a AND b - igaz, ha a ≤ x ≤ b
• x IN halmaz - igaz, ha x megegyezik a halmaz egy elemével
• x LIKE minta - igaz, ha az x karaktersorozat megfelel a megadott
mintának
• _ : egy tetsz®leges karakter

• % : tetsz®leges szám¶ tetsz®leges karakter

2015. október 26. Adatbázisok 8 / 14


Példák

• Az 50000 és 70000 forint között keres®k dolgozók neve


• SELECT DISTINCT nev FROM Dolgozo
WHERE zetes BETWEEN 50000 AND 70000;
• Az 1-es, 2-es vagy 5-ös osztályon dolgozók nevei
• SELECT DISTINCT nev FROM Dolgozo
WHERE osztkod IN(1, 2, 5);
• Az összes "M" bet¶vel kezd®d® dolgozó kilistázása, akinek a
nevében a harmadik bet¶ "r" bet¶
• SELECT DISTINCT nev FROM Dolgozo
WHERE nev LIKE 'M_r%';

2015. október 26. Adatbázisok 9 / 14


Összesítés, csoportosítás

• A tábla sorainak oszloponkénti összesítésére a GROUP BY osz-


loplista parancs szolgál
• Egy csoportba azon sorok tartaóoznak, melyeknél az oszloplista
értéke azonos
• Pl.: Dolgozó táblában osztályonkénti átlagzetés
• SELECT osztkod, AVG(zetes) FROM Dolgozo
GROUP BY osztkod;
• A SELECT után az összesít® függvényen kívül csak olyan osz-
lopnév feltüntetésének van értelme, amely a GROUP BY-ban is
szerepel
• A GROUP BY által leképezett csoportok között a HAVING fel-
tétel alparancs segítségével válogathatunk

2015. október 26. Adatbázisok 10 / 14


Példa

• Kérdezzük le, hogy hány dolgozó van az egyes osztályokon,


listázzuk ki az osztály kódját és mellé az osztályon dolgozók
számát! Csak azon osztályokat jelenítsük meg, amelyeken
legalább 2 ember dolgozik!
• SELECT osztkod, COUNT(adoszam) AS dolgozok_szama
FROM Dolgozo
GROUP BY osztkod
HAVING dolgozok_szama ≥ 2;

2015. október 26. Adatbázisok 11 / 14


Rendezés

• Az eredménytábla sorait rendezhetjük az ORDER BY segítsé-


gével
• Alapértelmezés szerint a rendezés növekv® sorrendben történik
(ASC), ha fordítva szerenénk, akkor a DESC kulcsszó írandó a
megfelel® oszlopnév után
• Pl.: Dolgozók és zetéseik listája az osztálykódok növekv®, ezen
belül a zetések csökken® sorrendjében:
• SELECT osztkod, nev, zetes
FROM Dolgozo
ORDER BY osztkod, zetes DESC;

2015. október 26. Adatbázisok 12 / 14


Két tábla összekapcsolása

• Tfh. a dolgozók listáját úgy szeretnénk kiíratni, hogy ne az osz-


tálykód szerepeljen a dolgozó adatai mellett, hanem az osztály
neve
• SELECT adoszam, nev, lakcim, zetes, osztalynev
FROM Dolgozo, Osztaly
WHERE Dolgozo.osztkod = Osztaly.osztalykod;
• A táblák Descartes szorzatából csak azok a sorok maradnak
meg, amelyek kapcsolódnak
• Ezt természetes összekapcsolásnak/bels® összekapcsolásnak (na-
tural join/inner join) nevezzük
• SELECT adoszam, nev, lakcim, zetes, osztalynev
FROM Osztaly
INNER JOIN Dolgozo ON Dolgozo.osztkod = Osztaly.osztalykod;

2015. október 26. Adatbázisok 13 / 14


Továbbfejlesztett példa

• Kérdezzük le, hogy hány dolgozó van az egyes osztályokon, lis-


tázzuk ki az osztály nevét és mellé az adott osztályon dolgozók
számát! Csak azokat az osztályokat jelenítsük meg, amelyeken
legalább 2 ember dolgozik!
• SELECT osztalynev, COUNT(adoszam) AS dolgozok_szama
FROM Dolgozo, Osztaly
WHERE Dolgozo.osztkod = Osztaly.osztalykod
GROUP BY osztkod
HAVING dolgozok_szama ≥ 2;

2015. október 26. Adatbázisok 14 / 14

You might also like