Databázové systémy a SQL

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

Databázové systémy 2 Cvičení č. 8
SQL Další dotazy a pohledy
Základy jazyka SQL Jan Tichava
Zpracování SQL Lubomír Andrle 5. přednáška
A5M33IZS – Informační a znalostní systémy Dotazovací jazyk SQL - I.
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.
 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á.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
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
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
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.
Martin Kirschbaum 4.A,  určitá uspořádaná množina informací (dat) uložená na paměťovém médiu  Databázový program - umožňuje tvořit, editovat,
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.
Databáze Úvod.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy teorie a návrh relačních databázových systémů část II.
Relační databáze.
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.
Databázové systémy Přednáška č. 6.
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ý.
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.
Databázové systémy II Cvičení č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
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.
TEMPORÁLNÍ DATABÁZE A TSQL2
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Databázové systémy 2 Zkouška – 8:00. Příklad I - Funkce Vytvořte funkci ZK_DIFF_MIN_MAX (P_ZAM_ID NUMBER) RETURN VARCHAR2. Funkce může vracet.
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.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
Příkazy jazyka SQL ve VFP a na SQL Serveru
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
YOUR LOGO C# Entity Framework. YOUR LOGO  Entity framework nám poskytuje: -Vytváří objektový model na základě databázového schématu -Mapuje tabulky,
Autor, Název akce Databázové systémy a SQL Lekce 2 Daniel Klimeš 1.
Databázové systémy a SQL
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Roman Danel Institut ekonomiky a systémů řízení 2016
Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1
Databázové systémy a SQL
Databázové systémy a SQL
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Dotazovací jazyk SQL I.
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 7 SQL – JOIN.
Přednáška 9 Triggery.
Databázové systémy a SQL
Transkript prezentace:

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

Databázové objekty Nejvýznamnější databázové objekty Tabulky (tables) Pohledy (views) Indexy (indexes) Sekvence (sequences) Procedury (procedures) Funkce (functions) Triggery (triggers) Informace o objektech jsou uloženy v metadatech (systémových datech) databáze Přístup k nim je databázově specifický ORACLE systémové tabulky – uživatelům pouze pro čtení metatabulka o metatabulkách – DICTIONARY tabulky USER_XXX – objekty vytvořené uživatelem tabulky ALL_XXX – objekty přístupné uživateli tabulky DBA_XXX – všechny objekty databáze – přístupné jen administrátorovi Daniel Klimeš, Databázové systémy a SQL

Hierarchie objektů Schéma = sada databázových objektů patřící obvykle jednomu projektu / podprojektu PostgreSQL Na serveru je N databází V každé databázi je jedno výchozí schéma public V každé databázi je možné vytvářet další schémata Uživatel vytváří objekty v libovolném schématu, defaultně v public ORACLE Na serveru je 1 databáze Každý uživatel má automaticky své schéma Uživatel vytváří objekty ve svém schématu Odkaz na objekt ve schématu: schema.objekt např.: student.patients Daniel Klimeš, Databázové systémy a SQL

Tabulky Metatabulky USER_TABLES, ALL_TABLES, DBA_TABLES sloupec table_name Metatabulka TAB sloupec tname, tabtype Sloupce tabulky - USER_TAB_COLUMNS table_name, column_name, data_type PostgreSQL (ANSI standard) information_schema.tables information_schema.columns DDL příkazy pro manipulaci s tabulkami CREATE TABLE DROP TABLE ALTER TABLE RENAME 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 ORACLE metadata user_views, tab PostgreSQL/ANSI information_schema.views Daniel Klimeš, Databázové systémy a SQL

Indexes 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 ORACLE metadata user_indexes ind 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 jmeno_sekv.NEXTVAL from DUAL SELECT jmeno_sekv.CURRVAL from DUAL 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 ORACLE DDL CREATE SEQUENCE DROP SEQUENCE ALTER SEQUENCE ORACLE metadata user_sequences PostgreSQL/ANSI information_schema.sequences Daniel Klimeš, Databázové systémy a SQL

TRIALDB – uložení dat Uložení vlastních dat v TrialDB není klasický relační datový model Generalizovaný model – EAV model – Entity – Attribute - Value Klasický datový model ID pacienta Hmotnost Výška PacientXY 84 186 EAV model Entita Atribut Hodnota Pacient Otázka PacientXY Hmotnost 84 Výška 186 V datovém modelu TrialDB – rozpracované pro jednotlivé datové typy Daniel Klimeš, Databázové systémy a SQL

TRIALDB – datový model Hlavička formuláře Hlavička skupiny Vlastní data Daniel Klimeš, Databázové systémy a SQL

Tabulka EVENT_HEADER Tabulka EVENT_HEADER – 1 řádek = 1 vyplněný formulář HEADER_UID – primární klíč, generovaný STUDY_ID – klíč ke studii/registru PATIENT_ID – klíč k pacientovi PHASE_ID – klíč k fázi CLUSTER_ID – klíč k popisu formuláře DATE_COLLECTED – datum vyplnění formuláře DATETIME_LAST_MODIFIED datum poslední změny dat ve formuláři Daniel Klimeš, Databázové systémy a SQL

Tabulka EVENT_SUBHEADER EVENT_SUBHEADER – 1 řádek = 1 vyplněná skupina otázek SUBHEADER_ID – primární klíč, generovaný HEADER_UID – klíč k vyplněnému formuláři (EVENT_HEADER) QUESTION_GROUP_ID – klíč k popisu skupiny otázek REPEAT_INSTANCE pořadové číslo vyplněné skupiny na formuláři Neopakující se skupina – repeat instance vždy 0 Opakující se skupina repeat instance = řádek tabulky= =řádek v EVENT_SUBHEADER RI = 1 RI = 2 Daniel Klimeš, Databázové systémy a SQL

Tabulky EAV_XXX EAV_XXX – 1 řádek = 1 vložená hodnota SUBHEADER_ID + QUESTION_ID složený primární klíč SUBHEADER_ID klíč ke skupině (EVENT_SUBHEADER) QUESTION_ID – klíč k definici otázky DATETIME – datum a čas vyplnění MVBS – údaje o přesnosti či chybějící hodnotě VALUE – vlastní vyplněná hodnota Daniel Klimeš, Databázové systémy a SQL

Cvičení Kolik vyplněných desetinných čísel obsahuje registr study_id = 3 tabulky EAV_REAL, EVENT_HEADER, EVENT_SUBHEADER Spojte uvedené tabulky dle klíčů – vnitřní spojení SELECT * FROM event_header eh, event_subheader es, eav_real er WHERE eh.header_uid = es.header_uid AND es.subheader_id = er.subheader_id Přidejte podmínku na konkrétní studii a spočítejte řádky SELECT COUNT(*) FROM event_header eh, event_subheader es, eav_real er WHERE eh.header_uid = es.header_uid AND es.subheader_id = er.subheader_id AND eh.study_id = 3 Daniel Klimeš, Databázové systémy a SQL

Cvičení Kolik těchto hodnot je záporných? SELECT COUNT(*) FROM event_header eh, event_subheader es, eav_real er WHERE eh.header_uid = es.header_uid AND es.subheader_id = er.subheader_id AND eh.study_id = 3 AND er.value < 0 Kolik je to unikátních otázek (question_id) SELECT COUNT(distinct question_id) FROM event_header eh, event_subheader es, eav_real er WHERE eh.header_uid = es.header_uid AND es.subheader_id = er.subheader_id AND eh.study_id = 3 AND er.value < 0 Daniel Klimeš, Databázové systémy a SQL

Cvičení Jaké jsou průměrné hodnoty a směrodatná hodnota jednotlivých otázek? (vynechte záporné hodnoty) – QUESTION_ID + agregační funkce SELECT question_id, AVG(value), STDDEV(value), MIN(value), MAX(value) FROM event_header eh, event_subheader es, eav_real er WHERE eh.header_uid = es.header_uid AND es.subheader_id = er.subheader_id AND eh.study_id = 3 and er.value > 0 GROUP BY question_id Doplňte k seznamu název otázky SELECT q.question_id, q.question_description, AVG(value), STDDEV(value) FROM event_header eh, event_subheader es, eav_real er, questions q WHERE eh.header_uid = es.header_uid AND es.subheader_id = er.subheader_id AND eh.study_id = 3 and er.value > 0 AND er.question_id = q.question_id GROUP BY q.question_id, q.question_description Daniel Klimeš, Databázové systémy a SQL

Cvičení Vypište hodnoty otázky question_id = 161 (PATIENT_ID, VALUE) pro všechny založené formuláře cluster_id = 65, study_id = 3 Kolik je formulářů cluster_id = 65 , study_id = 3? SELECT COUNT(*) FROM event_header WHERE study_id = 3 AND cluster_id = 65 1) SELECT eh.patient_id, er.value FROM event_header eh LEFT JOIN ( event_subheader es INNER JOIN eav_real er ON es.subheader_id = er.subheader_id AND er.question_id = 161) ON eh.header_uid = es.header_uid WHERE eh.study_id = 3 AND eh.cluster_id = 65; 2) SELECT eh.patient_id, es.value FROM event_header eh LEFT JOIN (SELECT es.header_uid, er.value from EVENT_SUBHEADER es, eav_real er WHERE es.subheader_id = er.subheader_id AND er.question_id = 161) es ON eh.header_uid = es.header_uid WHERE eh.study_id = 3 AND eh.cluster_id = 65; Daniel Klimeš, Databázové systémy a SQL

Cvičení Vytvořte z vnořeného dotazu VIEW a přepište předchozí dotaz s jeho použitím CREATE VIEW subheader_eav as SELECT es.header_uid, er.value FROM event_subheader es, eav_real er WHERE es.subheader_id = er.subheader_id AND er.question_id = 161 SELECT eh.patient_id, es.value FROM event_header eh LEFT JOIN subheader_eav es ON eh.header_uid = es.header_uid WHERE eh.study_id = 3 AND eh.cluster_id = 65 Daniel Klimeš, Databázové systémy a SQL

Cvičení Lepší varianta umožňující využití pro libovolnou otázku CREATE OR REPLACE VIEW subheader_eav as SELECT es.header_uid, er.question_id, er.value FROM event_subheader es, eav_real er WHERE es.subheader_id = er.subheader_id SELECT eh.patient_id, es.value FROM event_header eh LEFT JOIN subheader_eav es ON eh.header_uid = es.header_uid AND es.question_id = 161 WHERE eh.study_id = 3 AND eh.cluster_id = 65 Daniel Klimeš, Databázové systémy a SQL

Cvičení Vypište hodnoty dvou otázek (161, 27) ve tvaru patient_id, value1, value2 pro všechny existující formuláře cluster_id = 65 , study_id = 3 SELECT eh.patient_id, es.value, es2.value FROM event_header eh LEFT JOIN subheader_eav es ON eh.header_uid = es.header_uid and es.question_id = 161 LEFT JOIN subheader_eav es2 ON eh.header_uid = es2.header_uid and es2.question_id = 27 WHERE eh.study_id = 3 AND eh.cluster_id = 65 ORACLE varianta: SELECT eh.patient_id, es.value, es2.value FROM event_header eh, subheader_eav es, subheader_eav es2 WHERE eh.header_uid = es.header_uid(+) and es.question_id(+) = 161 AND eh.header_uid = es2.header_uid(+) and es2.question_id(+) = 27 AND eh.study_id = 3 AND eh.cluster_id = 65 Daniel Klimeš, Databázové systémy a SQL

Cvičení Vypište formuláře (cluster_id = 65 , study_id = 3), které nemají vyplněny otázky question_id 161, 27 ve tvaru patient_id, header_uid SELECT eh.patient_id, eh.header_uid FROM event_header eh WHERE eh.study_id = 3 AND eh.cluster_id = 65 AND NOT EXISTS (SELECT * FROM subheader_eav es WHERE eh.header_uid = es.header_uid AND es.question_id = 161 ) AND NOT EXISTS (SELECT * FROM subheader_eav es2 WHERE eh.header_uid = es2.header_uid AND es2.question_id = 27 Daniel Klimeš, Databázové systémy a SQL

Domácí úkol V PosgreSQL databázi importujte další skript pg2 a pg3.sql Vyzkoušejte dnešní příklady Daniel Klimeš, Databázové systémy a SQL