Popis definiční části jazyka SQL,specifikace deklarace primárních a cizích klíčů a příklady na modelu knihovny: Porovnání verzí

m (Hana.Svetelska přesunula stránku Základy SQL na Popis definiční části jazyka SQL,specifikace deklarace primárních a cizích klíčů a příklady na modelu knihovny: rozdělení tématu do více státnicových otázek, toto je název j…)
(vymazání část textu, který byl přemístěn na jiné stránky)
Řádek 1: Řádek 1:
'''Základy SQL''' se zabývají jazykem SQL. Jazyk SQL (Structured Query Language - strukturovaný dotazovací jazyk) je v  případě SQL [[databáze|databázových]] serverů rozhraním, které slouží ke zpřístupnění [[data|dat]]. Jazyk SQL byl vyvinut firmou IBM na počátku 70. Let jako dotazovací jazyk pro práci s velkými [[databáze|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šší. <ref name="SQL_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</ref>
 
 
==E-R konceptuální model==
 
 
[[File:ERD Representation.svg|thumb|upright 2|right|Alternativní konvence pro psaní diagramů]]
 
 
[[File:ERD-artist-performs-song.svg|thumb|upright 2|right|Dvě vztažené entity za použití notace Crow's Foot]]
 
 
Entity-relationship model (ERM), entitně vztahový model se v [[Softwarové inženýrství|softwarovém inženýrství]] používá pro abstraktní a konceptuální znázornění [[data|dat]]. Entity-relationship modelování je metoda [[data|datového]] modelování, která vytváří jeden z typů konceptuálních schémat či sémantických [[data|datových]] modelů systému (obvykle relační [[databáze]]) a požadavků na něj stylem shora dolů.
 
<ref name="SQL_2">Entity-relationship model. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-16]. Dostupné z: https://cs.wikipedia.org/wiki/Entity-relationship_model</ref>
 
 
===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.<ref name="SQL_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<ref name="SQL_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í|informační inženýrství]].<ref name="SQL_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<ref name="SQL_2"/>
 
<br/>
 
 
==Popis jazyka SQL==
 
=== Definice pojmů===
 
<br/>
 
'''Entita'''(angl. entity) je objekt reálného světa, který je schopen nezávyslé existence a je jednoznačně odlišitelný od ostatních objektů. Entitou je např. "student Novák Josef, r.č.470822172".
 
<br/>
 
'''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ů".
 
<br/>
 
'''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.
 
<br/>
 
'''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 daného zaměstnance, apod.
 
<ref name="SQL_3">POKORNÝ, Jaroslav a Ivan HALAŠKA. Databázové systémy: vybrané kapitoly a cvičení. 2. přepr. vyd. Praha: Karolinum, 1998. ISBN 8071846872.</ref>
 
 
 
===Příkazy===
 
===Příkazy===
 
<br/>
 
<br/>

Verze z 5. 4. 2018, 20:19

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) [1]

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ísty. (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 definovat, 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, např. "CHAR(200)" nebo "INT" píšeme jenom tehdy, když něco vytváříme. Když mažeme, nemusíme datový typ psát/definovat.

[2][3][4]

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šechny autory.
DELETE FROM Autor;

Vysvětlení: bez definice WHERE mažu všechno.

Zmaž všechny výpůjč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ýpůjčka datumy výpůjč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_vraceni 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 nevypůjč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š nejdražší a nejlevnější výtisk daného díla.
SELECT MAX(cena), MIN(cena)
FROM Vytisk
GROUP BY id_dilo;

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

Zjisti, kolik máme autoru v databázi.
SELECT COUNT(*) AS pocet_autoru FROM Autor;

Vysvětlení: * je tady v závorce, protože je to parametr agregační funkce.

Zjisti průměrnou cenu výtisků.
SELECT AVG(cena) FROM Vytisk;

Uveď průměrnou cenu výtisků. Sloupec nazvi průměrná cena.
SELECT AVG(cena) AS prumerna_cena FROM Vytisk;

[2][3][4]

Odkazy

Reference

  1. SQL. In: Wikipedie: Otevřená encyklopedie [online]. [cit. 2016-12-17]. Dostupné z: https://cs.wikipedia.org/wiki/SQL
  2. 2,0 2,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
  3. 3,0 3,1 Chybná citace: Chyba v tagu <ref>; citaci označené SQL_3 není určen žádný text
  4. 4,0 4,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

Klíčová slova

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