[[oktatas:adatbázis-kezelés|< Adatbázis-kezelés]]
====== Adatbázis példa ======
* **Szerző:** Sallai András
* Copyright (c) 2018, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Adatbázis létrehozása =====
CREATE DATABASE kek
CHARACTER SET utf8
COLLATE utf8_hungarian_ci
===== Egyetlen tábla =====
{{:oktatas:adatbázis-kezelés:kek_000.png|}}
Tábla létrehozása:
create table dolgozok (
az int not null primary key auto_increment,
nev varchar(100),
telepules varchar(100),
fizetes double,
szuletes date,
belepes date);
Adat beszúrása:
INSERT INTO `dolgozok` (`az`, `nev`, `telepules`, `fizetes`, `szuletes`, `belepes`) VALUES
(1, 'Nagy János', 'Szolnok', 958000, '1972-03-25', '1998-07-01'),
(2, 'Erős István', 'Miskolc', 724000, '1982-01-01', '2001-05-01'),
(3, 'Kör László', 'Szolnok', 502000, '1991-08-13', '2015-10-01'),
(4, 'Forma Gábor', 'Miskolc', 575000, '1992-11-22', '2008-09-01'),
(5, 'Aranyos Katalin', 'Szeged', 912000, '1979-04-12', '2011-02-01'),
(6, 'Pár Beáta', 'Debrecen', 891500, '1983-08-22', '2009-05-01'),
(7, 'Langyos Béla', 'Szolnok', 817200, '1981-12-14', '2013-03-01'),
(8, 'Bő Mária', 'Szolnok', 911000, '1978-03-25', '2007-02-01');
A fizetések összegzése:
select sum(fizetes) as "összes fizetés" from dolgozok
A fizetések átlaga:
select avg(fizetes) as "átlagfizetés" from dolgozok
A legnagyobb fizetés:
select max(fizetes) as "legnagyobb fizetés" from dolgozok
A legkisebb fizetés:
select min(fizetes) as "legkisebb fizetés" from dolgozok
Jelenítse meg a Miskolci dolgozók születési éveit:
select year(szuletes)
from dolgozok
where telepules="Miskolc"
Jelenítsük meg azon dolgozók neveit és fizetésüket,
akiknek a fizetése több mint 800000, idősebbek 30 évnél:
select nev, fizetes, szuletes
from dolgozok
where fizetes > 800000
and (year(now())-year(szuletes)) > 30
Hány olyan dolgozó van 30 évesnél idősebb dolgozó van,
akinek a fizetése több mint 900000?
select count(*)
from dolgozok
where fizetes > 900000
and (year(now())-year(szuletes)) > 30
===== Egyszerű eset =====
Egy dolgozó több projektben vehet részt. De egy projektet csak egy dolgozó csinálhat.
{{:oktatas:adatbázis-kezelés:kek_001.png|}}
create database sargaKft;
use sargaKft
create table dolgozok (
az int not null private key auto_increment,
nev varchar(100));
create table projektek (
az int not null private key auto_increment,
nev varchar(100),
constraint fk_projektek
foreign key(dolgozoAz)
references dolgozok(az);
Hány projektjük van a dolgozóknak?
MariaDB [kek]> select distinct dolgozok.nev,
(select count(*) from projektek where dolgozok.az = projektek.dolgozoAz)
as projektek
from dolgozok inner join projektek
on dolgozok.az = projektek.dolgozoAz;
+------------------+-----------+
| nev | projektek |
+------------------+-----------+
| Vonalas László | 2 |
| Kerek Béla | 1 |
+------------------+-----------+
3 rows in set (0.00 sec)
MariaDB [kek]>
Ha left join-t használunk, akkor azt is láthatjuk akinek nincs projektjük:
MariaDB [kek]> select distinct dolgozok.nev,
(select count(*) from projektek
where dolgozok.az = projektek.dolgozoAz) as projektek
from dolgozok left join projektek
on dolgozok.az = projektek.dolgozoAz;
+------------------+-----------+
| nev | projektek |
+------------------+-----------+
| Nagy János | 0 |
| Vonalas László | 2 |
| Kerek Béla | 1 |
+------------------+-----------+
4 rows in set (0.00 sec)
MariaDB [kek]>
===== Összetett eset =====
Egy dolgozó több projektben vehet részt.
Egy projekt több dolgozóhoz is tartozhat.
{{:oktatas:adatbázis-kezelés:kek_002.png|}}
create table dolgozok (
az int not null primary key auto_increment,
nev varchar(100),
telepules varchar(100));
create table projektek (
az int not null primary key auto_increment,
nev varchar(100));
create table dolgozokProjektek (
dolgozoAz int,
projektAz int);
alter table dolgozokProjektek
add foreign key (dolgozoAz) references dolgozok(az),
add foreign key (projektAz) references projektek(az);
===== Függelék =====
==== További táblák ====
{{:oktatas:adatbázis-kezelés:kek_003.png|}}
{{:oktatas:adatbázis-kezelés:kek_004.png|}}
{{:oktatas:adatbázis-kezelés:kek_005.png|}}
{{:oktatas:adatbázis-kezelés:kek_006.png|}}
INSERT INTO `dolgozok` (`az`, `nev`, `telepules`, `fizetes`, `szuletes`, `belepes`) VALUES
(1, 'Nagy János', 'Szolnok', 958000, '1972-03-25', '1998-07-01'),
(2, 'Erős István', 'Miskolc', 724000, '1982-01-01', '2001-05-01'),
(3, 'Kör László', 'Szolnok', 502000, '1991-08-13', '2015-10-01'),
(4, 'Forma Gábor', 'Miskolc', 575000, '1992-11-22', '2008-09-01'),
(5, 'Aranyos Katalin', 'Szeged', 912000, '1979-04-12', '2011-02-01'),
(6, 'Pár Beáta', 'Debrecen', 891500, '1983-08-22', '2009-05-01'),
(7, 'Langyos Béla', 'Szolnok', 817200, '1981-12-14', '2013-03-01'),
(8, 'Bő Mária', 'Szolnok', 911000, '1978-03-25', '2007-02-01'),
(9, 'Zsoltos Ernő', 'Zalaegerszeg', 432000, '1990-03-01', '2012-05-24'),
(10, 'Arany László', 'Miskolc', 582000, '1976-03-05', '2008-08-27'),
(11, 'Voltos Péter', 'Szolnok', 682500, '1983-05-02', '2012-03-01'),
(12, 'Perszel Miklós', 'Szeged', 920000, '1987-08-23', '2015-09-01'),
(13, 'Parani Béla', 'Szeged', 821000, '1982-04-10', '2010-05-01'),
(14, 'Parkal Ferenc', 'Zalaegerszeg', 760000, '1982-09-02', '2014-05-01'),
(15, 'Torka Tibor', 'Zalaegerszeg', 586000, '1984-03-12', '2011-08-01'),
(16, 'Fora Lajos', 'Szeged', 485000, '1983-01-02', '2014-05-01'),
(17, 'Bari József', 'Miskolc', 835000, '1971-03-14', '2012-01-01');
==== Források ====
* https://mariadb.com/kb/en/library/foreign-keys/
* https://www.w3schools.com/sql/sql_foreignkey.asp
* http://www.dofactory.com/sql/tutorial