PROFI ADATBÁZISKEZELÉS
A hatékony és optimalizált adatlekérdezés mesterkurzusa
• 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)
• Rendezés és LIMIT korlátok (25-28)
• Táblakapcsolatok: INNER JOIN (29-30)
• Hiányzó adatok: LEFT JOIN & NULL (31-33)
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.
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.
Minden tábla szigorú szerkezetet követ:
[id] | [nev] | [kor]
------------------
1 | Anna | 22
2 | Péter | 24
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.
| id | nev | kor |
|---|---|---|
| 1 | Kovács Anna | 22 |
| 2 | Nagy Péter | 24 |
Az iskola által indított kurzusok jegyzéke. Minden kurzushoz tartozik egy felelős szakoktató:
| id | kurzus_nev | oktato |
|---|---|---|
| 101 | SQL Alapok | Soós Sándor |
| 102 | React Műhely | Soós Sándor |
Ez egy kapcsolótábla. Nem tárol neveket, csak az azonosítókat köti össze, rögzítve a feliratkozásokat.
SELECT, FROM és Aliasok
A SELECT után vesszővel elválasztva pontosan megadjuk az oszlopok neveit. Ezt a műveletet nevezzük vetítésnek.
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.
Az AS segítségével tetszőleges nevet adhatunk a kimeneti oszlopnak, ami ideális riportok generálásakor.
A lekérdezés futása közben matematikai műveleteket is végezhetünk a mezőkön.
Az ismétlődések és duplikációk teljes kiszűrése a találati oszlopokból.
A WHERE záradék hatalma
A WHERE záradékkal feltételeket szabunk meg, így csak a logikailag igaz sorok maradnak meg.
Pontos egyezés (=) és tagadás / nem egyenlő (<> vagy !=).
Kisebb (<), nagyobb (>), kisebb-egyenlő (<=) és nagyobb-egyenlő (>=).
Feltételek szűkítése: a sor csak akkor jelenik meg, ha minden megadott feltétel egyszerre teljesül.
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.
A logikai érték megfordítása: minden olyan sort visszaad, ami NEM felel meg az utána álló feltételnek.
Zárt intervallum szerinti szűrés (az alsó és felső határérték is benne van a találatokban).
Helyettesíti a sok OR kapcsolatot. Megvizsgálja, hogy az érték szerepel-e a listában.
Szöveges mintaillesztés: a százalékjel tetszőleges számú karaktert helyettesíthet.
Az aláhúzásjel pontosan egyetlen karakter helyét foglalja el a keresési mintában.
Az adatok esztétikus sorrendje
Növekvő sorrendbe állítás (A-Z, legkisebbtől a legnagyobbig). Ez az alapértelmezett irány.
Csökkenő sorrendbe kényszerítés (Z-A, legnagyobbtól a legkisebbig), ideális toplistákhoz.
Ha az első oszlopban egyezés van, a másodikat veszi alapul a sorrendhez.
Megmondja, hogy maximum hány sort akarunk látni a végeredményben.
Táblák összekapcsolása felsőfokon
Csak a közös metszetet adja vissza: azokat a sorokat, amiknek pontos párja van mindkét oldalon.
Figyeld meg, hogy a bejegyzéssel nem rendelkező diák (Molnár Dávid) teljesen kimarad a metszetből!
| nev | kurzus_id |
|---|---|
| Kovács Anna | 101 |
| Kovács Anna | 102 |
| Nagy Péter | 101 |
| Szabó Éva | 103 |
| Kiss Ádám | 102 |
Megtartja a bal tábla (Fő tábla) minden egyes sorát. Ahole a jobb oldalon nincs kapcsolódó adat, oda NULL kerül.
Molnár Dávid megmarad a listában, de mivel nem jelentkezett sehova, a kurzus_id értéke NULL.
| nev | kurzus_id |
|---|---|
| Kovács Anna | 101 |
| Kovács Anna | 102 |
| Nagy Péter | 101 |
| Szabó Éva | 103 |
| Kiss Ádám | 102 |
| Molnár Dávid | NULL |
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.
Megfordítjuk az irányt: ha a diakok táblát tesszük a jobb oldalra, minden diák látszódni fog.
| nev | kurzus_id |
|---|---|
| Kovács Anna | 101 |
| Kovács Anna | 102 |
| Nagy Péter | 101 |
| Szabó Éva | 103 |
| Kiss Ádám | 102 |
| Molnár Dávid | NULL |
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.
A teljes unió mindent megjelenít, maximális toleranciát biztosítva a hiányzó kapcsolatokra.
| nev | kurzus_id |
|---|---|
| Kovács Anna | 101 |
| Kovács Anna | 102 |
| Nagy Péter | 101 |
| Szabó Éva | 103 |
| Kiss Ádám | 102 |
| Molnár Dávid | NULL |