Felhasználói eszközök

Eszközök a webhelyen


oktatas:adatbazis-kezeles:adatbazis-pelda

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

oktatas:adatbazis-kezeles:adatbazis-pelda [2019/08/16 04:52] (aktuális)
admin létrehozva
Sor 1: Sor 1:
 +[[oktatas:​adatbázis-kezelés|<​ Adatbázis-kezelés]]
  
 +====== Adatbázis példa ======
 +  * **Szerző:​** Sallai András
 +  * Copyright (c) Sallai András, 2018
 +  * Licenc: GNU Free Documentation License 1.3
 +  * Web: http://​szit.hu
 +
 +===== Adatbázis létrehozása =====
 +
 +<code sql>
 +CREATE DATABASE kek
 +CHARACTER SET utf8
 +COLLATE utf8_hungarian_ci
 +</​code>​
 +
 +===== Egyetlen tábla =====
 +
 +{{:​oktatas:​adatbázis-kezelés:​kek_000.png|}}
 +
 +Tábla létrehozása:​
 +<​code>​
 +create table dolgozok (
 +    az int not null primary key auto_increment,​
 +    nev varchar(100),​
 +    telepules varchar(100),​
 +    fizetes double,
 +    szuletes date,
 +    belepes date);
 +</​code>​
 +
 +Adat beszúrása:​
 +<​code>​
 +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'​);​
 +</​code>​
 +
 +A fizetések összegzése:​
 +<code sql>
 +select sum(fizetes) as "​összes fizetés"​ from dolgozok
 +</​code>​
 +
 +A fizetések átlaga:
 +<code sql>
 +select avg(fizetes) as "​átlagfizetés"​ from dolgozok
 +</​code>​
 +
 +
 +A legnagyobb fizetés:
 +<code sql>
 +select max(fizetes) as "​legnagyobb fizetés"​ from dolgozok
 +</​code>​
 +
 +A legkisebb fizetés:
 +<code sql>
 +select min(fizetes) as "​legkisebb fizetés"​ from dolgozok
 +</​code>​
 +
 +
 +Jelenítse meg a Miskolci dolgozók születési éveit:
 +<code sql>
 +select year(szuletes)
 +from dolgozok
 +where telepules="​Miskolc"​
 +</​code>​
 +
 +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:
 +
 +<code sql>
 +select nev, fizetes, szuletes
 +from dolgozok
 +where fizetes > 800000
 +and (year(now())-year(szuletes)) > 30
 +</​code>​
 +
 +Hány olyan dolgozó van 30 évesnél idősebb dolgozó van, 
 +akinek a fizetése több mint 900000?
 +
 +<code sql>
 +select count(*)
 +from dolgozok
 +where fizetes > 900000
 +and (year(now())-year(szuletes)) > 30
 +</​code>​
 +
 +===== 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
 +
 +<​code>​
 +create table dolgozok (
 +az int not null private key auto_increment,​
 +nev varchar(100));​
 +</​code>​
 +
 +<​code>​
 +create table projektek (
 +az int not null private key auto_increment,​
 +nev varchar(100),​
 +constraint fk_projektek  ​
 +foreign key(dolgozoAz)  ​
 +references dolgozok(az);​
 +</​code>​
 +
 +
 +Hány projektjük van a dolgozóknak?​
 +<​code>​
 +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]> ​
 +</​code>​
 +
 +Ha left join-t használunk,​ akkor azt is láthatjuk akinek nincs projektjük:​
 +<​code>​
 +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]> ​
 +
 +</​code>​
 +
 +===== Ö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|}}
 +
 +<​code>​
 +create table dolgozok (
 +az int not null primary key auto_increment,​
 +nev varchar(100),​
 +telepules varchar(100));​
 +</​code>​
 +
 +
 +<​code>​
 +create table projektek (
 +az int not null primary key auto_increment,​
 +nev varchar(100));​
 +</​code>​
 +
 +
 +<​code>​
 +create table dolgozokProjektek (
 +dolgozoAz int,
 +projektAz int);
 +</​code>​
 +
 +
 +<​code>​
 +alter table dolgozokProjektek  ​
 +add foreign key (dolgozoAz) references dolgozok(az), ​
 +add foreign key (projektAz) references projektek(az);​
 +</​code>​
 +
 +===== 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|}}
 +
 +<code sql>
 +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'​);​
 +</​code>​
 +
 +==== Források ====
 +
 +  * https://​mariadb.com/​kb/​en/​library/​foreign-keys/​
 +  * https://​www.w3schools.com/​sql/​sql_foreignkey.asp
 +  * http://​www.dofactory.com/​sql/​tutorial
oktatas/adatbazis-kezeles/adatbazis-pelda.txt · Utolsó módosítás: 2019/08/16 04:52 szerkesztette: admin