CREATE DATABASE proba CHARACTER SET ="utf8" COLLATE="utf8_hungarian_ci";

CREATE TABLE dolgozok(id INT PRIMARY KEY AUTO_INCREMENT, vnev VARCHAR(255) NOT NULL, knev VARCHAR(255) NOT NULL, irszam INT(4) NOT NULL COMMENT "A telepulesek tabla elsodleges kulcsara hivatkozik", kozterulet_neve VARCHAR(255) NOT NULL COMMENT "Ide kerul a kozterulet neve", kozterulet_tipusa INT(4) COMMENT "A kozteruletek tabla elsodleges kulcsara hivatkozik", hazszam_emelet VARCHAR(255) NOT NULL, szul_datum DATE DEFAULT "1989-08-20" COMMENT "A szuletesu datum YYYY-mm-dd formatumban", szul_hely INT(4) COMMENT "A telepulesek tabla elsodleges kulcsara hivatkozik");

CREATE TABLE telepulesek (irszam INT(4) PRIMARY KEY, telepules_neve VARCHAR(255) NOT NULL);

ALTER TABLE dolgozok ADD CONSTRAINT dolgozok_telepulesek_lakhely_fk FOREIGN KEY (irszam) REFERENCES telepulesek(irszam) ON UPDATE CASCADE;

/*TODO*/
ALTER TABLE dolgozok ADD CONSTRAINT dolgozok_telepulesek_szul_hely_fk FOREIGN KEY (szul_hely) REFERENCES telepulesek(irszam) ON UPDATE CASCADE;

CREATE TABLE kozteruletek(id INT PRIMARY KEY AUTO_INCREMENT, kozterulet_neve VARCHAR(255) NOT NULL);

INSERT INTO  kozteruletek(kozterulet_neve) VALUES ("út"),("utca"),("tér");

INSERT INTO telepulesek VALUES (5600, "Békéscsaba"), (3300, "Eger");

DESCRIBE dolgozok;

INSERT INTO dolgozok (vnev, knev, irszam, kozterulet_neve, kozterulet_tipusa, hazszam_emelet, szul_datum, szul_hely)
VALUES ("Kiss", "Aladár", 5600, "Petőfi", 2, "25", "1989-10-24", 3300),
("Nagy", "Kelemen", 3300, "Karak", 1, "13/B", "1978-03-15", 5600),
("Károlyi", "József", 3300, "Levendula", 3, "2.emelet 12-es lakas", "2004-01-12", 3300);


SELECT 
dolgozok.id AS `Dolgozoi azonosito`,
CONCAT(dolgozok.vnev, " ", dolgozok.knev) AS `Dolgozo neve`,
CONCAT(dolgozok.irszam, " ", telepulesek.telepules_neve, ", ", dolgozok.kozterulet_neve, kozteruletek.kozterulet_neve, "hazszam emelet", ".") 
AS  `Lakhely`,
CONCAT(telepulesek.telepules_neve, ", ", dolgozok.szul_datum) AS `Szuletes helye es ideje`
FROM dolgozok
INNER JOIN telepulesek ON telepulesek.irszam = dolgozok.irszam
INNER JOIN kozteruletek ON kozteruletek.id = dolgozok.kozterulet_tipusa; 


CREATE VIEW dolgozok_adata AS SELECT 
dolgozok.id AS `Dolgozoi azonosito`,
CONCAT(dolgozok.vnev, " ", dolgozok.knev) AS `Dolgozo neve`,
CONCAT(dolgozok.irszam, " ", telepulesek.telepules_neve, ", ", dolgozok.kozterulet_neve, kozteruletek.kozterulet_neve, "hazszam emelet", ".") 
AS  `Lakhely`,
CONCAT(telepulesek.telepules_neve, ", ", dolgozok.szul_datum) AS `Szuletes helye es ideje`
FROM dolgozok
INNER JOIN telepulesek ON telepulesek.irszam = dolgozok.irszam
INNER JOIN kozteruletek ON kozteruletek.id = dolgozok.kozterulet_tipusa; 

SELECT * FROM dolgozok_adata;

CREATE TABLE fizetesek (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT "A kiutalas egyedi azonositoja a rendszerben",
    dolgozo INT NOT NULL,
    fizetes FLOAT (9,3) NOT NULL,
    kiutalas_datuma DATETIME DEFAULT CURRENT_TIMESTAMP
);

ALTER TABLE fizetesek 
ADD CONSTRAINT fizetesek_dolgozok_fk
FOREIGN KEY (dolgozo) REFERENCES dolgozok(id) ON UPDATE CASCADE;

INSERT INTO fizetesek (dolgozo, fizetes)
VALUES (1, 15000.125),
(2, 7800),
(1, 3600),
(1, 560.75);


CREATE VIEW kifizetesek AS
SELECT fizetesek.id as `kiutalas azonositoja`,
CONCAT(dolgozok.vnev, " ", dolgozok.knev) AS `dolgozo neve`,
CONCAT(fizetesek.fizetes, " $")  AS `fizetes`,
kiutalas_datuma AS `kiutalas idopontja`
FROM fizetesek INNER JOIN dolgozok ON dolgozok.id = fizetesek.dolgozo;

SELECT * FROM fizetesek WHERE id NOT IN (SELECT id FROM dolgozok);

/*Károlyi József*/
SELECT vnev, knev, fizetes FROM dolgozok 
LEFT JOIN fizetesek ON dolgozok.id = fizetesek.dolgozo
WHERE fizetes IS NULL;

/*EMPTY SET*/
SELECT vnev, knev, fizetes FROM dolgozok 
RIGHT JOIN fizetesek ON dolgozok.id = fizetesek.dolgozo
WHERE fizetes IS NULL;


SELECT * FROM kifizetesek
INNER JOIN dolgozok_adata ON dolgozok_adata.`Dolgozo neve` = kifizetesek.`dolgozo neve`;