PROFI ADATBÁZISKEZELÉS

SQL SELECT & JOIN

A hatékony és optimalizált adatlekérdezés mesterkurzusa

02. A Kurzus Menetrendje

1. Rész: Alapok

• A SELECT és FROM felépítése (03-10)
• Szűrési feltételek kialakítása (11-20)
• Szöveges minták és tartományok (21-24)

2. Rész: Haladó műveletek

• Rendezés és LIMIT korlátok (25-28)
• Táblakapcsolatok: INNER JOIN (29-30)
• Hiányzó adatok: LEFT JOIN & NULL (31-33)

03. Mi az az SQL lekérdezés?

A lekérdezés egy strukturált kérdés, amelyet az adatbázishoz intézünk. Nem módosítunk adatot, csak **kinyerjük és rendszerezzük** az információkat a meglévő táblákból.

SELECT oszlopok FROM tábla;

04. Relációs adatbázis fogalma

A modern rendszerekben az adatokat nem egyetlen óriási táblázatban tároljuk, hanem **kisebb, logikailag elkülönülő entitásokban** (táblákban), amiket kapcsolatok kötnek össze.

05. Adatstruktúra: A Tábla

Minden tábla szigorú szerkezetet követ:

  • Oszlopok: Az adatok típusát határozzák meg.
  • Sorok: Az egyedi bejegyzések, rekordok.

[id] | [nev] | [kor]
------------------
1 | Anna | 22
2 | Péter | 24

06. 1. Tábla: diakok

Ebben a táblában tároljuk a nálunk tanuló diákok legfontosabb törzsadatait. Három oszlopból áll: id, nev és kor.

idnevkor
1Kovács Anna22
2Nagy Péter24

07. 2. Tábla: kurzusok

Az iskola által indított kurzusok jegyzéke. Minden kurzushoz tartozik egy felelős szakoktató:

idkurzus_nevoktato
101SQL AlapokSoós Sándor
102React MűhelySoós Sándor

08. 3. Tábla: jelentkezesek

Ez egy kapcsolótábla. Nem tárol neveket, csak az azonosítókat köti össze, rögzítve a feliratkozásokat.

diak_id ↔ kurzus_id

01. MODUL: Alapok

SELECT, FROM és Aliasok

10. Oszlopok kiválasztása

A SELECT után vesszővel elválasztva pontosan megadjuk az oszlopok neveit. Ezt a műveletet nevezzük vetítésnek.

SELECT nev, kor FROM diakok;

11. A SELECT * veszélyei

A csillag (*) az összes oszlopon áthalad. Éles rendszerekben kerülendő: felesleges hálózati forgalmat generál és sérülékennyé teszi a kódot.

12. Aliasok (AS kulcsszó)

Az AS segítségével tetszőleges nevet adhatunk a kimeneti oszlopnak, ami ideális riportok generálásakor.

SELECT nev AS "Tanulo Neve" FROM diakok;

13. Kifejezések a SELECT-ben

A lekérdezés futása közben matematikai műveleteket is végezhetünk a mezőkön.

SELECT nev, kor + 1 FROM diakok;

14. DISTINCT: Egyedi értékek

Az ismétlődések és duplikációk teljes kiszűrése a találati oszlopokból.

SELECT DISTINCT kor FROM diakok;

02. MODUL: Szűrés

A WHERE záradék hatalma

16. A WHERE szerepe

A WHERE záradékkal feltételeket szabunk meg, így csak a logikailag igaz sorok maradnak meg.

17. Operátor: = és <>

Pontos egyezés (=) és tagadás / nem egyenlő (<> vagy !=).

WHERE kor = 22;

18. Relációs operátorok

Kisebb (<), nagyobb (>), kisebb-egyenlő (<=) és nagyobb-egyenlő (>=).

WHERE kor >= 23;

19. Logikai: AND

Feltételek szűkítése: a sor csak akkor jelenik meg, ha minden megadott feltétel egyszerre teljesül.

WHERE kor > 20 AND nev LIKE 'K%';

20. Logikai: OR

Az OR kapcsolat bővíti a találati halmazt. Elegendő, ha a megadott feltételek közül legalább az egyik igazra értékelődik.

WHERE kor = 20 OR kor = 24;

21. Logikai: NOT

A logikai érték megfordítása: minden olyan sort visszaad, ami NEM felel meg az utána álló feltételnek.

WHERE NOT kor = 22;

22. BETWEEN: Intervallumok

Zárt intervallum szerinti szűrés (az alsó és felső határérték is benne van a találatokban).

WHERE kor BETWEEN 20 AND 23;

23. IN: Felsorolások

Helyettesíti a sok OR kapcsolatot. Megvizsgálja, hogy az érték szerepel-e a listában.

WHERE kor IN (20, 22, 24);

24. LIKE és a %

Szöveges mintaillesztés: a százalékjel tetszőleges számú karaktert helyettesíthet.

WHERE nev LIKE 'Kov%';

25. LIKE és az aláhúzás (_)

Az aláhúzásjel pontosan egyetlen karakter helyét foglalja el a keresési mintában.

WHERE nev LIKE 'N_gy%';

03. MODUL: Rendezés

Az adatok esztétikus sorrendje

27. ORDER BY: ASC

Növekvő sorrendbe állítás (A-Z, legkisebbtől a legnagyobbig). Ez az alapértelmezett irány.

ORDER BY kor ASC;

28. ORDER BY: DESC

Csökkenő sorrendbe kényszerítés (Z-A, legnagyobbtól a legkisebbig), ideális toplistákhoz.

ORDER BY kor DESC;

29. Több oszlopos rendezés

Ha az első oszlopban egyezés van, a másodikat veszi alapul a sorrendhez.

ORDER BY kor DESC, nev ASC;

30. LIMIT záradék

Megmondja, hogy maximum hány sort akarunk látni a végeredményben.

SELECT * FROM diakok LIMIT 3;

04. MODUL: JOIN

Táblák összekapcsolása felsőfokon

32. INNER JOIN Koncepció

Csak a közös metszetet adja vissza: azokat a sorokat, amiknek pontos párja van mindkét oldalon.

diakok
jelentk.

33. INNER JOIN a gyakorlatban

Figyeld meg, hogy a bejegyzéssel nem rendelkező diák (Molnár Dávid) teljesen kimarad a metszetből!

SELECT diakok.nev, jelentkezesek.kurzus_id FROM diakok
INNER JOIN jelentkezesek ON diakok.id = jelentkezesek.diak_id;
nevkurzus_id
Kovács Anna101
Kovács Anna102
Nagy Péter101
Szabó Éva103
Kiss Ádám102

34. LEFT JOIN Koncepció

Megtartja a bal tábla (Fő tábla) minden egyes sorát. Ahole a jobb oldalon nincs kapcsolódó adat, oda NULL kerül.

diakok
jelentk.

35. LEFT JOIN a gyakorlatban

Molnár Dávid megmarad a listában, de mivel nem jelentkezett sehova, a kurzus_id értéke NULL.

SELECT diakok.nev, jelentkezesek.kurzus_id FROM diakok
LEFT JOIN jelentkezesek ON diakok.id = jelentkezesek.diak_id;
nevkurzus_id
Kovács Anna101
Kovács Anna102
Nagy Péter101
Szabó Éva103
Kiss Ádám102
Molnár DávidNULL

36. RIGHT JOIN Koncepció

A LEFT JOIN tökéletes tükörképe. Megtartja a jobb oldali tábla összes rekordját, a hiányzó bal oldali értékeket pedig NULL-lal tölti fel.

diakok
jelentk.

37. RIGHT JOIN a gyakorlatban

Megfordítjuk az irányt: ha a diakok táblát tesszük a jobb oldalra, minden diák látszódni fog.

SELECT diakok.nev, jelentkezesek.kurzus_id FROM jelentkezesek
RIGHT JOIN diakok ON diakok.id = jelentkezesek.diak_id;
nevkurzus_id
Kovács Anna101
Kovács Anna102
Nagy Péter101
Szabó Éva103
Kiss Ádám102
Molnár DávidNULL

38. FULL OUTER JOIN Koncepció

Egyesíti a LEFT és RIGHT JOIN eredményét. Minden egyes sort visszaad mindkét táblából, és ahol nincs egyezés, ott mindkét irányban NULL-t használ.

diakok
jelentk.

39. FULL OUTER JOIN a gyakorlatban

A teljes unió mindent megjelenít, maximális toleranciát biztosítva a hiányzó kapcsolatokra.

SELECT diakok.nev, jelentkezesek.kurzus_id FROM diakok
FULL OUTER JOIN jelentkezesek ON diakok.id = jelentkezesek.diak_id;
nevkurzus_id
Kovács Anna101
Kovács Anna102
Nagy Péter101
Szabó Éva103
Kiss Ádám102
Molnár DávidNULL