MySQL függvényei

A MySQL függvényeit két csoportba célszerű bontani:

Az alábbi összefoglaló a legfontosabb MySQL-függvényeket rendszerezi.

Aggregáló függvények

Az aggregáló függvények egy sorhalmazon végeznek számítást, és rendszerint egy értéket adnak vissza.

COUNT()

Megszámolja a sorokat vagy a nem NULL értékeket.

SELECT COUNT(*) FROM dolgozok;

Az összes sort megszámolja.

SELECT COUNT(fizetes) FROM dolgozok;

A fizetes oszlop nem NULL értékeit számolja.

SELECT COUNT(DISTINCT osztaly_id) FROM dolgozok;

Megszámolja, hány különböző osztály szerepel a dolgozók táblában.

⚠️ Fontos:

A COUNT(*) és COUNT(oszlop) nem feltétlenül ugyanazt adja vissza, mert a COUNT(oszlop) figyelmen kívül hagyja a NULL értékeket.

SUM()

Egy numerikus oszlop értékeinek összegét számítja ki.

SELECT SUM(fizetes) FROM dolgozok;

Csoportosítva:

SELECT osztaly_id, SUM(fizetes) FROM dolgozok GROUP BY osztaly_id;

Ez megadja az egyes osztályok összes fizetését.

AVG()

Átlagot számol.

SELECT AVG(fizetes) FROM dolgozok;

Csoportosítva:

SELECT osztaly_id, AVG(fizetes) FROM dolgozok GROUP BY osztaly_id;

📌 A NULL értékeket nem veszi figyelembe.

MIN()

A legkisebb értéket adja vissza.

SELECT MIN(fizetes) FROM dolgozok;

📌 Dátumokra és szövegekre is alkalmazható.

SELECT MIN(szuletesi_datum) FROM dolgozok;

MAX()

A legnagyobb értéket adja vissza.

SELECT MAX(fizetes) FROM dolgozok;

Dátumok esetén például:

SELECT MAX(szuletesi_datum) FROM dolgozok;

Nem aggregáló függvények

Ezek jellemzően soronként hajtódnak végre.

Szövegkezelő függvények

CONCAT()

Szövegeket fűz össze.

SELECT CONCAT(vezeteknev, ' ', keresztnev) FROM dolgozok; -- Pl.: Szabó János

UPPER() / LOWER()

Nagybetűssé / kisbetűssé alakít.

SELECT UPPER(nev) FROM dolgozok; -- Pl. SZABÓ JÁNOS SELECT LOWER(nev) FROM dolgozok; -- Pl. szabó jános

LENGTH()

A karakterlánc byte-hosszát adja vissza.

SELECT LENGTH('Hello'); -- Eredmény: 5

UTF-8 esetén fontos különbség van a CHAR_LENGTH()-hez képest.

CHAR_LENGTH()

A karakterek számát adja vissza.

SELECT CHAR_LENGTH('naplemente');

Ez karaktereket számol, nem byte-okat.

SUBSTRING()

Egy szövegrészletet vág ki.

SELECT SUBSTRING('ABCDEFG', 2, 3); -- Eredmény: BCD

LEFT() / RIGHT()

A szöveg bal / jobb oldaláról vesz karaktereket.

SELECT LEFT('ABCDEFG', 3); -- Eredmény: ABC SELECT RIGHT('ABCDEFG', 3); -- Eredmény: EFG

TRIM()

Eltávolítja a szóközöket a szöveg elejéről és végéről.

SELECT TRIM(' Hello '); -- Eredmény: 'Hello'

LTRIM() / RTRIM()

Csak bal, illetve csak jobb oldalról távolítja el a szóközöket.

SELECT LTRIM(' Hello'); SELECT RTRIM('Hello ');

REPLACE()

Egy szövegrészletet másikra cserél.

SELECT REPLACE('Hello World', 'World', 'világ'); -- Eredmény: Hello világ

REVERSE()

Megfordítja a karakterláncot.

SELECT REVERSE('ABC'); -- Eredmény: CBA

LOCATE()

Megkeresi egy részszöveg pozícióját.

SELECT LOCATE('World', 'Hello World'); -- Eredmény: 7

Numerikus függvények

ROUND()

Kerekít.

SELECT ROUND(12.5678, 2); -- Eredmény: 12.57

CEIL() / FLOOR()

Felfelé / lefelé kerekít a legközelebbi egészre.

SELECT CEIL(12.1); -- Eredmény: 13 SELECT FLOOR(12.9); -- Eredmény: 12

TRUNCATE()

Tizedesjegyeket vág le kerekítés nélkül.

SELECT TRUNCATE(12.9876, 2); -- Eredmény: 12.98

ABS()

Abszolút értéket ad.

SELECT ABS(-15); -- Eredmény: 15

MOD()

Maradékos osztást végez.

SELECT MOD(10, 3); -- Eredmény: 1

📌 Az % operátor is használható:

SELECT 10 % 3;

POWER()

Hatványoz.

SELECT POWER(2, 3); -- Eredmény: 8

SQRT()

Négyzetgyök.

SELECT SQRT(25); -- Eredmény: 5

RAND()

Véletlenszerű számot generál 0 és 1 között.

SELECT RAND();

Dátum- és időfüggvények

NOW()

Az aktuális dátumot és időt adja.

SELECT NOW(); -- Pl. 2026-09-01 20:05:12

CURDATE()

Az aktuális dátum.

SELECT CURDATE();

CURTIME()

Az aktuális idő.

SELECT CURTIME();

YEAR()

Egy dátumból kinyeri az évet.

SELECT YEAR('2026-09-01'); -- Eredmény: 2026

MONTH()

A hónap számát adja vissza.

SELECT MONTH('2026-09-01'); -- Eredmény: 9

DAY()

A hónap napját adja vissza.

SELECT DAY('2026-09-01'); -- Eredmény: 1

HOUR(), MINUTE(), SECOND()

Idő komponenseinek kinyerése:

SELECT HOUR('15:42:31'); SELECT MINUTE('15:42:31'); SELECT SECOND('15:42:31');

DAYNAME()

A hét napjának nevét adja.

SELECT DAYNAME('2026-09-01');

MONTHNAME()

A hónap nevét adja.

SELECT MONTHNAME('2026-09-01');

WEEKDAY()

A hét napját számmal adja vissza, hétfőtől indulva.

SELECT WEEKDAY('2026-09-01');

DATEDIFF()

Két dátum közötti napok számát adja.

SELECT DATEDIFF('2026-12-31', '2026-09-01');

TIMESTAMPDIFF()

Két dátum/időpont közötti különbséget megadott mértékegységben számolja.

SELECT TIMESTAMPDIFF(YEAR,'2000-05-10','2026-09-21'); Más egységek is használhatók: TIMESTAMPDIFF(DAY, ...) TIMESTAMPDIFF(HOUR, ...) TIMESTAMPDIFF(MINUTE, ...) TIMESTAMPDIFF(SECOND, ...)

DATE_ADD()

Időt ad hozzá egy dátumhoz.

SELECT DATE_ADD('2026-09-01', INTERVAL 10 DAY);

DATE_SUB()

Időt von le.

SELECT DATE_SUB('2026-09-27', INTERVAL 1 MONTH);

DATE_FORMAT()

Egy dátumot formázott szöveggé alakít.

SELECT DATE_FORMAT('2026-09-27','%Y-%m-%d') FROM dolgozok;

Feltételes és NULL-kezelő függvények

IF()

Egyszerű feltételt kezel.

SELECT IF(fizetes >= 500000, 'magas', 'alacsony') FROM dolgozok;

IFNULL()

Ha az első érték NULL, a másodikat adja vissza.

SELECT IFNULL(telefon, 'Nincs megadva') FROM dolgozok;

NULLIF()

NULL-t ad, ha a két kifejezés egyenlő.

SELECT NULLIF(10, 10); -- Eredmény: NULL -- Ha különböznek: SELECT NULLIF(10, 20); -- Eredmény: 10

COALESCE()

A felsorolt értékek közül az első nem NULL értéket adja vissza.

SELECT COALESCE(telefon, email, 'Nincs elérhetőség') FROM dolgozok;

CASE

SELECT nev, CASE WHEN fizetes < 400000 THEN 'alacsony' WHEN fizetes < 700000 THEN 'közepes' ELSE 'magas' END AS kategoria FROM dolgozok;

Típusátalakító függvények

CAST()

Egy értéket más adattípusra alakít.

SELECT CAST('123' AS UNSIGNED); SELECT CAST('2026-09-27' AS DATE);

CONVERT()

Szintén típusátalakításra használható.

SELECT CONVERT('123', UNSIGNED);

Függvények egymásba ágyazása

A függvények kombinálhatók.

Például:

SELECT UPPER( CONCAT(vezeteknev, ' ', keresztnev) ) AS teljes_nev FROM dolgozok;

Vagy:

SELECT ROUND(AVG(fizetes), 0) FROM dolgozok;

Itt először AVG() kiszámítja az átlagot, majd ROUND() egészre kerekíti.

📌 Az aggregáló és egy nem aggregáló függvény együtt is használható.



Gyakorló feladatsor

1. Feladat

Adott a következő adatbázis ER-diagramja:

feladat1_ER

Futtasd le a feladat1.sql-t, majd készítsd el a következő lekérdezéseket!

  1. Írd ki az összes alkalmazott nevét nagybetűkkel és a név hosszát!

  2. Add meg az alkalmazottak fizetéseit kerekítve százezresekre! (100000-es egység)

  3. Jelenítsd meg az alkalmazottak felvételi dátumát a következő formátumban: "2024. január 15."

  4. Számítsd ki, hogy az egyes alkalmazottak hány napja dolgoznak a cégnél! Az eredményt napok száma szerint csökkenő sorrendben írasd ki.

  5. Határozd meg az alkalmazottak életkorát és kategorizáld őket: "Fiatal" (30 alatt), "Középkorú" (30-45), "Idősebb" (45 fölött)! A lekérdezésben jelenítsd meg az alkalmazott nevét, szültési dátumát, életkorát és az életkor szerinti kategoriáját!

  6. Add meg osztályonként az alkalmazottak számát és az átlagfizetésüket!

  7. Mely osztályban a legmagasabb az átlagfizetés, és mennyi?

  8. Kategorizáld az alkalmazottakat fizetés alapján: "Junior" (260k alatt), "Mid" (260-340k), "Senior" (340k fölött)!

  9. Készíts egy "Jó napot, [NEV]! Ön a [VAROS] irodában dolgozik." formátumú üzenetet! Az összes alkalmazottnév és város legyen kisbetűs!

  10. Add meg osztályonként az összes projekt költségvetésének összegét és az egyedi projektek számát!

  11. Mutasd meg, mely projektek milyen hosszúak voltak (napok száma), és add meg a projekt nevének hosszát is! A lekérdezés jelenítse meg a projekt nevét, hosszát, a kezdés dátumát, a befejezés dátumát és a projekt hosszát napokban. Az adatok a projekt hosszának alapján csökkenő sorrendben jelenjenek meg.

  12. Add meg, hogy mely osztályban a legmagasabb a fizetési szórás (legmagasabb és legalacsonyabb közötti különbség), és mennyi! A lekérdezés jelenítse meg az osztályt, minimum és maximum fizetése, a szórást és hogy hány alkalmazott van az adott osztályon. Az adatok szórás szerint csökkenö sorrendben jelenjenek meg.

  13. Készíts egy "teljesítménybizonyítvány" jellegű listát, ahol az alkalmazottak státusza "Kiváló" (ha 5+ projektben dolgoztak), "Jó" (2-4 projekt), vagy "Fejlesztendő" (1-nél kevesebb)! A lista projektek száma alapján csökkenő sorrendben jelenítse meg az alkalmazott nevét és pozícióját, a projektek számát és az alkalmazott státuszát.

  14. Készítsd el az összes alkalmazott "felhasználónevét" az nevének első 3 betűje és a születési évének utolsó 2 száma alapján (név első 3 karaktere + születési év utolsó 2 számjegye)! Az egészet kisbetűkkel! A lekérdezésben adja meg az alkalmazott nevét, születési dátumát és a felhasználónevét.

  15. Készítsd el az összes alkalmazott "foglalkozási leírását" a következő formátumban: "[NEV] a [VAROS] irodában [POZICIO] pozícióban dolgozik és [FIZETES] Ft fizetést kap." Minden szövegrész legyen megfelelő formátumban (név/város kisbetűs)! Az adatokat az alkalmazottak neve alapján ábécé sorrendben jelenítse meg!