Skip navigation

Videóleckék

Elméleti áttekintés

Ebben a fejezetben a SELECT utasítást ismerjük meg, valamint megtanuljuk helyesen használni záradékait. A videó második felében az alkérdésekre is kitérünk. Az alkérdések egy lekérdezésbe ágyazott lekérdezések. Szokás őket "belső lekérdezéseknek" is hívni emiatt.

A SELECT utasítás

Az SQL nyelvben a SELECT utasítás szolgál az adatok lekérdezésére. Ennek az utasításnak az alapvető formája a következő

SELECT [DISTINCT] oszloplista FROM táblalista [WHERE feltétel];

A fenti utasításban az oszloplista azt mondja meg, hogy az eredményben milyen oszlopokat szeretnénk látni. A táblalista azt mondja meg, hogy mely táblákat kell összekapcsolni a kívánt adatok eléréséhez. A szögletes zárójelben lévő elemek opcionálisak, vagyis nem kötelező azokat megadni. A WHERE záradék egy szűrési feltételt biztosít az adatok számára, a DISTINCT kulcsszó pedig arra használható, hogy megszüntessük az eredménylistában megjelenő ismétlődő sorokat. Az eredménylista - ha nem üres -  mindig táblát ad vissza (akkor is, ha az egyetlen adatból áll).

A SELECT utasítás teljes szintaxisát figyelembe véve az alábbi módon néz ki:

SELECT [DISTINCT] oszlop1[, [DISTINCT] oszlop2, ...]
FROM tábla1[, tábla2, ...]
[WHERE feltétel ]
[GROUP BY oszlop1[, oszlop2, ...]]
[HAVING csoportfeltétel ]
[ORDER BY oszlop1 [DESC] [, oszlop2 [DESC], ... ]];

A SELECT utasítás utáni oszloplista projekciót jelent az eredménytáblára nézve, vagyis az eredménytáblában csak ezek az oszlopok fognak látszódni.

A FROM utasítás után felsorolt táblákból Descartes-szorzatot képezünk.

A GROUP BY kulcsó hatására az utasítással csoportosítjuk az adatokat a GROUPY BY után megadott oszloplista szerint, vagyis az oszloplistában szereplő azonos értékeket egy csoportba soroljuk. Fontos megjegyezni, hogy ha a lekérdezés GROUP BY utasítást tartalmaz, akkor a SELECT utáni oszloplistában csak ezen oszloplista eleme, valamint összesítő függvény szerepelhet. Amennyiben a GROUP BY után több oszlopot sorolunk fel, úgy a csoportosítás ezen rekord n-esek alapján történik. 

A HAVING záradék a csoportosítás utáni szelekciót végzi, vagyis miután csoportokat képeztünk, ezen csoportosításból választunk ki sorokat.

Az ORDER BY kulcsszó után felsorolt oszloplista alapján rendezzük az eredménytábla sorait. Ha több oszlopot soroltunk fel, akkor a rendezés először az első, majd a második (és így tovább) oszlopok alapján történik.

A műveletek sorrendje a következő:

  1. Descartes-szorzat képzése (FROM)
  2. Szelekció (WHERE)
  3. Csoportosítás (GROUP BY),  ez után már csak a csoport-rekordok maradnak meg, minden más elvész!
  4. Csoport-szelekció (HAVING)
  5. Projekció (SELECT)
  6. Rendezés (ORDER BY)

Összekapcsolások típusa:

Természetes összekapcsolás

SELECT * FROM T1, T2 WHERE T1.oszlop = T2.oszlop;
SELECT * FROM T1 NATURAL JOIN T2;

Belső összekapcsolás (INNER JOIN)

SELECT * FROM T1 INNER JOIN T2 ON T1.oszlop = T2.oszlop;

Baloldali külső összekapcsolás

SELECT * FROM T1 LEFT JOIN T2 ON T1.oszlop = T2.oszlop;

Jobboldali külső összekapcsolás

SELECT * FROM T1 RIGHT JOIN T2 ON T1.oszlop = T2.oszlop;

Teljes külső összekapcsolás (a MySQL-ben nincs rá kulcsszó!)

SELECT * FROM T1 FULL OUTER JOIN T2 ON T1.oszlop = T2.oszlop;

Összesítő függvények

  • MIN(oszlop): egy adott oszlopban található minimum értéket adja vissza.
  • MAX(oszlop): egy adott oszlopban található maximális értéket adja vissza.
  • AVG(oszlop): az oszlopban található értékek átlagát adja vissza.
  • SUM(oszlop): az oszlopban található értékek összegét adja vissza.
  • COUNT([DISTINCT] oszlop): az oszlopban található elemek számát adja vissza, ha a DISTINCT opciót is megadjuk, akkor az ismétlődő értékeket csak egyszer számolja.

Allekérdezések

Az alkérdések olyan SQL lekérdezések, amelyek más SQL lekérdezésben szerepelnek. Ezeket tipikusan WHERE és HAVING záradékban szokás megadni, de bizonyos adatbáziskezelő rendszerek megengedik, hogy a FROM záradákban adjuk meg, hiszen a lekérdezés eredménye is felfogható tábláként, amelyet használhatunk Descartes-szorzatban.

Az EXISTS() függvényben is egy alkérdést adunk meg argumentumként. Az EXISTS() függvény igaz értékkel tér vissza, ha az argumentumában megadott alkérdés tartalmaz rekordokat, különben pedig hamis értékkel tér vissza. Az EXISTS() értékét általában egy lekérdezés WHERE záradékában kérdezzük le.

Az alkérdések bizonyos esetekben hatékonyabbá tehetik a lekérdezéseket, ha velük egy nagyobb adathalmazból előszűrünk bizonyos rekordokat, amelyekből további információt nyerünk ki.

Alkérdések

Halmazműveletek

A relációs algebrában szereplő halmazműveletek, az unió, metszet és különbség az SQL-ben is meg van valósítva. A műveletekben használt eredményhalmazokat két alkérdés eredményeként kapjuk. Itt is fontos, hogy a két eredményhalmaz (eredménytábla) kompatibilis legyen egymással.

Unió

(alkérdés) UNION (alkérdés)

Metszet

(alkérdés) INTERSECT (alkérdés)

Különbség

(alkérdés) EXCEPT (alkérdés)

Egyes  rendszerekben:
(alkérdés) MINUS (alkérdés)

Példa lekérdezésekre

Az alábbi videóleckében a Fórum adatbázisban hajtunk végre néhány lekérdezést. Látunk példát arra is, hogy ha hibásan fogalmazunk meg egy lekérdezést, attól még eredményezheti az általunk jónak vélt eredményt, de ez csak bizonyos adattartalom mellett igaz. Ezért gondosan ügyeljünk arra, hogy helyesen fogalmazzuk meg a kívánt eredményt szolgáló lekérdezést!

Példák lekérdezésekre

Példák alkérdésekre

Alkérdést megfogalmazhatunk lekérdezésekben és adatmanipulációs utasításokban is. Az alábbi két videóleckében ezekre látunk példát.

Példák alkérdésekre lekérdezésekben

Példák alkérdésekre adatmanipulációban