A SELECT… FROM … kifejezés
Ha adatokat szeretnénk kiolvasni az adatbázisunk tábláiból, akkor a SELECT és a FROM kulcsszavakat kell használnunk, melyek szintaxisa az alábbi:
SELECT mezőnevek FROM tábla
A SELECT kulcsszó után egy, vagy több mezőnevet adhatunk meg, vesszővel elválasztva – ez fogja meghatározni, hogy a lekérdezés végeredményében melyik mezők adatai szerepeljenek, és milyen sorrendben (az elsőnek megadott mező lesz a "legbaloldalibb" az eredményben, míg az utolsónak megadott mező lesz a "legjobboldalibb"). A mezők nevének megadására több lehetőségünk is van:
- `táblanév`.`mezőnév`: a legpontosabb módja a mezők nevének megadásának – tartalmazza a tábla nevét, és tartalmazza a mező nevét is, így akkor is tökéletesen működik, ha több táblában is van azonos nevű mező, és mind a táblanév, mind pedig a mezőnév körül van véve az ún. back quote karakterrel (AltGr+7), ezzel jelölve, hogy itt most objektumok nevei szerepelnek, így garantáltan nem okoznak gondot az ékezetes karakterek, a szóközök, stb. (bár ezek használatát ennek ellenére sem javasoljuk mezőnevekben és táblanevekben)Ne feledd!A különféle adatbáziskezelő programok más-más jelöléseket használnak az objektumnevekre. Míg a MySQL-ben a back quote jelöli őket, addig az Access-ben szögletes zárójelek [], a PostgreSQL-ben, MS SQL-ben és Presto SQL-ben pedig sima idézőjel.
- táblanév.mezőnév: ha sem a tábla neve, sem a mező neve nem tartalmaz speciális karaktereket, vagy kulcsszavakat, akkor a back quote karakterek elhagyhatók
- `mezőnév`: ha az adott névvel mező csak a lekérdezés egyik táblájában szerepel (vagy eleve csak egy táblából kérdezünk le), a tábla neve elhagyható
- mezőnév: ha a mező neve nem tartalmaz speciális karaktert vagy kulcsszót, akkor persze itt is elhagyhatjuk a back quote karaktereket
- táblanév.* vagy `táblanév`.*: egy adott tábla összes mezője
- *: a lekérdezésben szereplő összes tábla összes mezője
- egyszerű mezők mellett műveleteket, összesítő függvényeket, stb. is használhatunk a SELECT kifejezésben, de ezekről a saját cikkeikben találsz majd információt
A FROM kulcsszó után pedig egy, vagy több tábla, vagy nézet nevét adhatjuk meg, ezekből fogja a lekérdezés kiolvasni az előbbiekben felsorolt adatokat. Több tábla esetén valamilyen összekapcsolás is szükséges, ezekről az összekapcsolással foglalkozó cikkben olvashatsz. Érdemes megjegyezni, hogy táblákon és nézeteken kívül allekérdezések is beágyazhatók a FROM részbe, ezekkel is egy külön cikk foglalkozik. Nézzünk néhány példát:
SELECT `nev` FROM `diak`
Lekéri a diak nevű táblából az összes rekordot, és ezekből megjeleníti csak a nev mezőt, azaz kilistázza a diákok neveit.
SELECT `iskola`, `kodjel` FROM `nevezo`
Lekéri a nevezo táblából az összes rekordot, és ezekből megjeleníti csak az iskola és a kodjel mezőket. (próbáld ki a homokozóban!)
SELECT * FROM `fordulo`
Lekéri a fordulo táblából az összes adatot.
Próbáld ki!
A fentebbi minták mind olyan táblákra hivatkoznak, amik léteznek az info9 MySQL homokozóban – így könnyedén kipróbálhatod, átírhatod, tesztelheted, boncolgathatod őket! Másold be őket a homokozóba, és próbáld meg átalakítani őket! Íme néhány ötlet, amit elkészíthetsz belőlük:
- Módosítsd az első lekérdezést úgy, hogy ne csak a nev, hanem az osztaly mező is megjelenjen benne!
- Módosítsd a második lekérdezést úgy, hogy az iskola és a kodjel helyett a kodjel és a kategoria mezők jelenjenek meg!
- Kérdezd le az összes mező tartalmát a tantargy táblából!
- Jelenítsd meg csak a nevado mező tartalmát a fordulo táblából!
Mezők átkeresztelése
SELECT `nev` AS "Tanuló" FROM `diak`
Ha a lekérdezésünkben több mezőt is el szeretnénk nevezni, mindegyiknél külön kell használnunk az AS kulcsszót:
SELECT `iskola` AS "Suli", `kodjel` AS "Kódjel" FROM `nevezo`
Persze olyan is előfordulhat, hogy több mező közül csak egyet nevezünk el, ennek sincs akadálya:
SELECT `nevado` AS "Névadó", `hatarido` FROM `fordulo`
Próbáld ki a lekérdezéseket a homokozóban, és figyeld meg, ahogy az AS kulcsszó használata miatt megváltozik a kimeneten a mezők elnevezése.
Csak egyedi rekordok megjelenítése
Komplexebb lekérdezések esetén előfordulhat, hogy több, tartalmilag teljesen megegyező rekord kerül megjelenítésre. Például, ha a diákoknak csak az osztályát kérjük le, minden osztály annyiszor fog megjelenni, ahány diák rögzítve van az adott osztályból. Ha minden eredményt csak egyszer szeretnénk megjeleníteni, a SELECT után használhatjuk a DISTINCT kulcsszót:
SELECT DISTINCT `osztaly` FROM `diak`