Aggregáló függvények – SQL

Aggregáló függvények – SQL

adatbázis

Aggregáló függvények - SQL

Adatbázis - SQL

Aggregáló függvények

Az aggregáló szó azt jelenti, hogy valami összegez, csoportosít vagy összefoglal adatokat. Az SQL aggregáló függvények olyan speciális függvények, amelyek egy adathalmaz értékeit egyetlen eredménybe sűrítik.

Például:

  • AVG: Kiszámolja az adathalmaz átlagát.
  • SUM: Összeadja az adathalmaz elemeit.
  • COUNT: Megszámolja az elemek számát.
  • MIN: Kiválasztja a legkisebb értéket.
  • MAX: Kiválasztja a legnagyobb értéket.

Az SQL aggregáló függvények segítségével a táblázatokból adatokat lehet összesíteni és különböző számításokat végezni. Ezeket gyakran használjuk statisztikai és riportkészítési feladatokhoz. Az alábbiakban részletezve bemutatom a legfontosabb függvényeket és azok használatát.

Aggregáló függvények:

 

  1. AVG (átlag): Egy oszlop értékeinek átlagát számítja ki.
    • Példa: SELECT AVG(fizetes) AS 'Átlagfizetés' FROM dolgozo;
  2. COUNT (darabszám): Az adott oszlop értékeinek számát adja vissza.
    • Példa: SELECT COUNT(*) AS 'Dolgozók száma' FROM dolgozo;
  3. MIN (legkisebb): Az oszlop legkisebb értékét adja vissza.
    • Példa: SELECT MIN(fizetes) AS 'Legalacsonyabb fizetés' FROM dolgozo;
  4. MAX (legnagyobb): Az oszlop legnagyobb értékét adja vissza.
    • Példa: SELECT MAX(fizetes) AS 'Legmagasabb fizetés' FROM dolgozo;
  5. SUM (összeg): Az oszlop értékeinek összegét számítja ki.
    • Példa: SELECT SUM(fizetes) AS 'Összes fizetés' FROM dolgozo;

Feladatok 

1. Mikor született a legfiatalabb dolgozó?
SELECT MAX(szuldat) AS 'Legfiatalabb születési dátum' FROM dolgozo;

 2. Hány női dolgozó van?
SELECT COUNT(*) AS 'Nők száma' FROM dolgozo WHERE nem = 'N';

3: Mekkora a dolgozók átlagos életkora?
SELECT AVG(YEAR(CURRENT_DATE()) - YEAR(szuldat)) AS 'Átlag életkor' FROM dolgozo;

Részletes bontás

  • YEAR(CURRENT_DATE()): Ez a rész kinyeri az aktuális év számát. Például, ha ma 2025. január 5-e van, akkor az eredmény 2025.

  • YEAR(szuldat): Ez a függvény az adott dolgozó születési dátumából (pl. 1985-07-20) csak az évet veszi ki. Ha az alkalmazott 1985-ben született, akkor az eredmény 1985.

  • YEAR(CURRENT_DATE()) - YEAR(szuldat): Ez a különbség megadja a dolgozó életkorát az aktuális év alapján. Például:

    • 2025 (aktuális év) - 1985 (születési év) = 40 év.
  • AVG(...): Az AVG függvény kiszámolja az összes dolgozó életkorának átlagát. Tehát összeadja az összes életkort, majd elosztja a dolgozók számával.

  • AS 'Átlag életkor': Ez csak egy alias, amely nevet ad az eredménynek, hogy az oszlop neve az eredménytáblában "Átlag életkor" legyen.

4. Listázd ki a legmagasabb fizetést
SELECT MAX(fizetes) AS 'legmagasabb fizetes' FROM dolgozo

5. Számold meg, hány alkalmazott van a cégnél
SELECT COUNT(*) AS 'dolgozok_szama' FROM dolgozo

6. Add meg a dolgozok összes fizetését
SELECT SUM(fizetes) AS 'Összes fizetés' FROM dolgozo;

7. Listázd ki a legidősebb dolgozó születési dátumát
SELECT MIN(szuldat) AS 'Legidősebb születési dátum' FROM dolgozo;

8. Számold meg, hány dolgozó van, akinek a fizetése 400000 vagy annál nagyobb
SELECT COUNT(*) AS 'dolgozok száma' FROM dolgozo WHERE fizetes >= 400000;

 

 

 

Többtáblás lekérdezések – SQL

Többtáblás lekérdezések – SQL

adatbázis

Többtáblás lekérdezések - SQL

Adatbázis - SQL

Lekérdezések - SQL

Az SQL-ben a többtáblás lekérdezések lehetővé teszik, hogy különböző táblák adatait kombináljuk és egységes eredményként jelenítsük meg. Ehhez az JOIN utasítást használjuk. Nézzük meg részletesen, hogyan működnek ezek a lekérdezések.

1. INNER JOIN – Csak az egyező sorok

Az INNER JOIN segítségével csak azok a sorok kerülnek be az eredménybe, amelyeknél a két tábla közötti feltétel teljesül.
Példa: SELECT dolgozo.*, osztaly.onev FROM dolgozo INNER JOIN osztaly ON dolgozo.oid = osztaly.oid WHERE varos = 'Veszprém';

  • dolgozo: Ez a dolgozók adatait tartalmazza.
  • osztaly: Ez a dolgozók osztályát tartalmazza.
  • ON dolgozo.oid = osztaly.oid: Ez a kapcsolódási feltétel (a dolgozó és az osztály kapcsolatát adja meg).
  • WHERE varos = 'Veszprém': Csak a veszprémi dolgozókat listázza ki.

 

Eredmény:

Az eredmény csak azokat a dolgozókat tartalmazza, akiknek van érvényes oid értékük mindkét táblában.

2. LEFT JOIN – Minden az első táblából, hiányzó értékekkel

A LEFT JOIN az első táblából (jelen esetben a dolgozo) minden rekordot megjelenít, akkor is, ha a második táblában (osztaly) nincs hozzá tartozó adat.

SELECT dolgozo.*, osztaly.onev FROM dolgozo LEFT JOIN osztaly ON dolgozo.oid = osztaly.oid WHERE varos = 'Veszprém';

Az eredmény tartalmazza mind a veszprémi dolgozókat, mind azokat, akiknek nincs osztályuk (az onev mezőjük NULL lesz).

 

3. RIGHT JOIN – Minden a második táblából

A RIGHT JOIN ritkábban használt, de fordított logikát követ: a második táblából minden rekordot megjelenít, akkor is, ha az első táblában nincs hozzá tartozó adat.

SELECT dolgozo.*, osztaly.onev FROM dolgozo RIGHT JOIN osztaly ON dolgozo.oid = osztaly.oid;

Magyarázat a példák alapján

  1. Kapcsolódó mezők: A dolgozo és az osztaly táblák az oid mezőn keresztül kapcsolódnak.
  2. Feltételek: A WHERE feltétel szűkíti az eredményt, például csak veszprémi dolgozókat mutat meg.
  3. NULL értékek: A LEFT JOIN esetében a második táblából hiányzó adatok helyett NULL érték jelenik meg.

Gyakorlatban

  • INNER JOIN: Használd, ha csak az egyező rekordokra van szükséged.
  • LEFT JOIN: Használd, ha az első tábla összes rekordjára szükséged van, de a második táblából csak a meglévő adatok érdekelnek.
  • RIGHT JOIN: Használd, ha fordított logikával dolgozol (ritkábban használt).

Feladatok

1. Listázd ki a veszprémi dolgozók nevét és osztálynevét
SELECT d.nev, o.onev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.varos = 'Veszprém';

Ez a lekérdezés egy többtáblás SQL lekérdezés, amely két táblát – dolgozo és osztaly – kapcsol össze az oid mezőn keresztül. Lássuk részletesen, miért van szükség a d.nev, o.onev, valamint a kapcsolás (ON d.oid = o.oid) megadására:

1. Miért kell d.nev és o.onev?

Amikor két vagy több táblát kapcsolsz össze, a lekérdezés során a mezők nevét egyértelműen meg kell határozni, hogy a rendszer tudja, melyik táblából hivatkozol az adott mezőre.

  • d.nev: Ez azt jelenti, hogy a nev mezőt a dolgozo táblából szeretnéd használni. Az alias (d) egy rövidítés, amelyet a dolgozo tábla azonosítására hoztál létre. Ha csak nev-et írnál, a rendszer nem tudná, hogy a nev mezőt a dolgozo vagy az osztaly táblából kéred (ha esetleg mindkét táblában van ilyen nevű mező).

  • o.onev: Ugyanígy, ez azt jelenti, hogy a onev mezőt az osztaly táblából szeretnéd használni. Az alias (o) itt is segít az osztaly tábla egyértelmű azonosításában.

Alias használat előnyei:

  • Rövidebb, áttekinthetőbb kódot írhatsz (pl. d helyett nem kell mindig dolgozo-t kiírni).
  • Egyértelművé teszi, hogy melyik táblából származik az adott mező.

2. Miért kell az ON d.oid = o.oid?

Ez a lekérdezés INNER JOIN típusú kapcsolást alkalmaz, ami azt jelenti, hogy csak azokat a sorokat adja vissza, amelyek mindkét táblában egyeznek a megadott feltétel szerint.

  • d.oid: A dolgozo táblában az oid mezőt használjuk az osztály azonosítására.
  • o.oid: Az osztaly táblában az oid mező az osztály azonosítója.

Az ON d.oid = o.oid feltétel azt mondja meg a rendszernek, hogy csak azokat a dolgozókat kapcsolja össze a megfelelő osztályokkal, ahol a két tábla oid értékei megegyeznek.

Kapcsolás nélkül: Ha az ON feltételt kihagynád, a rendszer nem tudná, hogyan kapcsolja össze a táblákat, és minden sor minden sorral párosítva jelenne meg (ezt cross join-nak hívjuk), ami hibás eredményt adna.

3. Mit csinál a teljes lekérdezés?

  1. A dolgozo tábla és az osztaly tábla oid mezője alapján összekapcsolódik.
  2. Csak azokat a dolgozókat listázza, akik Veszprémből származnak.
  3. A visszaadott eredmény tartalmazza:
    • A dolgozó nevét a dolgozo táblából (d.nev).
    • Az osztály nevét az osztaly táblából (o.onev).

2. feladat: Listázd ki csak azokat a dolgozókat, akik "Veszprém" városban dolgoznak, az osztály nevükkel együtt!

SELECT d.nev, d.fizetes, o.onev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.varos = 'Veszprém';

3. feladat: Listázd ki az összes osztályt és az ahhoz tartozó dolgozók számát!
SELECT o.onev, COUNT(d.szigszam) AS dolgozok_szama FROM osztaly o LEFT JOIN dolgozo d ON o.oid = d.oid GROUP BY o.onev;

Azért használtam itt LEFT JOIN-t, hogy kiadja azokat az értékeket is, ahol nincs hozzárendelve senki (pl egy olyan osztályt, ahol nincs alkalmazott)

4. feladat: Listázd ki azokat az osztályokat, amelyekhez még nem tartozik dolgozó!
SELECT o.onev FROM osztaly o LEFT JOIN dolgozo d ON o.oid = d.oid
WHERE d.oid IS NULL

5. feladat: Listázd ki a legmagasabb fizetéssel rendelkező dolgozót minden osztályban!

SELECT o.onev, d.nev, MAX(d.fizetes) AS max_fizetes FROM osztaly o INNER JOIN dolgozo d ON o.oid = d.oid GROUP BY o.onev;

6. feladat: Listázd ki a dolgozókat, akik ugyanazon az osztályon dolgoznak, mint Fehér Alajos

SELECT d.nev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.oid = ( SELECT oid FROM dolgozo WHERE nev = 'Fehér Alajos' ) AND d.nev != 'Fehér Alajos';

Részekre bontva: SELECT d.nev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid - a dolgozó táblából kilistázza a neveket és összekapcsolja az osztály táblával, így mindkét tábla értékei elérhetőek ebben a lekérdezésben

WHERE d.oid = ( SELECT oid FROM dolgozo WHERE nev = 'Fehér Alajos' )

  • Kiválasztja azokat a dolgozókat, akik ugyanahhoz az oid-hoz (osztályhoz) tartoznak, mint "Fehér Alajos".
  • Az allekérdezés (SELECT oid FROM dolgozo WHERE nev = 'Fehér Alajos') visszaadja az oid értékét, amely az "Fehér Alajos"-hoz tartozik.
  • A WHERE d.oid = (...) feltétel ezt az oid értéket használja, hogy megtalálja azokat a dolgozókat, akik ugyanabban az osztályban vannak, mint "Fehér Alajos".

    AND d.nev != 'Fehér Alajos'; - kizárja Fehér Alajost az eredmények közül. 

7. feladat: Listázd ki a dolgozók városait, de csak egyszer jelenjen meg minden város!

SELECT DISTINCT varos FROM dolgozo;

 8. feladat: Listázd ki azokat a dolgozókat, akiknek a fizetése meghaladja az osztályuk átlagfizetését!

SELECT d.nev, d.fizetes, o.onev FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid WHERE d.fizetes > ( SELECT AVG(d2.fizetes) FROM dolgozo d2 WHERE d2.oid = d.oid );

9. feladat: Listázd ki az osztályokat, amelyekben több mint 2 dolgozó van!

SELECT o.onev, COUNT(d.szigszam) AS dolgozok_szama FROM osztaly o INNER JOIN dolgozo d ON o.oid = d.oid GROUP BY o.onev HAVING COUNT(d.szigszam) > 2;

SQL lekérdezések

SQL lekérdezések

adatbázis

SELECT Lekérdezések - SQL

Adatbázis - SQL

Lekérdezések - SQL

Feladatok
(Az előző bejegyzésben készített adatbázist veszem alapul)

1. Listázd ki a dolgozók adatait név szerint csökkenő sorrendben
SELECT FROM dolgozo
ORDER BY dolgozo.nev DESC

2. Készíts egy lekérdezést, amely megjeleníti a dolgozó nevét, egy mezőben az irányítószámot és várost '-'-el elválasztva város néven, valamint az utca_hsz mezőt.
SELECT nev AS dolgozó_neve, CONCAT(irsz, '-', varos) AS város, utca_hsz FROM dolgozo;

  • nev AS dolgozó_neve:

    • A dolgozó neve (nev mező) jelenik meg egyértelmű címkével (dolgozó_neve).
  • CONCAT(irsz, '-', varos) AS város:

    • A CONCAT függvény összefűzi az irsz (irányítószám) és varos (város) mezőket, egy - karakterrel középen.
    • Az eredményt "város" néven aliasolja, hogy az oszlop neve egyértelmű legyen.
  • utca_hsz:

    • Az utca és házszámot tartalmazó mezőt közvetlenül jeleníti meg.
  • FROM dolgozo:

    • A dolgozo tábla az adatforrás.

3. Listázd ki, milyen városokból jönnek a dolgozók
SELECT DISTINCT varos AS városok FROM dolgozo;

  • SELECT DISTINCT:

    • Csak az egyedi városokat jeleníti meg, így egy város csak egyszer fog szerepelni az eredményben.
  • varos AS városok:

    • A varos mező értékeit "városok" néven jeleníti meg.
  • FROM dolgozo:

    • A dolgozo táblából kérdezi le az adatokat.

4. Listázd ki ABC sorrendben az első 5 dolgozót
SELECT nev FROM dolgozo ORDER BY nev ASC LIMIT 5;

  • SELECT nev:

    • Csak a nev (név) mezőt jeleníti meg az eredményben.
  • ORDER BY nev ASC:

    • A nev mező szerint rendezi az adatokat növekvő (ABC) sorrendben. Az ASC az alapértelmezett, de expliciten is megadható.
  • LIMIT 5:

    • Csak az első 5 rekordot adja vissza az eredményben.

5. Listázd ki ABC sorrendben az 5-7. dolgozót
SELECT nev FROM dolgozo ORDER BY nev ASC LIMIT 3 OFFSET 4;

  • SELECT nev:

    • Csak a nev (név) mezőt jeleníti meg az eredményben.
  • ORDER BY nev ASC:

    • A nev mező szerint rendezi az adatokat növekvő (ABC) sorrendben.
  • LIMIT 3:

    • Csak 3 rekordot ad vissza, mert az 5., 6. és 7. dolgozót szeretnénk látni.
  • OFFSET 4:

    • Kihagyja az első 4 rekordot (az 1-4. dolgozót).

6. Listázd ki az 5 legjobban kereső alkalmazott adatait

SELECT nev, fizetes, szigszam, varos, utca_hsz FROM dolgozo ORDER BY fizetes DESC LIMIT 5;

  • SELECT nev, fizetes, szigszam, varos, utca_hsz:

    • Csak azokat az oszlopokat jeleníti meg, amelyekre szükséged van: név, fizetés, személyi szám (szigszam), város, utca és házszám.
  • ORDER BY fizetes DESC:

    • A dolgozókat a fizetes (fizetés) mező szerint rendezi csökkenő sorrendben (DESC).
  • LIMIT 5:

    • Az eredményhalmazból csak az első 5 rekordot jeleníti meg, azaz a legjobban kereső 5 dolgozót.

7. Listázd ki a veszprémi vagy ajkai férfi alkalmazottak nevét, fizetését
SELECT nev, fizetes FROM dolgozo WHERE (varos = 'Veszprém' OR varos = 'Ajka') AND nem = 'F';    vagy
SELECT nev, fizetes FROM dolgozo WHERE varos IN ('Veszprém', 'Ajka') AND nem = 'F';

  • SELECT nev, fizetes:

    • Csak a nev (név) és a fizetes (fizetés) oszlopokat jeleníti meg.
  • WHERE (varos = 'Veszprém' OR varos = 'Ajka'):

    • A varos mezőt szűri úgy, hogy csak azok a rekordok jelenjenek meg, ahol a város "Veszprém" vagy "Ajka".
  • AND nem = 'F':

    • További feltételként a nem mezőt szűri, hogy csak a férfi alkalmazottakat ('F') vegye figyelembe.

 

 

Fontosabb utasítások – SQL

Fontosabb utasítások – SQL

adatbázis

Fontosabb utasítások - SQL

Adatbázis - SQL

Fontosabb utasítások

Utasítások:

SELECT [DISTINCT / ALL] – Mit kérdezel le?

  • DISTINCT: Csak egyedi értékeket szeretnél az eredményben.
  • ALL: Minden értéket megjelenít, még az ismétlődőket is (ez az alapértelmezett).
    Példa: SELECT DISTINCT nev FROM dolgozo; - az összes egyedi nevet adja vissza a dolgozo táblából
    SELECT ALL város FROM dolgozó; - minden várost visszaad, az ismétlésekkel együtt

{* / [mezőlista [AS alias]]} - melyik mezőket kérdezed le?

  • * (csillag): Minden mezőt lekér a táblából.
    Példa: SELECT * FROM dolgozó; → A dolgozó tábla összes adata megjelenik.
  • Mezőlista: Csak bizonyos mezőket (oszlopokat) kérünk le.
    Példa: SELECT nev, fizetes FROM dolgozó; → Csak a nevek és fizetések jelennek meg.
  • AS alias: A mezők vagy táblák nevéhez egyedi megjelenítési nevet (alias) rendelhetünk.
    Példa: SELECT nev AS dolgozo_neve FROM dolgozó; → A nev mező helyett dolgozo_neve lesz látható.

[WHERE feltétel] – Milyen feltétel alapján szűrünk?

  • Szűri az adatokat, csak a feltételnek megfelelő rekordokat adja vissza.
    Példa: SELECT nev, fizetes FROM dolgozo WHERE fizetes > 300000;
    Ez csak azokat a dolgozókat mutatja, akiknek a fizetése 300.000 felett van.

FROM tábla [[AS] alias] – Honnan jönnek az adatok?

    • FROM: Meghatározza, melyik táblából kérdezed le az adatokat.
    • [AS alias]: A táblának adhatunk rövidebb nevet a lekérdezéshez.
    • Példa: SELECT d.nev FROM dolgozo AS d;
      Itt a dolgozo tábla rövid neve d, így rövidebb lesz az utasítás.

[GROUP BY mezőlista] – Hogyan csoportosítasz?

  • Az eredményeket megadott oszlopok szerint csoportosítja, pl. osztályok szerint.
    Példa: SELECT osztaly_id, AVG(fizetes) AS ÁtlagFizetés FROM dolgozo GROUP BY osztaly_id;
    Ez az osztályok átlagfizetését adja meg.

[HAVING feltétel] – Milyen feltételeket alkalmazol a csoportokra?

  • A csoportosított eredmények szűrésére használod (a WHERE a rekordokra vonatkozik, a HAVING pedig a csoportokra).
    Példa: SELECT osztaly_id, AVG(fizetes) AS ÁtlagFizetés FROM dolgozo GROUP BY osztaly_id HAVING ÁtlagFizetés > 400000;
    Csak azok az osztályok jelennek meg, ahol az átlagfizetés meghaladja a 400.000-et.

[ORDER BY mezőlista] – Hogyan rendezed az eredményt?

  • Rendezheted az adatokat egy vagy több oszlop szerint, növekvő (ASC) vagy csökkenő (DESC) sorrendben.
    Példa: SELECT nev, fizetes FROM dolgozo ORDER BY fizetes DESC;
    Ez a dolgozókat a fizetésük szerint csökkenő sorrendben rendezi.

 Összefoglalva:
SELECT DISTINCT nev, fizetes
FROM dolgozo
WHERE fizetes > 300000
GROUP BY osztaly_id
HAVING AVG(fizetes) > 400000
ORDER BY fizetes DESC;

Ez az utasítás megadja a dolgozók neveit és fizetéseit, szűri a 300.000 feletti fizetéseket, csoportosít osztály szerint, csak a 400.000 feletti átlaggal rendelkező osztályokat jeleníti meg, és csökkenő sorrendben rendezi a fizetéseket.

Adatbázis létrehozása

Adatbázis létrehozása

adatbázis

Adatbázis létrehozása

Adatbázis - SQL

Adatbázis létrehozása

Ha elindítottad a XAMPP-ot, a http://localhost/phpmyadmin oldalon lépj az Új gombra.
Adj címet az adatbázisnak, állítsd át magyarra és hozd létre

új adatbázis létrehozása

Ha kész, az adatokat az importálással tudod behívni az adatbázisba. Importálás után az adatok megjelennek

importálás után SQL

Új táblát is lehet készíteni. 9 mezőt fogunk létrehozni: szigszam, nev, fizetes, szuldat, nem, irsz, varos, utca_hsz és oid mezőnevekkel.
Feladat: 
1. tábla - Osztaly
oid - egész szám, automatikus számozásű, elsődleges kulcs
onev - max. 20 karakter hosszúságú szöveges típusú adat, kötelező kitöltésű

2. tábla - Dolgozó
szigszam - 8 karakteres hosszúságú szöveg, kötelező kitöltésű
fizetes - szám, legalább 150000
szuldat - dátum
nem - fix 1 karakter hosszúságú szöveg, értéke lehet F vagy N
irsz - szám, 1000 és 9999 között, alapértelmezett értéke 8200
varos - max. 30 karakteres szöveg, alapértelmezett értéke Veszprém, kötelező kitöltésű
utca_hsz - max. 50 karakter hosszúságú szöveg
oid - szám, idegen kulcs (osztály oid-ből jön)

Jelöld ki az alkalmazottakat, majd ezen belül hozzuk létre az "osztaly" táblát két mezővel

oid - egész szám, automatikus számozásű, elsődleges kulcs

Az első mező neve oid, típusa INT (integer), amely egész számot tárol. 
Auto Increment (AI) - minden új rekordnál automatikusan növekvő értéket kap. 
Elsődleges kulcs: az Index mezőt át kell állítani Primary-ra, majd mentés gomb

Elsődleges kulcs beállítása

Ellenőrzés: a táblák listájában kattints az "osztaly" táblára. Menj a Szerkezet fülre és nézd meg, hogy az oid Primary Key szerepet kapott-e. Ha mindent helyesen állítottál be, az elsődleges kulcs mellett egy kulcs ikon látható. 

oid mező

Következő mező: onev. Max. 20 karakter hosszúságú, szöveges típusú adat, kötelező kitöltésű

onev beállítása - SQL1

Típusa VARCHAR. Ez egy olyan típusú mező, ami szöveges adatokat tárol, melynek hossza változó, vagyis nem foglal el fix helyet az adatbázisban. Például, ha a mező hossza 20-ra van állítva (VARCHAR(20)), akkor legfeljebb 20 karakter hosszúságú szöveget tárolhat, de ha kevesebb adat kerül bele, az csak a tényleges adathosszúságot foglalja el. 
A CHAR mindig fix hosszúságú, ha 20 karakterre állítjuk be, akkor 20 karakter helyet foglal, akkor is, ha csak 5 karakter kerül bele.
Nulla érték nincs kipipálva, tehát kötelező kitöltésű lesz. 

CREATE TABLE `alkalmazott`.`osztaly` (`oid` INT NOT NULL AUTO_INCREMENT , `onev` VARCHAR(20) NOT NULL , PRIMARY KEY (`oid`)) ENGINE = InnoDB;

 

Jöhet a "dolgozo" tábla, 9 mezővel

Ezt SQL-ben készítjük most el: 
CREATE TABLE `alkalmazott`.`dolgozo` (
szigszam CHAR(8) NOT NULL PRIMARY KEY,
nev VARCHAR(40) NOT NULL,
fizetes INT CHECK (fizetes >= 150000),
szuldat DATE,
nem CHAR(1) CHECK (nem IN ('F', 'N')),
irsz INT DEFAULT 8200 CHECK (irsz BETWEEN 1000 AND 9999),
varos VARCHAR(30) NOT NULL DEFAULT 'Veszprém',
utca_hsz VARCHAR(50),
oid INT,
FOREIGN KEY (oid) REFERENCES osztaly(oid)
) ENGINE=InnoDB;

Magyarázat: 

  • szigszam: Fixen 8 karakter hosszúságú szöveg, kötelező kitöltésű (NOT NULL), ez lesz a tábla elsődleges kulcsa (PRIMARY KEY).
  • nev: Változó hosszúságú szöveges mező (VARCHAR), maximum 40 karakter hosszú, kötelezően kitöltendő (NOT NULL).
  • fizetes: Szám típusú mező (INT), amelynek értéke legalább 150000. Ehhez CHECK feltételt használunk, amely az értéket ellenőrzi.
  • szuldat: Dátum típusú mező (DATE), nem kötelező kitöltésű.
  • nem: Fix hosszúságú szöveges mező (CHAR(1)), amelynek értékei kizárólag F (férfi) vagy N (nő) lehetnek. A megkötést szintén CHECK feltétellel adjuk meg.
  • irsz: Szám típusú mező (INT), amely 1000 és 9999 közötti értékeket fogad el. Az alapértelmezett érték (DEFAULT) 8200.
  • varos: Változó hosszúságú szöveges mező (VARCHAR), maximum 30 karakter hosszúságú. Alapértelmezett értéke Veszprém, és kötelezően kitöltendő.
  • utca_hsz: Változó hosszúságú szöveges mező (VARCHAR), maximum 50 karakter hosszúságú.
  • oid: Szám típusú mező (INT), amely az osztaly tábla oid mezőjére hivatkozik. Ezt idegen kulcsként (FOREIGN KEY) állítjuk be.

CHECK

  • Szabály: A CHECK egy olyan feltétel, amely biztosítja, hogy az adott mező értéke megfeleljen bizonyos követelményeknek.
  • Felhasználás:
    • A fizetes mezőnél ellenőrizzük, hogy az érték legalább 150000 legyen: CHECK (fizetes >= 150000).
    • A nem mezőnél korlátozzuk az értéket F (férfi) és N (nő) lehetőségekre: CHECK (nem IN ('F', 'N')).
    • Az irsz mezőnél biztosítjuk, hogy az érték 1000 és 9999 között legyen, ami megfelel egy magyar irányítószám tartománynak.

DEFAULT

  • Szabály: A DEFAULT kulcsszóval megadható egy alapértelmezett érték arra az esetre, ha a mezőhöz nem adnak meg adatot.
  • Felhasználás:
    • Az irsz mező alapértelmezett értéke 8200, ha nem adnak meg más értéket.
    • A varos mező alapértelmezett értéke Veszprém, ha nincs más város megadva.

ENGINE=InnoDB

    • Szabály: Az ENGINE kulcsszó határozza meg, hogy az adott táblához melyik adattárolási motort használja a MySQL.
    • Felhasználás:
      • Az InnoDB az egyik legelterjedtebb MySQL adattárolási motor, amely támogatja a tranzakciókat, az idegen kulcsokat (FOREIGN KEY), és a hibatűrő működést.
      • Előnyei:
        • Tranzakciók támogatása: Ha egy adatbeviteli művelet félbeszakad, a rendszer vissza tudja állítani az eredeti állapotot.
        • Adat-integritás: Támogatja az idegen kulcsokkal való kapcsolatokat, amelyek megakadályozzák a nem létező hivatkozásokat.
        • Teljesítmény: Nagyobb adatbázisoknál jobb teljesítményt nyújt az adatok indexelése és kezelése révén.

Most pedig töltsük fel adatokkal az adatbázist. Most csak kevés adatot viszünk be, ezt manuálisan tesszük meg ennél a feladatnál. Lépj először az osztaly táblára, töltsd ki, majd a  dolgozó táblára. A sorrend fontos, mert az idegen kulcsot ki kell választani. A beszúrásból tudod bevinni manuálisan az adatokat. 

Adatok felvitele
XAMPP telepítése lépésről-lépésre

XAMPP telepítése lépésről-lépésre

adatbázis

XAMPP telepítése lépésről-lépésre

Adatbázis - SQL

XAMPP telepítése

XAMPP telepítése és használata

❓ Mi az a XAMPP, és miért érdemes használni?

✅ A XAMPP egy ingyenes és egyszerűen telepíthető lokális szervercsomag, amely tartalmazza az Apache webszervert, a MySQL/MariaDB adatbázis-kezelőt és a PHP futtatókörnyezetet. Ezzel az eszközzel beállíthatsz egy teljes fejlesztői környezetet saját gépeden. 
🔹 Használható webfejlesztéshez, WordPress telepítéshez, SQL tanuláshoz, vagy akár PHP-szkriptek tesztelésére.

❓ Hogyan telepíthetem a XAMPP-et Windows, macOS vagy Linux rendszeren?

1️⃣ Töltsd le a legfrissebb verziót az Apache Friends hivatalos oldaláról.
2️⃣ Futtasd a telepítőt, és válaszd ki a szükséges komponenseket (pl. Apache, MySQL, PHPMyAdmin).
3️⃣ Válaszd ki a telepítési helyet, majd fejezd be a folyamatot.
4️⃣ Nyisd meg a XAMPP Control Panelt, és indítsd el az Apache és MySQL szolgáltatásokat.

🔹 TIPP: Ha Windows rendszeren telepítesz, érdemes rendszergazdaként futtatni a telepítőt!

xampp-telepites-windows

Ilyen a kezdőfelülete

PHPMyAdmin felülete

❓ Miért nem indul el az Apache vagy a MySQL a XAMPP-ben?

🔴 Gyakori problémák és megoldások:
✅ Portütközés (Port 80 vagy 3306 foglalt) → Zárd be a Skype-ot vagy IIS-t, vagy állítsd át a XAMPP beállításokban az Apache és MySQL portját.
✅ Tűzfal blokkolja → Engedélyezd az Apache és MySQL számára a hozzáférést a Windows vagy macOS tűzfalán.
✅ Másik alkalmazás használja a portot → Nyisd meg a XAMPP Control Panelt, kattints a Netstat gombra, és nézd meg, mely alkalmazások használják a 80-as vagy 3306-os portot.

❓ Hogyan lehet elérni a MySQL adatbázist a XAMPP-ben?

1️⃣ Indítsd el a XAMPP Control Panelben az Apache és MySQL szolgáltatásokat.
2️⃣ Nyisd meg a böngészőt, és írd be a következőt:
🔹 http://localhost/phpmyadmin
3️⃣ Itt kezelheted az adatbázisokat, létrehozhatsz új táblákat, importálhatsz/exportálhatsz adatokat.

❓ Milyen alternatívák léteznek a XAMPP helyett?

🔹 WAMP – Kifejezetten Windows-ra optimalizált szervercsomag.
🔹 MAMP – Mac-felhasználóknak készült, de Windows-verziója is van.
🔹 Laragon – Könnyebb, gyorsabb, modern alternatíva Windowsra.
🔹 Docker – Ha fejlettebb virtualizált megoldásra van szükséged.

❓ Hogyan lehet teljesen eltávolítani a XAMPP-et?

1️⃣ Állítsd le a XAMPP Control Panelben az összes szolgáltatást.
2️⃣ Töröld a XAMPP mappát (alapértelmezett: C:\xampp vagy /Applications/XAMPP).
3️⃣ Ha Windows-t használsz, nyisd meg a Szolgáltatáskezelőt (services.msc), és töröld a XAMPP-hez kapcsolódó szolgáltatásokat.
4️⃣ Töröld a MySQL és Apache beállításfájlokat a C:\ProgramData\ könyvtárból.

Ha telepítetted, folytasd tovább az adatbázis létrehozásával!