Vezérlőpult
7e. Függvények · Lekérdezések — SELECT

3. blokk · Lekérdezések — SELECT · 7e. témakör

Függvények

A 7a-ban már számoltunk oszlopokkal, a 7b-ben aggregáltunk — most megismerjük a skalárfüggvényeket: szöveg-, szám-, dátum- és feltételes függvényeket, amelyek soronként alakítják az értékeket. Címkék összefűzése, kerekítés, dátumszámítás, feltételtől függő érték — végig élőben kipróbálhatóan.

Élő SQL-gyakorló11 kvízkérdés9 feladatWebshop-séma

Tanulási célok

1Mik a függvények?

A függvény egy beépített művelet, amely a bemenetéből egy értéket számol ki. Két nagy család van, és fontos nem összekeverni őket:

SkalárfüggvényAggregáló függvény (7b)
Miből számol?Egy sor értékeibőlSok sor értékeiből
Mit ad?Soronként egy-egy értéketAz egész halmazra egyetlen értéket
PéldaUPPER(nev), ROUND(ar)COUNT(*), AVG(ar)

Ebben a témakörben a skalárfüggvényeket vesszük sorra négy csoportban: szöveg, szám, dátum és feltételes. Bárhol használhatók, ahol kifejezés állhat — a SELECT-listában, a WHERE-ben, az ORDER BY-ban is.

2Szövegfüggvények

FüggvényMit csinálPélda → eredmény
CONCAT(a, b, ...)Összefűzés (7a-ból ismerős)CONCAT('Ár: ', 6990) → Ár: 6990
UPPER() / LOWER()Csupa nagy- / kisbetűssé alakítUPPER('egér') → EGÉR
CHAR_LENGTH()Hossz karakterbenCHAR_LENGTH('árvíz') → 5
LENGTH()Hossz bájtbanLENGTH('árvíz') → 7
SUBSTRING(s, kezdet, hossz)Részszöveg — 1-től indexel!SUBSTRING('Monitor', 1, 3) → Mon
TRIM()Szóközök levágása elölről-hátulrólTRIM(' hé ') → hé
REPLACE(s, mit, mire)Csere a szövegbenREPLACE('a-b', '-', '+') → a+b
LEFT(s, n) / RIGHT(s, n)Az első / utolsó n karakterLEFT('Monitor', 3) → Mon
-- Nagybetűs név és a név eleje:
SELECT nev, UPPER(nev) AS nagybetus, SUBSTRING(nev, 1, 7) AS eleje
FROM termek;
ℹ️ KARAKTER VAGY BÁJT?

Az ékezetes betűk UTF-8-ban 2 bájtot foglalnak, ezért CHAR_LENGTH('árvíz') = 5, de LENGTH('árvíz') = 7. Ha a szöveg hossza érdekel, szinte mindig a CHAR_LENGTH kell.

⚠️ CONCAT + NULL = NULL

Ha a CONCAT bármelyik tagja NULL, az egész eredmény NULL lesz! Megoldás: burkold a bizonytalan tagot IFNULL-ba (5. szakasz), vagy használd a CONCAT_WS(elválasztó, a, b, ...) változatot, amely a NULL tagokat egyszerűen kihagyja.

3Számfüggvények

A kerekítőket (ROUND, CEIL, FLOOR, TRUNCATE) a 7b témakörben már megismertük — itt a többi gyakori számfüggvény:

FüggvényMit csinálPélda → eredmény
ABS(x)Abszolút értékABS(-5) → 5
MOD(a, b)Osztási maradék (ugyanaz, mint az a % b — a gyakorlóban ez utóbbit használd)MOD(10, 3) → 1
POWER(a, b)HatványozásPOWER(2, 10) → 1024
SQRT(x)NégyzetgyökSQRT(144) → 12
-- 15% kedvezményes ár, egészre kerekítve:
SELECT nev, ar, ROUND(ar * 0.85) AS akcios_ar
FROM termek;

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

FüggvényMit csinálPélda → eredmény
NOW()Aktuális dátum és idő2026-09-06 14:30:00
CURDATE() / CURTIME()Csak a mai dátum / csak az idő2026-09-06 / 14:30:00
YEAR() · MONTH() · DAY()A dátum egy-egy részeYEAR('2026-09-06') → 2026
DATEDIFF(d1, d2)A két dátum különbsége napokban (d1 − d2)DATEDIFF('2026-03-10', '2026-03-01') → 9
DATE_ADD / DATE_SUBDátumhoz ad / kivon (INTERVAL)DATE_ADD('2026-03-01', INTERVAL 30 DAY) → 2026-03-31
DATE_FORMAT(d, minta)Dátum formázása szöveggéDATE_FORMAT(NOW(), '%Y. %m. %d.') → 2026. 09. 06.
-- Hány napja regisztráltak a vásárlók?
SELECT vezeteknev,
       regisztracio_datuma,
       DATEDIFF(CURDATE(), regisztracio_datuma) AS eltelt_nap
FROM vasarlo;

-- 30 napos garancia lejárata:
SELECT DATE_ADD(CURDATE(), INTERVAL 30 DAY) AS garancia_vege;
✅ A DATE_FORMAT FŐ JELÖLŐI

%Y = négyjegyű év, %m = hónap (01–12), %d = nap (01–31), %H = óra (00–23), %i = perc. Magyar formátum: DATE_FORMAT(d, '%Y. %m. %d.').

5Feltételes függvények — IF, CASE, IFNULL, COALESCE

IF — egyszerű kétirányú döntés

-- Van-e készleten?
SELECT nev, IF(keszlet > 0, 'van készlet', 'elfogyott') AS allapot
FROM termek;

CASE — több ág, olvashatóan

-- Árkategóriába sorolás:
SELECT nev, ar,
       CASE
         WHEN ar < 10000  THEN 'olcsó'
         WHEN ar < 100000 THEN 'közepes'
         ELSE 'drága'
       END AS arkategoria
FROM termek;

A CASE felülről lefelé megy: az első igaz feltétel ága nyer; ha egyik sem igaz, az ELSE (enélkül NULL). A CASE szabványos SQL — az IF() a MySQL rövidebb írásmódja két ágra.

IFNULL és COALESCE — a NULL kezelése

-- Ha nincs kategória, 0-t mutatunk helyette:
SELECT nev, IFNULL(kategoria_id, 0) AS kategoria
FROM termek;

-- COALESCE: az ELSŐ nem-NULL értéket adja a felsoroltak közül:
SELECT COALESCE(NULL, NULL, 'harmadik') AS ertek;
✅ MELYIKET MIKOR?

IFNULL(x, pot): egy érték + egy pótérték. COALESCE(a, b, c, ...): akárhány jelölt, az első nem-NULL nyer — ez ráadásul szabványos SQL, minden rendszerben működik.

6Élő SQL-gyakorló

Próbáld ki a függvényeket a webshopon! A seedben most van egy kategória nélküli termék is (Ajándékutalvány) — az IFNULL/COALESCE rajta mutatja meg magát.

SQL-gyakorló — függvények

SQL-motor betöltése…
⚠️ A GYAKORLÓ KORLÁTAI — FONTOS

A motor SQLite-alapú. Itt működik: CONCAT, UPPER/LOWER, SUBSTRING, TRIM, REPLACE, LENGTH, ROUND/CEIL/FLOOR, ABS, POWER, SQRT, a % (maradék), CASE, IFNULL, COALESCE. Csak éles MySQL-en fut (a gyakorló jelzi): a dátumfüggvények (NOW, CURDATE, DATEDIFF, DATE_ADD, DATE_FORMAT…), az IF(), a CHAR_LENGTH, a LEFT/RIGHT, a MOD() (itt: %) és a TRUNCATE. Két apró eltérés: a gyakorló LENGTH-e karakterben számol (mint MySQL-ben a CHAR_LENGTH), az UPPER/LOWER pedig az ékezetes betűket nem váltja át — éles MySQL-en igen. (Internetkapcsolat szükséges a motorhoz.)

7Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — a kódírós feladatokat futtasd is le a fenti élő gyakorlóban!

7e.1⭐

Melyik függvénnyel alakítod a szöveget csupa nagybetűssé?

7e.2⭐

Mi a különbség a CHAR_LENGTH és a LENGTH között? Mikor tér el a kettő?

7e.3⭐⭐

Mit ad vissza ez a kifejezés? Előbb gondold végig, aztán futtasd le!

SELECT SUBSTRING('Billentyűzet', 1, 6);
7e.4⭐⭐

Miért lesz az alábbi eredménye NULL, és hogyan javítanád kétféleképpen?

SELECT CONCAT('Kategória: ', NULL);
7e.5⭐⭐

Mit ír ki soronként ez a lekérdezés a Webkamera HD-re (keszlet = 0)?

SELECT nev, IF(keszlet > 0, 'van', 'nincs') FROM termek;
7e.6⭐

Kódírás: írd ki minden termék nevét nagybetűsen és a nevének hosszát karakterben! (A gyakorlóban a hosszra a LENGTH-et használd; éles MySQL-en a CHAR_LENGTH a pontos.)

7e.7⭐⭐

Kódírás: sorold a termékeket árkategóriákba CASE-zel: 10 000 alatt „olcsó", 100 000 alatt „közepes", fölötte „drága"!

7e.8⭐⭐⭐

Kódírás: írj lekérdezést, amely minden termékhez kiírja a 15% kedvezményes, egészre kerekített árat, és a kategória-azonosító helyén 0-t mutat, ha nincs kategória (Ajándékutalvány)!

7e.9⭐⭐⭐

Éles MySQL-re (Workbench): írd ki a mai dátumot ÉÉÉÉ. hh. nn. formátumban, és számold ki DATEDIFF-fel, hány napja regisztrált Nagy Anna (2026-01-12)!

8Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

9Fogalomtár

FogalomJelentés
skalárfüggvénysoronként egy értékből egy értéket számol (≠ aggregáló)
CONCAT · CONCAT_WSösszefűzés — NULL taggal az egész NULL; a CONCAT_WS kihagyja a NULL-okat
UPPER · LOWERnagy-/kisbetűssé alakítás (csak az eredményben)
CHAR_LENGTH · LENGTHhossz karakterben · bájtban — ékezetnél eltér
SUBSTRING(s, kezdet, hossz)részszöveg — 1-től indexel
TRIM · REPLACE · LEFT · RIGHTszóközvágás · csere · első/utolsó n karakter
ABS · MOD (%) · POWER · SQRTabszolút érték · maradék · hatvány · gyök (kerekítés: 7b)
NOW · CURDATE · CURTIMEaktuális dátum+idő · csak dátum · csak idő
YEAR · MONTH · DAYa dátum részei
DATEDIFF · DATE_ADD (INTERVAL)különbség napokban · dátumhoz adás/kivonás
DATE_FORMATdátum formázása: %Y év, %m hónap, %d nap, %H:%i idő
IF · CASE WHENfeltételtől függő érték — az IF két ág (MySQL), a CASE több ág (szabványos)
IFNULL · COALESCEpótérték NULL helyett · az első nem-NULL a felsoroltakból

10Összegzés

  1. A skalárfüggvény soronként számol egy értéket — az aggregáló (7b) sok sorból egyet.
  2. Szöveg: CONCAT (NULL taggal NULL!), UPPER/LOWER, SUBSTRING (1-től), TRIM, REPLACE; hossz: CHAR_LENGTH (karakter) vs LENGTH (bájt).
  3. Szám: ABS, MOD (a % operátorral azonos), POWER, SQRT — a kerekítők a 7b-ből.
  4. Dátum: NOW/CURDATE, DATEDIFF (napokban), DATE_ADD ... INTERVAL, DATE_FORMAT.
  5. Feltételes: IF (két ág), CASE WHEN (több ág, szabványos); NULL-pótlás: IFNULL / COALESCE.