Relační databáze Jakub Lokoč.

Slides:



Advertisements
Podobné prezentace
KIV/ZIS Cvičení 6 SQL - SELECT.
Advertisements

Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Základy jazyka SQL Jan Tichava
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Fakulta elektrotechniky a informatiky
Cvičení 03 SQL Select Ing. Pavel Bednář
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Realizace sběru dat v rámci realizovaných úloh.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
C# pro začátečníky Mgr. Jaromír Osčádal
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
Temporální databáze a TSQL
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Uživatelé, Role, Schémata
Materiály k přednášce Úvod do programování Ondřej Čepek.
Radek Špinka Přepínače MSSQL výběr.
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL.
Úvod do databází Databáze.
Databáze Jiří Kalousek.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
KASKÁDOVÉ STYLY 4.
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Procedurální rozšíření Transact SQL Michal Kopecký Výběr ze slajdů k 3. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK.
Vypracoval: Ondřej Dvorský Třída: VIII.A
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Cvičení.
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy SQL Výběr dat.
Vnořené SQL (embedded SQL) Dotazovací jazyky I
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Databázové systémy a SQL
Databázové systémy a SQL
Databázové systémy a SQL
Databázové systémy a SQL
Přednáška 9 Triggery.
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Relační databáze Jakub Lokoč

Rekapitulace ZS Proč a jak vzniká relační datový model? Kvalita relačního modelu? Co relační model umožňuje? SQL – jazyk pro definici dat, modifikaci dat a hlavně pro jejich dotazování Transakce – konkurenční prostředí Co mají všechna témata společného? Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

Plán na letní semestr Seznámení s MSSQL serverem T-SQL Instalace express edition 2008 (DÚ) Microsoft SQL Server Management Studio T-SQL Uložené procedury Triggery Datový sklad pomocí MSSQL serveru Operátor CUBE Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

Cvičení Používaný datový model DUM(Cislo, Ulice, Barva) OKNO(Id, Cislo, Ulice, JeStresni) Cislo, Ulice je CK do DŮM KOCKA(Id, Jmeno, Barva) PREDENI(OknoId, KockaId) OknoId a KockaId jsou Ck do tabulek Okno a Kocka Vytvořte tabulky na MSSQL serveru (včetně primárních a cizích klíčů) Nastavte, že barva domu nebo kočky může být jen bílá, hnědá nebo černá Naplňte tabulky daty Napište a otestujte SQL dotazy Střešní okna na ulici Estonská nebo Vltavská Jména koček, které předly na ulici Estonská Kolik koček předlo v Estonské ulici? Na které ulici nepředla žádná kočka? Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL Rozšíření jazyka SQL (Microsoft a Sybase) Lokální proměnné Řízení toku programu (control of flow) Knihovna systémových procedur a funkcí Uživatelské procedury a funkce Rozšíření operací UPDATE a DELETE BULK INSERT … Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

Běžné datové typy na MSSQL serveru Velikost Popis INT 4 Celé číslo FLOAT n Desetinné číslo (n je počet bitů mantisy) DATETIME 8 Datum a čas CHAR Řetězec délky n VARCHAR Řetězec proměnlivé délky NCHAR Unicode varianta CHAR NVARCHAR Unicode varianta VARCHAR BIT 1 Pravdivostní hodnota TRUE nebo FALSE TABLE Tabulka pro uložení mezivýsledku CURSOR Struktura pro sekvenční procházení dat Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL systémové funkce Matematické operátory +, -, /, *, %, Abs, Round, Floor, Ceiling, Rand Agregační funkce Sum, Min, Max, Avg, Count Funkce pro práci s řetězci +, Left, Right, Lower, Len, Replace, Substring Funkce pro práci s datem a s NULL Year, Month, Day, GetDate, IsNull Funkce pro konverzi mezi datovými typy Cast(vyraz as typ), Convert(typ, vyraz, styl) Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL deklarace proměnných Klíčové slovo DECLARE Proměnná musí začínat symbolem @ Příklady na přiřazení hodnoty proměnné DECLARE @PocetDomu INT, @Datum DATETIME; SET @PocetDomu = 5; SET @Datum = ‘3-20-2012’; SET @Datum = DATEADD(DAY, 1, @Datum); -- Náhodná inicializace proměnné na hodnotu 2, 3 nebo 4 SET @PocetDomu = 2 + Rand() * 3; SET @PocetDomu = (SELECT Count(*) FROM Dum); SELECT @PocetDomu = Count(*) FROM Dum; Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL platnost proměnné Proměnné jsou lokální, tj. platí pouze v daném vykonávaném bloku Pozor na příkaz GO ukončující dávku Příklad DECLARE @PocetDomu INT; GO -- Dojde k chybě, nezná proměnnou @PocetDomu SET @PocetDomu = 5; SELECT Ulice, Count(Cislo) FROM Dum GROUP BY Ulice HAVING Count(*) > @PocetDomu Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL tabulková proměnná Slouží k uchování mezivýsledku (optimalizace dotazu) Záleží na velikosti mezivýsledku!!! Příklad DECLARE @T TABLE (Cislo INT not null, Adresa VARCHAR(50) not null); -- Naplníme jako klasickou tabulku INSERT INTO @T SELECT Cislo, Adresa FROM Dům WHERE … SELECT * FROM @T, Okno WHERE … Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL řízení toku programu BEGIN, END – začátek a konec bloku IF, ELSE – větvení programu WHILE – opakované provádění bloku kódu BREAK, CONTINUE – řízení cyklu RETURN – opuštění vykonávané procedury WAITFOR – pozastavení programu GOTO – skok na návěští (moc nepoužívat) Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL větvení programu DECLARE @PocetOken INT; SELECT @PocetOken = Count(*) FROM Okno WHERE Ulice = ‘Estonská’ AND Cislo = 1; -- Pro objednávku 50 a více oken je 500 Kč sleva IF @PocetOken > 49 PRINT ‘Cena za jedno okno je 10.000 Kč.’ ELSE PRINT ‘Cena za jedno okno je 10.500 Kč.’ -- Pokud chceme vykonat více operací v rámci jedné větve, tak -- musíme příkazy uzavřít do bloku BEGIN a END -- Příkaz PRINT vytiskne řetězec do okna zpráv (Messages) Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL cyklus DECLARE @Pocet INT, @Ulice VARCHAR(25); SET @Pocet = 0; WHILE @Pocet < 10 BEGIN SET @Pocet = @Pocet + 1; IF Rand() < 0.25 SET @Ulice = ‘Estonská’; ELSE SET @Ulice = ‘Vltavská’; INSERT INTO Dum VALUES (@Pocet, @Ulice, ‘Modrá’); END -- Upravte skript tak, aby se generovaly různé barvy domů (použijte CASE) -- Upravte skript tak, aby se ke každému novému domu vložilo 5 oken. -- Třetí a páté okno bude vždy střešní. Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL řízení cyklu DELETE FROM Dum; DECLARE @Pocet INT; SET @Pocet = 0; WHILE @Pocet < 10 BEGIN SET @Pocet = @Pocet + 1; IF @Pocet = 2 CONTINUE; INSERT INTO Dum VALUES (@Pocet, ‘Estonská’, ‘Modrá’); IF @Pocet = 7 BREAK; END -- Popište, jak bude vypadat tabulka Dum po provedení skriptu. Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL kurzory Slouží pro sekvenční zpracování výsledku SQL dotazu Často vyžadují hodně paměti! Neopomíjet alternativy založené na sadách řádků! Pravidla práce s kurzorem Deklarace kurzoru pomocí SELECT příkazu Před použitím je nutné kurzor otevřít (po použití zase zavřít) Pohyb kurzoru si řídí uživatel sám (FETCH NEXT, FIRST, LAST, …) Uživatel má k dispozici data z aktuální pozice kurzoru Číslo Ulice 1 Estonská 2 3 Francouzská FETCH NEXT do proměnných @x a @y FETCH NEXT … FETCH NEXT … FETCH NEXT … FETCH NEXT @@FETCH_STATUS != 0 Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL práce s kurzory DECLARE @Cislo INT, @Ulice VARCHAR(50); DECLARE dum_cursor CURSOR FOR SELECT Cislo, Ulice FROM Dum; OPEN dum_cursor; FETCH NEXT FROM dum_cursor INTO @Cislo, @Ulice WHILE @@FETCH_STATUS = 0 BEGIN PRINT Cast(@Cislo AS CHAR(4)) + ' ' + @Ulice END CLOSE dum_cursor; DEALLOCATE dum_cursor; Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL kurzory Příklad 1 S využitím kurzoru přidejte každému domu v Estonské jedno střešní okno Jiné řešení (sice jednodušší, ale zato efektivnější…) INSERT INTO Okno (Cislo, Ulice, JeStresni) SELECT Cislo, Ulice, 1 FROM Dum WHERE Ulice = ‘Estonská’ Příklad 2 Spočítejte kumulativní sumu počtu střešních oken pro posloupnost domů (1, 1+1, 1+1+1, …). Srovnejte efektivitu kurzoru a řešení pomocí dotazu s Group By Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL transakce Zajištění ACID vlastností složitějších operací MS SQL server podporuje několik módů transakcí Autocommit mode – běžné nastavení, každá operace je transakcí která potvrdí nebo abortuje v případě chyby Implicitní transakce – neuvádí se start transakce, potvrzení odstartuje novou transakci Explicitní transakce – explicitně definované startem a koncem transakce Autocommit mód je nevhodný pro rozsáhlé operace Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL transakce Autocommit mode - doba vložení kolem 40s DECLARE @Pocet INT SET @Pocet = 100000 WHILE @Pocet > 0 BEGIN SET @Pocet = @Pocet - 1 INSERT INTO Dum VALUES (@Pocet, 'Estonska', 'Bila') END Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL transakce Explicitně vyjádřená transakce - doba vložení kolem 3s DECLARE @Pocet INT SET @Pocet = 100000 BEGIN TRAN WHILE @Pocet > 0 BEGIN SET @Pocet = @Pocet - 1 INSERT INTO Dum VALUES (@Pocet, 'Estonska', 'Bila') END COMMIT TRAN Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL explicitní transakce BEGIN TRAN – zahájení transakce COMMIT TRAN – potvrzení transakce ROLLBACK TRAN – zrušení efektu transakce DECLARE @PocetDomu INT, @Limit INT SET @Limit = AktualniPocetPovolenychDomu() BEGIN TRAN INSERT INTO Dum VALUES (1, 'Estonska', 'Bila') SET @PocetDomu = (SELECT Count(*) FROM Dum) IF @PocetDomu > @Limit ROLLBACK TRAN COMMIT TRAN Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL explicitní transakce Implicitní chování není ACID – chyba jedné z operací nevyvolá abort celé transakce BEGIN TRAN INSERT INTO Dum VALUES (1, 'Estonska', 'Bila') INSERT INTO Dum VALUES (1, 'Estonska', 'Bila‘) COMMIT TRAN Druhý insert neproběhne kvůli porušení omezení primárního klíče, nicméně, první insert proběhne a je potvrzen Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL explicitní transakce Lze vyřešit pomocí přepínače… SET XACT_ABORT ON BEGIN TRAN INSERT INTO Dum VALUES (1, 'Estonska', 'Bila') COMMIT TRAN Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL explicitní transakce Nebo ručně pomocí zachycení a ošetření chyby BEGIN TRAN BEGIN TRY INSERT INTO Dum VALUES (1, 'Estonska', 'Bila') COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL savepointy Mechanismus, jak vrátit zpět pouze část transakce BEGIN TRAN INSERT INTO Dum VALUES (1, 'Estonska', 'Bila'); SAVE TRAN SP1 INSERT INTO Dum VALUES (2, 'Estonska', 'Bila'); ROLLBACK TRAN SP1 INSERT INTO Dum VALUES (3, 'Estonska', 'Bila'); COMMIT TRAN Do tabulky Dům se vloží pouze Domy 1 a 3 Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL uložené procedury Zajišťují znovupoužitelnost kódu Komunikují s volajícím pomocí parametrů INPUT a OUTPUT parametry, příkaz RETURN Ve svém těle mohou volat jiné procedury Procedury se volají/spouštějí příkazem EXEC Hlavní program Procedura Parametry Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL uložené procedury Příklad uživatelské procedury, která vrátí počet domů na zadané ulici příkazem RETURN CREATE PROCEDURE PocetDomu_1 @Ulice VARCHAR(50) AS BEGIN DECLARE @Pocet INT; SELECT @Pocet = Count(*) FROM Dum WHERE Ulice = @Ulice; RETURN @Pocet; END GO EXEC @Pocet = PocetDomu_1 ‘Estonská’; Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL uložené procedury Příklad uživatelské procedury, která vrátí počet domů na zadané ulici OUTPUT parametrem CREATE PROCEDURE PocetDomu_2 @Ulice VARCHAR(50), @Pocet INT OUTPUT AS BEGIN SELECT @Pocet = Count(*) FROM Dum WHERE Ulice = @Ulice; END GO DECLARE @Pocet INT; EXEC PocetDomu_2 ‘Estonská’, @Pocet OUTPUT; Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL uložené procedury Zapouzdřují složité operace nad daty Minimalizují síťovou komunikaci Rozmanité možnosti nastavení oprávnění pro přístup k datům Můžou (ale nemusí) vracet hodnotu Jsou primárně navrženy tak, aby vracely výsledky aplikaci (v datasetu) Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL uložené funkce Podobné jako procedury až na to, že… Vždy vrací nějakou hodnotu Můžou vracet i tabulku (volání v SELECT dotazu) Na rozdíl od pohledu můžou přijímat parametry Nelze v nich volat některé příkazy CREATE FUNCTION Domy(@Ulice VARCHAR(50)) RETURNS TABLE AS RETURN (SELECT * FROM Dum WHERE Ulice = @Ulice); GO SELECT Count(*) FROM Domy(‘Estonská’); Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL příkaz EXEC EXEC (‘SELECT * FROM Dum’) Spustí SQL dotaz zadaný řetězcem EXEC nazev_procedury parametry Spustí proceduru s parametry EXEC @return = nazev_procedury Spustí proceduru a převezme výsledek Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL triggery Tzv. spouštěče událostí u DDL nebo DML akcí U DML operací lze triggery spouštět v módech AFTER – po operaci (pouze u tabulek) INSTEAD OF – namísto operace (u pohledů a tabulek) Většinou se na událost volá nějaká stored procedura U DML triggerů je klíčové mít k dispozici vložená, změněná nebo opravená data INSERTED DELETED INSERT Nové řádky UPDATE Nové údaje Staré údaje DELETE Smazané řádky Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL triggery CREATE TRIGGER UpravaTabulkyDum ON Dum AFTER INSERT AS INSERT INTO DumLog SELECT I.Id, GetDate() FROM Inserted I GO -- Vypnutí triggeru DISABLE TRIGGER UpravaTabulkyDum ON Dum -- Zapnutí triggeru ENABLE TRIGGER UpravaTabulkyDum ON Dům -- Jak by se zalogovaly všechny operace s tabulkou? Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.

T-SQL triggery Jak zjistit Id nových nebo změněných objektů? SELECT I.Id FROM Inserted I Jak zjistit Id smazaných objektů? SELECT D.Id FROM Deleted D Jak zjistit, jestli byla změněna hodnota ve sloupci Ulice? IF UPDATE(Ulice) … Jak stornovat aktualizační operaci? Příkazem ROLLBACK Relační databáze, T-SQL, RNDr. Jakub Lokoč, Ph.D.