Skip navigation

Példák

Oktatói javaslat

Az alábbi példákat önálló tanulás és gyakorlati oktatás során ajánlatos saját számítógépen kipróbálni! Ez segíti a megértést és az elmélyülést a feladatban.

Az alábbi lekérdezéseket próbáljuk ki a PhpMyAdmin kezelőfelületén!

SQL szövegmező a PhpMyAdmin-ban
SQL szövegmező a PhpMyAdmin-ban

Relációs adatbázissémák

Az alábbi példák mind a TAXI adatbázisra vonatkoznak. A relációs adatbázissémák a következők:

CREATE TABLE IF NOT EXISTS `FUVAR` (
  `rendszam` varchar(8) COLLATE utf8_hungarian_ci NOT NULL,
  `indul` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `erkezik` timestamp NULL DEFAULT NULL,
  `km` int(4) DEFAULT NULL,
  `tarifa` int(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci;

CREATE TABLE IF NOT EXISTS `SOFOR` (
  `rendszam` varchar(8) COLLATE utf8_hungarian_ci NOT NULL,
  `nev` varchar(30) COLLATE utf8_hungarian_ci DEFAULT NULL,
  `szuldatum` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci;

CREATE TABLE IF NOT EXISTS `TARIFA` (
  `tarifakod` int(1) NOT NULL,
  `megnevezes` varchar(30) COLLATE utf8_hungarian_ci NOT NULL,
  `dij` int(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci;

A táblatartalmak lekérdezése

Kérdezzük le egyenként a táblák tartalmát!

A SOFOR tábla lekérdezése

SELECT * FROM SOFOR;

A FUVAR tábla lekérdezése

SELECT * FROM FUVAR;

A TARIFA tábla lekérdezése

SELECT * FROM TARIFA;

Sofőrök életkora

Kérdezzük le a sofőrök életkorát! Használjuk a MySQL dátum-idő függvényeit!

SELECT nev, YEAR( FROM_DAYS( DATEDIFF(CURRENT_DATE , SOFOR.szuldatum) ) ) AS eletkor FROM SOFOR;

Magyarázat:

  • A CURRENT_DATE rendszerváltozó az adatbázis-kezelő rendszer aktuális dátumát tartalmazza.
  • A DATEDIFF MySQL függvény két dátum különbségét adja vissza napokban.
  • A FROM_DAYS MySQL függvény dátumot készít a napok számából (vagyis átszámolja, hogy az hány évnek, hónapnak és napnak felel meg).
  • A YEAR() MySQL függvény egy dátumból kiveszi az évek számát.

Vagyis meghatározzuk a jelenlegi dátum és a sofőrök születési dátumának különbségét napokban. Ezen napok számából meghatározzuk, hogy az hány évnek, hónapnak és napnak felel meg, de csak az év fog bennünket érdekelni.

Vezetett távolságok

Kérdezzük le, hogy a sofőrök hány kilométert vezettek eddig! Az eredménytáblában listázzuk ki a sofőrök nevét és a vezetett kilométerek összegét!

SELECT nev, SUM(FUVAR.km) AS vezetett_km
FROM SOFOR, FUVAR
WHERE FUVAR.rendszam = SOFOR.rendszam
GROUP BY SOFOR.rendszam, SOFOR.nev;

Magyarázat:

  • A söfőrök adatai a SOFOR, a fuvar adatok pedig  a FUVAR táblában vannak. A két tábla között a táblákban lévő rendszámok teremtenek kapcsolatot. Emiatt össze kell kapcsolni a SOFOR és a FUVAR táblát.
  • Az összekapcsolt táblák eredményhalmazát csoportosítani kell rendszám és sofőrnév szerint. A rendszámot azért kell bevenni a csoportosításba, mert lehetnek azonos nevű sofőrök. A sofőrök nevét azért kell bevenni a csoportosításba, mert azt szeretnénk feltüntettni a lekérdezés eredményhalmazában.
  • A projekció során a név, az összesített km érték adatokra van csak szükségünk. Az összesített km értéket elnevezzük egy másodlagos néven, hogy az eredményhalmazban jobban mutasson.

Fuvarok viteldíja

Számoljuk ki az egyes fuvarok viteldíját! Az eredménylistában soroljuk fel a sofőr nevét, a fuvar indulási időpontját és viteldíját.

SELECT SOFOR.nev AS nev, FUVAR.indul, km * dij AS viteldij
FROM SOFOR, FUVAR, TARIFA
WHERE SOFOR.rendszam = FUVAR.rendszam AND FUVAR.tarifa = TARIFA.tarifakod;

Magyarázat:

  • Az egyes fuvarok viteldíjának kiszámolására mindhárom táblára szükség van. A SOFOR és FUVAR tábla között a rendszám, a FUVAR és TARIFA tábla között a tarifakod teremt kapcsolatot. Képezzük a három tábla természetes összekapcsolását!
  • Az összekapcsolás eredményhalmazából szükségünk van a sofőrök nevére, az indulás időpontjára, valamint a viteldíjra, amit km * díj kifejezéssel kapunk meg. A díj ugyanis csak a kilométerenkénti egységárat jelöli a TARIFA táblában. Ez utóbbi kifejezést elnevezzük egy másodlagos névvel, hogy az eredménytábla oszlopfejlécébe ne a kifejezés szerepeljen.