Autor, Název akce Databázové systémy a SQL Lekce 3 Daniel Klimeš 1 Autor, Název akce Množinové operace Daniel Klimeš, Databázové systémy a SQL 2 • UNION Sjednocení množin – duplicitní řádky vyloučeny • UNION ALL Sjednocení množin včetně duplicit • INTERSECT Průnik množin – pouze shodné řádky • MINUS Rozdíl množin Operace s dotazy, které vrací stejnou datovou strukturu (stejné sloupce) SELECT sloupec FROM tabulka UNION SELECT sloupec FROM tabulka2 Sloupců prvního a druhého dotazu musí být stejný počet a musí být stejného datového typu Autor, Název akce Cvičení 1 Daniel Klimeš, Databázové systémy a SQL 3 Vypište všechny pacienty ze studií study_id 3 a 23 Vypište všechny unikátní pacienty ze studií study_id 3 a 23 Vypište společné pacienty ze studií study_id 3 a 23 Autor, Název akce Subdotazy SQL Daniel Klimeš, Databázové systémy a SQL 4 Zanořené dotazy • uzavřené v kulatých závorkách () • vložení: místo názvu sloupce místo názvu tabulky v sekci WHERE Místo sloupce: SELECT COUNT(patient_id), (select count (*) FROM patients) FROM patient_study WHERE study_id = 3 ; - vnořený dotaz na pozici sloupce musí vrátit právě jeden řádek Autor, Název akce Zanořený dotaz Daniel Klimeš, Databázové systémy a SQL 5 Subdotaz na pozici FROM nahrazuje tabulku SELECT COUNT(*) FROM ( SELECT study_id, COUNT(*) FROM patient_st udy GROUP BY study_id ) Autor, Název akce Vnořený dotaz za WHERE Daniel Klimeš, Databázové systémy a SQL 6 Varianty: • WHERE sloupec = (SELECT sloupec FROM… • WHERE sloupec = ANY (SELECT sloupec FROM… • WHERE sloupec IN (SELECT sloupec FROM … • WHERE sloupec > ALL (SELECT sloupec FROM … • WHERE EXISTS (SELECT * FROM…. • WHERE NOT EXISTS (SELECT * FROM… SELECT * FROM patients WHERE date_of_birth = ( SELECT MAX(date_of_birth) FROM patients); SELECT * FROM patients WHERE date_of_birth IS NOT NULL AND date_of_birth >= ALL ( SELECT date_of_birth FROM patients); SELECT * FROM patients tab1 WHERE date_of_birth IS NOT NULL AND NOT EXISTS ( SELECT * FROM patients tab2 WHERE tab2. date_of_birth > tab1. date_of_birth ); Nejmladší pacient: Autor, Název akce Cvičení 2 Daniel Klimeš, Databázové systémy a SQL 7 Napište 3 varianty, které zobrazí řádek s nejstarším pacientem Napište dotaz, který vrátí všechny pacienty kromě nejstaršího a nejmladšího Vypište všechny studie a počet zařazených pacientů v jednotlivých letech a u každé nejmladšího a nejstaršího pacienta v daném roce STUDY_NAME, rok(DATE_OF_ENROLLMENT), min(date_of_birth), max(date_of_birth) Zjistěte počet pacientů ve studiích, kde počet pacientek není větší než 10 STUDY_NAME, počet pacientů Autor, Název akce Firebird Daniel Klimeš, Databázové systémy a SQL 8 •Instalace Firebird serveru •IBConsole •Registrace lokálního serveru •Registrace databáze (soubor vyuka.gdb) •TOOLs-> Interactive SQL • login SYSDBA • heslo masterkey Autor, Název akce FIREBIRD – testovací databáze Daniel Klimeš, Databázové systémy a SQL 9 Tabulka Pacienti •ID •Jmeno •Datum_narozeni •Pohlavi Tabulka Vysetreni •ID_vysetreni •ID •Datum_vysetreni •Typ_vysetreni • Vysledek Cvičení: 1.Zjistěte počet pacientů 2.Zjistěte počet vyšetření typu 7 3.Vypište přehled jmeno, počet vyšetření Autor, Název akce Struktura registru Daniel Klimeš, Databázové systémy a SQL 10 Registr/studie se skládá z 1 až n formulářů, které se vyplňují v určité fázi péče o pacienta Formulář se skládá z 1 až n skupin otázek Skupina otázek je tvořena 1 až n otázkami Otázky mohou být různého datové typu, (číslo, text, datum, číselník) Číselník je sada povolených odpovědí na danou otázku (výběr z nabídky „roletka“, combo box) Autor, Název akce TRIALDB – datový model Daniel Klimeš, Databázové systémy a SQL 11 export_patients.jpg Formulář Skupina otázek Otázky Položky číselníku Číselník Autor, Název akce Cvičení Daniel Klimeš, Databázové systémy a SQL 12 •Najděte formulář bez definované skupiny otázek • •Najděte formulář s největším počtem skupin • •Najděte formulář s největším počtem otázek • •Najděte nejčastěji používaný číselník