Popis definiční části jazyka SQL,specifikace deklarace primárních a cizích klíčů a příklady na modelu knihovny: Porovnání verzí
Řádek 79: | Řádek 79: | ||
(id_vyd PK INT,<br/> | (id_vyd PK INT,<br/> | ||
id_dilo FK INT REFERENCES Dilo(id_dilo),<br/> | id_dilo FK INT REFERENCES Dilo(id_dilo),<br/> | ||
− | + | cis_vyd CHAR(20),<br/> | |
rok_vyd CHAR(20));<br/> | rok_vyd CHAR(20));<br/> | ||
<br/> | <br/> | ||
Řádek 90: | Řádek 90: | ||
id_aut FK INT REFERENCES Autor(id_aut));<br/> | id_aut FK INT REFERENCES Autor(id_aut));<br/> | ||
<br/> | <br/> | ||
− | '''Vymaž tabulku | + | '''Vymaž tabulku druh sekundárního autorství.'''<br/> |
DROP TABLE Drusekaut;<br/> | DROP TABLE Drusekaut;<br/> | ||
<br/> | <br/> | ||
− | '''Vymaž databázi | + | '''Vymaž databázi knihovna.'''<br/> |
DROP DATABASE Knihovna;<br/> | DROP DATABASE Knihovna;<br/> | ||
<br/> | <br/> | ||
Řádek 100: | Řádek 100: | ||
ADD ev_cis CHAR(200);<br/> | ADD ev_cis CHAR(200);<br/> | ||
<br/> | <br/> | ||
− | '''Uprav tabulku pokuta: | + | '''Uprav tabulku pokuta: odstraň datum pokuty.'''<br/> |
ALTER TABLE pokuta<br/> | ALTER TABLE pokuta<br/> | ||
DROP dat_pok;<br/> | DROP dat_pok;<br/> | ||
Řádek 111: | Řádek 111: | ||
<br/> | <br/> | ||
− | '''Vlož dílo " | + | '''Vlož dílo "Těžký časy".'''<br/> |
INSERT INTO Dilo(id_dilo, nazev, popis)<br/> | INSERT INTO Dilo(id_dilo, nazev, popis)<br/> | ||
− | VALUES(1, " | + | VALUES(1, "Těžký časy", "Soubor 35 krátkých povídek.");<br/> |
<br/> | <br/> | ||
− | '''Vlož autor " | + | '''Vlož autor "Charles Bukowski".'''<br/> |
INSERT INTO Autor(id_aut, jme_aut,pri_aut)<br/> | INSERT INTO Autor(id_aut, jme_aut,pri_aut)<br/> | ||
− | VALUES(1," | + | VALUES(1,"Charles","Bukowski");<br/> |
<br/> | <br/> | ||
− | '''Přepoj " | + | '''Přepoj "Těžký časy" a "Charles Bukowski" v tabulce autorství.'''<br/> |
INSERT INTO Autorstvi(id_autorstvi, id_dilo, id_aut)<br/> | INSERT INTO Autorstvi(id_autorstvi, id_dilo, id_aut)<br/> | ||
VALUES(1, 1, 1);<br/> | VALUES(1, 1, 1);<br/> | ||
Řádek 135: | Řádek 135: | ||
DELETE FROM Autor;<br/> | DELETE FROM Autor;<br/> | ||
<br/> | <br/> | ||
− | '' | + | ''Vysvětlení: bez definice WHERE mažu všechno.''<br/> |
<br/> | <br/> | ||
'''Zmaž všechny výpujčky od Vánoc do Silvestra.'''<br/> | '''Zmaž všechny výpujčky od Vánoc do Silvestra.'''<br/> | ||
Řádek 144: | Řádek 144: | ||
''Vysvětlení formy data: v konceptuálním schématu knihovny máme definovanou délku data na 8 znaků. Můžeme tedy datum napsat ve formě 24122016 nebo 24.12.16 - podstatné je dodržet délku pole, co je 8 znaků.''<br/> | ''Vysvětlení formy data: v konceptuálním schématu knihovny máme definovanou délku data na 8 znaků. Můžeme tedy datum napsat ve formě 24122016 nebo 24.12.16 - podstatné je dodržet délku pole, co je 8 znaků.''<br/> | ||
<br/> | <br/> | ||
− | '''Zmaž autora | + | '''Zmaž autora Charles Bukowski.'''<br/> |
DELETE FROM Autor<br/> | DELETE FROM Autor<br/> | ||
− | WHERE jme_aut = " | + | WHERE jme_aut = "Charles"<br/> |
− | AND pri_aut = " | + | AND pri_aut = "Bukowski";<br/> |
<br/> | <br/> | ||
− | ''' | + | '''Změň cenu stokorunových výtisků na 120 kč.'''<br/> |
UPDATE Vytisk<br/> | UPDATE Vytisk<br/> | ||
SET cena = 120<br/> | SET cena = 120<br/> | ||
Řádek 160: | Řádek 160: | ||
AND pri_cte = „Novák“;<br/> | AND pri_cte = „Novák“;<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Vypiš všechny data z tabulky dílo.'''<br/> |
SELECT *<br/> | SELECT *<br/> | ||
FROM Dilo;<br/> | FROM Dilo;<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Vypiš příjmení všech autorů.'''<br/> |
SELECT pri_aut<br/> | SELECT pri_aut<br/> | ||
FROM Autor;<br/> | FROM Autor;<br/> | ||
<br/> | <br/> | ||
− | '''Z | + | '''Z výtisků vypiš všechny signatury a ceny (v pořadí signatura, cena).'''<br/> |
SELECT signatura, cena<br/> | SELECT signatura, cena<br/> | ||
FROM Vytisk;<br/> | FROM Vytisk;<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Vypiš z tabulky výpujčka datumy výpujčky a datumy vrácení tak, aby měli sloupce názvy "datum vypujcky" a "datum vraceni".'''<br/> |
SELECT dat_od AS datum_vypujcky, dat_do AS datum_vraceni<br/> | SELECT dat_od AS datum_vypujcky, dat_do AS datum_vraceni<br/> | ||
FROM Vypujcka;<br/> | FROM Vypujcka;<br/> | ||
<br/> | <br/> | ||
− | ''Vysvetlení: v datum_vrácení je "_" místo mezery, | + | ''Vysvetlení: v datum_vrácení je "_" místo mezery, protože SQL by jinak za mezerou čekal další klíčové slovo/příkaz.''<br/> |
<br/> | <br/> | ||
− | ''' | + | '''Vypiš z tabulky pokut id pokuty jako "cislo pokuty" a výšku pokuty ze dne 28.12.2016.'''<br/> |
SELECT id_pok AS cislo_pokuty, vyse_pok<br/> | SELECT id_pok AS cislo_pokuty, vyse_pok<br/> | ||
FROM Pokuta<br/> | FROM Pokuta<br/> | ||
WHERE dat_pok="28122016";<br/> | WHERE dat_pok="28122016";<br/> | ||
<br/> | <br/> | ||
− | ''Vysvetlení: datum | + | ''Vysvetlení: datum píšeme v uvozovkách, protože se jedná o řetězec. Jenom datový typ CHAR vypisujeme v uvozovkách, datový typ Integer a Decimal vypisujeme bez uvozovek.''<br/> |
<br/> | <br/> | ||
− | ''' | + | '''Vypiš z tabulky čtenář id jako "cislo ctenare", příjmení jako "prijmeni" a adresu všech čtenářů, kteřý se jmenují "Pavel".'''<br/> |
SELECT id_cte AS cislo_ctenare, pri_cte AS prijmeni, adresa<br/> | SELECT id_cte AS cislo_ctenare, pri_cte AS prijmeni, adresa<br/> | ||
FROM Ctenar<br/> | FROM Ctenar<br/> | ||
WHERE jme_cte = "Pavel";<br/> | WHERE jme_cte = "Pavel";<br/> | ||
<br/> | <br/> | ||
− | '''Z tabulky Vydání | + | '''Z tabulky Vydání vypiš všechno o vydáních, které mají id díla "20" a rok vydání "2016".'''<br/> |
SELECT *<br/> | SELECT *<br/> | ||
FROM Vydani<br/> | FROM Vydani<br/> | ||
Řádek 196: | Řádek 196: | ||
AND rok_vyd = "2016";<br/> | AND rok_vyd = "2016";<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Vypiš všechny čtenáře, kteřý si nic nevypujčili.'''<br/> |
SELECT *<br/> | SELECT *<br/> | ||
FROM Ctenar<br/> | FROM Ctenar<br/> | ||
WHERE id_cte NOT IN (SELECT id_cte FROM Vypujcka);<br/> | WHERE id_cte NOT IN (SELECT id_cte FROM Vypujcka);<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Vypiš součet všech pokut.'''<br/> |
SELECT SUM(vyse_pok)<br/> | SELECT SUM(vyse_pok)<br/> | ||
FROM Pokuta;<br/> | FROM Pokuta;<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Vypiš nejdrahší a nejlevnejší výtisk.'''<br/> |
SELECT MAX(cena), MIN(cena)<br/> | SELECT MAX(cena), MIN(cena)<br/> | ||
FROM Vytisk;<br/> | FROM Vytisk;<br/> | ||
<br/> | <br/> | ||
− | ''Vstupní parameter SELECT neobsahuje AND. Jenom za WHERE | + | ''Vstupní parameter SELECT neobsahuje AND. Jenom za WHERE následuje AND.''<br/> |
<br/> | <br/> | ||
'''Zjisti, kolik máme autoru v databázi.'''<br/> | '''Zjisti, kolik máme autoru v databázi.'''<br/> | ||
SELECT COUNT(*) AS pocet_autorou FROM Autor;<br/> | SELECT COUNT(*) AS pocet_autorou FROM Autor;<br/> | ||
<br/> | <br/> | ||
− | ''Vysvetlení: * je tady v závorce, | + | ''Vysvetlení: * je tady v závorce, protože je to parameter agregační funkce.''<br/> |
<br/> | <br/> | ||
− | '''Zjisti | + | '''Zjisti průměrnou cenu výtisků.'''<br/> |
SELECT AVG(cena) FROM Vytisk;<br/> | SELECT AVG(cena) FROM Vytisk;<br/> | ||
<br/> | <br/> | ||
− | ''' | + | '''Uveď průměrnou cenu vytisků. Sloupec nazvi průměrná cena.'''<br/> |
SELECT AVG(cena) AS prumerna_cena FROM Vytisk;<br/> | SELECT AVG(cena) AS prumerna_cena FROM Vytisk;<br/> | ||
<br/> | <br/> |
Verze z 3. 1. 2017, 21:26
Na této stránce se právě pracuje. Prosím needitujte tuto stránku, dokud na ní zůstává tato šablona. Předejdete tak editačnímu konfliktu. Jestliže uběhla od poslední editace doba alespoň dvou dnů, neváhejte tuto šablonu odstranit. |
rezervace Miriam Tančiboková
Základy SQL se zabývají jazykem SQL. Jazyk SQL (Structured Query Language - strukturovaný dotazovací jazyk) je v případě SQL data bázových serverů rozhraním, které slouží ke zpřístupnění dat. Jazyk SQL byl vyvinut firmou IBM na počátku 70. Let jako dotazovací jazyk pro práci s velkými databázemi na počítačích střediskového typu. Cílem tvůrců SQL bylo vyvinout takový nástroj pro koncové uživatele, který by jim umožnil vybírat data z databáze přesně podle jejich individuálních požadavků a byl přitom co nejjednodušší. [1]
E-R konceptuální model
Entity-relationship model (ERM), entitně vztahový model se v softwarovém inženýrství používá pro abstraktní a konceptuální znázornění dat. Entity-relationship modelování je metoda datového modelování, která vytváří jeden z typů konceptuálních schémat či sémantických datových modelů systému (obvykle relační databáze) a požadavků na něj stylem shora dolů. [2]
Alternativní konvence pro psaní diagramů
Chenova notace entity-relationship modelování používá obdélníky pro znázornění entit a kosočtverce pro znázornění vztahů. Tato notace je odpovídající, protože Chenovy vztahy jsou původně objekty - mohou samy obsahovat atributy i další vztahy.[2]
Alternativní konvence, částečně z historického hlediska:
- IDEF1X[4]
- Bachmanova notace
- Martinova notace
- (min, max)-notace Jean-Raymonda Abriala z roku 1974
- Standard UML
- EXPRESS[2]
Crow's foot
Jedna z alternativních notacích známá jako "crow's foot" byla vytvořena nezávisle, v těchto diagramech jsou entity znázorněny v boxech a vztahy oblouky s popisem. Notace "Crow's Foot" znázorňuje vztahy propojováním entit čarami, přičemž symboly na obou koncích čáry symbolizují kardinalitu vztahu. Notace Crow's Foot se používá v Barkerově notaci a v metodologiích jako je SSADM (Structured Systems Analysis and Design Method) nebo informační inženýrství.[2]
Notace Crow's foot má následující výhody:
- Srozumitelnost definování kardinality a dědičnosti ze strany vztahu
- Stručně řešená notace povinného vztahu použitím svislé čáry a volitelného vztahu prázdnou kružnicí
- Zobrazuje stručně a jasně notaci, která identifikuje všechny třídy[2]
Popis jazyka SQL
Definice pojmů
Entita(angl. entity) je objekt reálného světa, který je schopen nezávyslé existence a je jednoznačně odlišitelný od odstatních objektů. Entitou je např. "student Novák Josef, r.č.470822172".
Vztah(angl. relationship) je vazba mezi dvěma (nebo více) entitami. Např. entita "student Novák Josef, r.č. 470822172" může být ve vztahu "má zapsán" k entitě "učební předmět Konstrukce databázových systémů".
Hodnota popisného typu(angl. value) - kde popisným typem budeme rozumět jednoduchý datový typ, tedy dvojici {množina hodnot, množina operací}. Hodnotami jsou například celé číslo 123, datum 31.2.1994 apod.
Atributem(angl. attribute) budeme rozumět funkci přiřazující entitám či vztahům hodnotu (zde popisného typu), určující některou podstatnou vlastnost entity nebo vztahu. Např. DATUM výpůjčky dané knihy daným abonentem, RODNÉ_ČÍSLO danho zaměstnance, apod.
[3]
Příkazy
SQL příkazy se dělí na čtyři základní skupiny:
- Příkazy pro manipulaci s daty (SELECT, INSERT, UPDATE, DELETE, …)
- Příkazy pro definici dat (CREATE, ALTER, DROP, …)
- Příkazy pro řízení přístupových práv (GRANT, REVOKE)
- Příkazy pro řízení transakcí (START TRANSACTION, COMMIT, ROLLBACK) [4]
Konceptuální schéma knihovny
FK (foreign key) = cizí klíč
PK (primary key) = primární klíč
CHAR(20) = text délky maximálně 20 znaků
DECIMAL(10,0) = první číslo označuje celkový počet míst v číslici, druhé počet míst za desetinní čárkou. V tomto případu se jedná o 10 místní číslo s 0 desetinnými místami. (Např. Decimal(4,3) jsou čísla od -9,999 do 9,999.)
Data definition language
Vytvoř tabulku dílo.
CREATE TABLE Dilo
(id_dilo PK INT,
nazev CHAR(200),
popis CHAR(200));
Vysvětlení interpunkce: středník odděluje jednotlivé SQL dotazy, čárka odděluje vstupní parametry.
Vytvoř tabulku vydání.
CREATE TABLE vydani
(id_vyd PK INT,
id_dilo FK INT REFERENCES Dilo(id_dilo),
cis_vyd CHAR(20),
rok_vyd CHAR(20));
Vysvětlení references: references píšeme, protože používáme cizí klíč - musíme zadefinovat, kam cizí klíč odkazuje.
Vytvoř tabulku autorství.
CREATE TABLE Autorstvi
(id_autorstvi PK INT,
id_dilo FK INT REFERENCES Dilo(id_dilo),
id_aut FK INT REFERENCES Autor(id_aut));
Vymaž tabulku druh sekundárního autorství.
DROP TABLE Drusekaut;
Vymaž databázi knihovna.
DROP DATABASE Knihovna;
Uprav tabulku dílo: přidej řádek evidenční číslo.
ALTER TABLE dilo
ADD ev_cis CHAR(200);
Uprav tabulku pokuta: odstraň datum pokuty.
ALTER TABLE pokuta
DROP dat_pok;
Vysvětlení: datový typ, napr. "CHAR(200)" nebo "INT" píšeme jenom tehdy, když něco vytváříme. Když mažeme, nemusíme datový typ psát/definovat.
[5][3]
Data manipulation language
Vlož dílo "Těžký časy".
INSERT INTO Dilo(id_dilo, nazev, popis)
VALUES(1, "Těžký časy", "Soubor 35 krátkých povídek.");
Vlož autor "Charles Bukowski".
INSERT INTO Autor(id_aut, jme_aut,pri_aut)
VALUES(1,"Charles","Bukowski");
Přepoj "Těžký časy" a "Charles Bukowski" v tabulce autorství.
INSERT INTO Autorstvi(id_autorstvi, id_dilo, id_aut)
VALUES(1, 1, 1);
Vysvětlení IDs: Dílo má id "1", protože je to první záznam, který do tabulky dílo vkládám (může mít i jiné id, např. 203, já jsem si zvolila 1). Autoro má id "1", protože je to pvní záznam, který do tabulky autor vkládám (může mít i jiné id, já jsem si zvolila číslo 1). Každý záznam musí mít v rámci své tabulky unikátní id, protože id je v tomto případu primárním klíčem. Id (primárni klíč) není unikátní vrámci celé databáze, pouze vrámci dané tabulky.
Vymaž pokuty, ktoré vznikli na Vánoce.
DELETE FROM Pokuta
WHERE dat_pok = "24122016";
Vymaž všechny pokuty.
DELETE FROM Pokuta;
Vymaž všetny autory.
DELETE FROM Autor;
Vysvětlení: bez definice WHERE mažu všechno.
Zmaž všechny výpujčky od Vánoc do Silvestra.
DELETE FROM Vypujcka
WHERE dat_od = "24122016"
AND dat_do = "31122016";
Vysvětlení formy data: v konceptuálním schématu knihovny máme definovanou délku data na 8 znaků. Můžeme tedy datum napsat ve formě 24122016 nebo 24.12.16 - podstatné je dodržet délku pole, co je 8 znaků.
Zmaž autora Charles Bukowski.
DELETE FROM Autor
WHERE jme_aut = "Charles"
AND pri_aut = "Bukowski";
Změň cenu stokorunových výtisků na 120 kč.
UPDATE Vytisk
SET cena = 120
WHERE cena = 100;
Změň křestní jméno Petra Nováka na Josef.
UPDATE ctenar
SET jme_cte = „Josef“
WHERE jme_cte = „Petr“
AND pri_cte = „Novák“;
Vypiš všechny data z tabulky dílo.
SELECT *
FROM Dilo;
Vypiš příjmení všech autorů.
SELECT pri_aut
FROM Autor;
Z výtisků vypiš všechny signatury a ceny (v pořadí signatura, cena).
SELECT signatura, cena
FROM Vytisk;
Vypiš z tabulky výpujčka datumy výpujčky a datumy vrácení tak, aby měli sloupce názvy "datum vypujcky" a "datum vraceni".
SELECT dat_od AS datum_vypujcky, dat_do AS datum_vraceni
FROM Vypujcka;
Vysvetlení: v datum_vrácení je "_" místo mezery, protože SQL by jinak za mezerou čekal další klíčové slovo/příkaz.
Vypiš z tabulky pokut id pokuty jako "cislo pokuty" a výšku pokuty ze dne 28.12.2016.
SELECT id_pok AS cislo_pokuty, vyse_pok
FROM Pokuta
WHERE dat_pok="28122016";
Vysvetlení: datum píšeme v uvozovkách, protože se jedná o řetězec. Jenom datový typ CHAR vypisujeme v uvozovkách, datový typ Integer a Decimal vypisujeme bez uvozovek.
Vypiš z tabulky čtenář id jako "cislo ctenare", příjmení jako "prijmeni" a adresu všech čtenářů, kteřý se jmenují "Pavel".
SELECT id_cte AS cislo_ctenare, pri_cte AS prijmeni, adresa
FROM Ctenar
WHERE jme_cte = "Pavel";
Z tabulky Vydání vypiš všechno o vydáních, které mají id díla "20" a rok vydání "2016".
SELECT *
FROM Vydani
WHERE id_vyd = 20
AND rok_vyd = "2016";
Vypiš všechny čtenáře, kteřý si nic nevypujčili.
SELECT *
FROM Ctenar
WHERE id_cte NOT IN (SELECT id_cte FROM Vypujcka);
Vypiš součet všech pokut.
SELECT SUM(vyse_pok)
FROM Pokuta;
Vypiš nejdrahší a nejlevnejší výtisk.
SELECT MAX(cena), MIN(cena)
FROM Vytisk;
Vstupní parameter SELECT neobsahuje AND. Jenom za WHERE následuje AND.
Zjisti, kolik máme autoru v databázi.
SELECT COUNT(*) AS pocet_autorou FROM Autor;
Vysvetlení: * je tady v závorce, protože je to parameter agregační funkce.
Zjisti průměrnou cenu výtisků.
SELECT AVG(cena) FROM Vytisk;
Uveď průměrnou cenu vytisků. Sloupec nazvi průměrná cena.
SELECT AVG(cena) AS prumerna_cena FROM Vytisk;
[5][3]
Odkazy
Reference
- ↑ Programování v SQL. In: Ucimedatabaze.cz: Podpora výuky databázových systémů na SOŠ, založené na technologiích společnosti ORACLE [online]. 2011, s. 55 [cit. 2016-12-16]. Dostupné z: http://ucimedatabaze.cz/wp-content/uploads/2012/02/CZ_programovani_SQL.pdf
- ↑ 2,0 2,1 2,2 2,3 2,4 Entity-relationship model. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-16]. Dostupné z: https://cs.wikipedia.org/wiki/Entity-relationship_model
- ↑ 3,0 3,1 3,2 POKORNÝ, Jaroslav a Ivan HALAŠKA. Databázové systémy: vybrané kapitoly a cvičení. 2. přepr. vyd. Praha: Karolinum, 1998. ISBN 8071846872.
- ↑ SQL. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-17]. Dostupné z: https://cs.wikipedia.org/wiki/SQL
- ↑ 5,0 5,1 Basic SQL statements: DDL and DML. In: Database design with UML and SQL, 3rd edition [online]. [cit. 2016-12-24]. Dostupné z: http://www.tomjewett.com/dbdesign/dbdesign.php?page=ddldml.php
Použitá literatura
- Programování v SQL. In: Ucimedatabaze.cz: Podpora výuky databázových systémů na SOŠ, založené na technologiích společnosti ORACLE [online]. 2011, s. 55 [cit. 2016-12-16]. Dostupné z: http://ucimedatabaze.cz/wp-content/uploads/2012/02/CZ_programovani_SQL.pdf
- Entity-relationship model. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-16]. Dostupné z: https://cs.wikipedia.org/wiki/Entity-relationship_model
- POKORNÝ, Jaroslav a Ivan HALAŠKA. Databázové systémy: vybrané kapitoly a cvičení. 2. přepr. vyd. Praha: Karolinum, 1998. ISBN 8071846872.
- SQL. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-17]. Dostupné z: https://cs.wikipedia.org/wiki/SQL
- Basic SQL statements: DDL and DML. In: Database design with UML and SQL, 3rd edition [online]. [cit. 2016-12-24]. Dostupné z: http://www.tomjewett.com/dbdesign/dbdesign.php?page=ddldml.php
Externí odkazy
Související články
Klíčová slova
Databázové systémy, Jazyk SQL, E-R konceptuální model, Informační systém, Informace, Data