[[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