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 250: Řádek 250:
  
 
* http://www.w3schools.com/sql/default.asp
 
* http://www.w3schools.com/sql/default.asp
 +
* http://sqlzoo.net/wiki/SQL_Tutorial
 
* http://www.mff.cuni.cz/
 
* http://www.mff.cuni.cz/
 
* http://krokodata.vse.cz/
 
* http://krokodata.vse.cz/

Verze z 17. 1. 2017, 16:57

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

Alternativní konvence pro psaní diagramů
Dvě vztažené entity za použití notace Crow's Foot

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

Konceptuální schéma knihovny pomocí notace Crow's Foot
File:SQL_knihovna.png

FK (foreign key) = cizí klíč
PK (primary key) = primární klíč
NN = not null - sloupec nesmí být prázdný.
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 sloupec 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][6]

Data manipulation language


Vlož dílo "Těžký časy".
INSERT INTO Dilo(nazev, popis)
VALUES("Těžký časy", "Soubor 35 krátkých povídek.");

Vlož autor "Charles Bukowski".
INSERT INTO Autor(jme_aut,pri_aut)
VALUES("Charles","Bukowski");

Vymaž pokuty, které vznikly 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;

Vysvětlení: 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";

Vysvětlení: 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_dilo = 20
AND rok_vyd = "2016";

Přepoj dílo "Těžký časy" s autorem "Charles Bukowski" v tabulce autorství.
SELECT id_dilo
FROM Dilo
WHERE nazev = "Těžký časy";
(Systém ukáže id, např. 12)

SELECT id_aut
FROM Autor
WHERE jme_aut = "Charles"
AND pri_aut = "Bukowski";
(Systém ukáže id, např. 21)

INSERT INTO Autorstvi(id_dilo, id_aut)
VALUES(12, 21);

Vypiš všechny čtenáře, kteřý si nikdy 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 daného díla.
SELECT MAX(cena), MIN(cena)
FROM Vytisk
GROUP BY id_dilo;

Vstupní parameter SELECT neobsahuje AND. Jenom za WHERE následuje AND.

Zjisti, kolik máme autoru v databázi.
SELECT COUNT(*) AS pocet_autoru 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][6]

Odkazy

Reference

  1. 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. 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. 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.
  4. SQL. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-17]. Dostupné z: https://cs.wikipedia.org/wiki/SQL
  5. 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
  6. 6,0 6,1 W3schools.com [online]. [cit. 2017-01-03]. Dostupné z: http://www.w3schools.com/sql/default.asp

Použitá literatura

Externí odkazy

Související články

Informační systém, Databáze

Klíčová slova

Databázové systémy, Jazyk SQL, E-R konceptuální model, Informační systém, Informace, Data