Databázové systémy a SQL

Slides:



Advertisements
Podobné prezentace
Základy jazyka SQL Jan Tichava
Advertisements

SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
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.
Informatika pro ekonomy II přednáška 11
Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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.
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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.
Databázové systémy teorie a návrh relačních databázových systémů část II.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Analýza možností SŘBD PostgreSQL / PostGIS pro vytvoření datového skladu v prostředí GIS Jaromír Kamler Vedoucí: Antonín Orlík.
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Autor, Název akce Databázové systémy a SQL Daniel Klimeš 1.
Projekt: Škola pro život Registrační číslo: CZ.1.07/1.4.00/ Číslo DUM: VY_32_INOVACE_02-informatika 8. třída_021 Základní škola: Základní škola.
Databáze © Mgr. Petr Loskot
Úvod do databází MS Access (1).
Název projektu: ZŠ Háj ve Slezsku – Modernizujeme školu
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
Dotazovací jazyk SQL I.
Vytvořil: Robert Döring
Dotazovací jazyk SQL - III
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Databázové systémy a SQL
Databázové systémy a SQL
Výukový materiál zpracován v rámci projektu
Uživatelem definované datové typy
Přístupový systém aneb kontrola vstupů
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Inf Tabulkový procesor - formátování
Databáze MS ACCESS 2010.
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Databázové systémy přednáška 3 – CRUD
Vytvoření databázového dotazu z více tabulek
Lexikální atomy jazyka C
Příkazy IF a SELECT CASE
Databázové systémy a SQL
Jak brouček sekal souček
Výukový materiál zpracován v rámci projektu
Cvičení 4 Dědičnost objektů.
Procedury a Funkce v programovacím jazyce Pascal
Informatika pro ekonomy přednáška 8
Databázové systémy a SQL
Databázové systémy a SQL
Počítačová cvičení z předmětu Datové sklady
Microsoft Office Access
Základy algoritmizace 3/13 příkaz cyklus, proměnná typu pole
MU002 Informatika II Základy algoritmizace 1/13
Dotazovací jazyk SQL I.
Dotazovací jazyk SQL - II
A5M33IZS – Informační a znalostní systémy
Přednáška 10 Uložené procedury.
Přednáška 8 INDEXY, POHLEDY.
Databázové systémy a SQL
Přednáška 5 Úvod do SQL.
Jazyk SQL (databáze SQLite)
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
TSQL2 The Temporal Structured Query Language Jaroslav Ciml
Relační databáze na příkladu aplikace Microsoft Access
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
MU002 Informatika II Základy algoritmizace 1/13
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
SQL Server 2017: Automatic tuning
Databázové systémy a SQL
Transkript prezentace:

Databázové systémy a SQL Lekce 11 Daniel Klimeš

Uživatelské funkce Objekty databáze, stejně jako tabulky Vytvoření příkazem CREATE, zrušení příkazem DROP Možné sdílení mezi uživateli, lze definovat oprávnění na spuštění Skládá se z DML SQL příkazů Konstrukce jazyka PL/pgSQL – Procedural Language Návratová hodnota Použití SELECT funkce() Daniel Klimeš, Databázové systémy a SQL

Základy PL/pgSQL Standardní procedurální programovací jazyk, obdoba C, Java, Pascal Příkazy se vykonávají postupně + programovací smyčky Průchod tabulkou řádek po řádku Základní prvky Bloky kódu ohraničeny BEGIN END Definice proměnných Operátor přiřazení hodnoty do proměnné Podmíněný výraz Programovací smyčka Volání jiných funkcí Prvky odděleny středníkem Daniel Klimeš, Databázové systémy a SQL

PL/SQL - FOR DECLARE rs RECORD; --deklarace kurzoru BEGIN FOR rs IN (SELECT * FROM patients) LOOP IF (rs.date_of_birth > current_date) THEN INSERT INTO test_tab (patient_id) VALUES (rs.patient_id); END IF; -- ukončení podmíněného výrazu END LOOP; -- ukončení smyčky END; FOR rs IN (SELECT * FROM patients) LOOP Příkaz smyčky Proměnná rs (kurzor, „vektor“) postupně nabývá hodnot řádků, které vrací SELECT příkaz (jednotlivé pacienty) Kurzor rs se musí deklarovat jako RECORD Pro každý vrácený řádek SELECT příkazu se provedou příkazy uzavřené mezi LOOP a END LOOP Smyčka končí po zpracování všech záznamů SELECTU Pokud SELECT nevrací žádné řádky, blok smyčky se přeskočí Daniel Klimeš, Databázové systémy a SQL

PL/SQL - IF BEGIN FOR rs IN (SELECT * FROM patients) LOOP IF (rs.date_of_birth > current_date) THEN INSERT INTO test_tab (patient_id) VALUES (rs.patient_id); END IF; -- ukončení podmíněného výrazu END LOOP; -- ukončení smyčky END; IF (rs.date_of_birth > current_date) THEN podmíněný výraz pokud je splněna podmínka, provedou se příkazy mezi THEN a END IF Pokud ne, pokračuje se až za END IF Daniel Klimeš, Databázové systémy a SQL

Proměnná v PL/SQL CREATE OR REPLACE FUNCTION testf() RETURNS NUMERIC AS $$ DECLARE rs RECORD; i NUMERIC(3); BEGIN i:=0; FOR rs IN (SELECT * FROM patients) LOOP IF (rs.date_of_birth > current_date) THEN INSERT INTO test_tab (patient_id) values (rs.patient_id); i:=i+1; END IF; -- ukončení podmíněného výrazu END LOOP; -- ukončení smyčky RETURN i; END; $$ LANGUAGE PLPGSQL; DECLARE – zahajuje blok definice proměnných, každá proměnná musí být deklarovaná na začátku kódu Operátor přiřazení – := Daniel Klimeš, Databázové systémy a SQL

Výjimky CREATE OR REPLACE FUNCTION testf() RETURNS NUMERIC AS $$ DECLARE rs RECORD; i NUMERIC(3); BEGIN i:=0; FOR rs IN (SELECT * FROM patients) LOOP IF (rs.date_of_birth > current_date) THEN INSERT INTO test_tab (patient_id) values (rs.patient_id); i:=i+1; END IF; -- ukončení podmíněného výrazu END LOOP; -- ukončení smyčky RETURN i; EXCEPTION WHEN division_by_zero THEN - -konkrétní očekávaná chyba RAISE NOTICE 'Neumim delit nulou'; WHEN OTHERS THEN - - další chyby RAISE NOTICE 'Neco je spatne: %', SQLERRM; END; $$ LANGUAGE PLPGSQL; Daniel Klimeš, Databázové systémy a SQL

Procedura – vytvoření časové osy Přehled počtu zařazených pacientů po měsících: CREATE VIEW mesicni_pocty AS SELECT TO_CHAR(date_of_enrollment, ‘yyyy-mm’) mesic, COUNT(*) pocet FROM patient_study WHERE study_id = 43 GROUP BY TO_CHAR(date_of_enrollment, ‘yyyy-mm’) ORDER BY 1 Chybí některé měsíce Vytvoření časové osy v pomocné tabulce Tabulka KALENDAR, její naplnění funkcí PROC_KALENDAR CREATE TABLE kalendar ( Mesic VARCHAR(10) ) Daniel Klimeš, Databázové systémy a SQL

PL/SQL procedura CREATE OR REPLACE FUNCTION proc_kalendar(od DATE, mesicu NUMERIC) RETURNS NUMERIC AS $$ DECLARE i NUMERIC(3); BEGIN DELETE FROM kalendar; FOR i IN 0..mesicu-1 LOOP INSERT INTO kalendar (mesic) VALUES (to_char(od + (interval '1 month' * i), 'yyyy-mm')); END LOOP; RETURN i; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Neco je spatne: %', SQLERRM; RETURN -1; END; $$ LANGUAGE PLPGSQL; Daniel Klimeš, Databázové systémy a SQL

PL/SQL procedura Spuštění: SELECT proc_kalendar ('2010-01-01', 24); Doplněný výpis: SELECT k.mesic, COALESCE(mp.pocet,0) pocet FROM kalendar k LEFT JOIN mesicni_pocty mp ON k.mesic = mp.mesic ORDER BY k.mesic Daniel Klimeš, Databázové systémy a SQL

POSTGRESQL – generátor řádků SELECT a FROM GENERATE_SERIES(1,100) a ; Daniel Klimeš, Databázové systémy a SQL

Tabulky PostgreSQL (ANSI standard) information_schema.tables information_schema.columns DDL příkazy pro manipulaci s tabulkami CREATE TABLE DROP TABLE ALTER TABLE Daniel Klimeš, Databázové systémy a SQL

Pohledy (VIEWS) Pohled = uložený SQL dotaz Pracuje se s ním stejně jako s tabulkou Ve většině případů je možný pouze SELECT CREATE VIEW v_ukazka AS SELECT ps.patient_id, study_name FROM patient_study ps, studies s WHERE ps.study_id = s.stud y_id SELECT study_name, count(*) FROM v_ukazka GROUP BY study_name DDL pro pohledy: CREATE OR REPLACE VIEW AS DROP VIEW PostgreSQL/ANSI information_schema.views Daniel Klimeš, Databázové systémy a SQL

Indexy Indexy jsou obdobou kartotéky Umožňují rychlejší vyhledávání záznamů ve velkých tabulkách Urychlují SELECT dotazy, zpomalují INSERT, UPDATE, DELETE Indexy se vytváří nad jedním nebo více sloupci tabulky Standardně nad primárním klíčem a cizími klíči Dále nad sloupci, které se často používají za WHERE DDL pro indexy CREATE INDEX DROP INDEX ALTER INDEX Daniel Klimeš, Databázové systémy a SQL

Sekvence Sekvence generují za všech okolností unikátní čísla – posloupnost Použití pro primární klíče při insertech nových řádků SELECT NEXTVAL(‘nazev_sekvence') SELECT CURRVAL('nazev_sekvence ') Každé zavolání NEXTVAL vrátí další číslo v posloupnosti bez ohledu na transakce Při neúspěšném použití vygenerovaného ID vznikají “díry” v posloupnosti DDL CREATE SEQUENCE DROP SEQUENCE PostgreSQL/ANSI information_schema.sequences Daniel Klimeš, Databázové systémy a SQL