Autor, Název akce Databázové systémy a SQL Lekce 4 Daniel Klimeš Autor, Název akce Subdotazy SQL Daniel Klimeš, Databázové systémy a SQL 2 Zanořené dotazy • uzavřené v kulatých závorkách () • stejná syntaxe jako obyčejný dotaz • vložení: SELECT sloupec FROM tabulka WHERE podmínka GROUP BY HAVING ORDER BY • •místo názvu sloupce •místo názvu tabulky •v sekci WHERE Autor, Název akce Subdotazy SQL - místo sloupce Daniel Klimeš, Databázové systémy a SQL 3 SELECT COUNT(patient_id), (SELECT COUNT (*) FROM patients) FROM patient_study GROUP BY 0; - vnořený dotaz na pozici sloupce musí vrátit právě jeden řádek! Cvičení: Napište dotaz, který vrátí seznam všech studentů, počet jejich registrovaných předmětů a kolik je to procent ze všech dostupných předmětů Autor, Název akce Zanořený dotaz – místo názvu tabulky Daniel Klimeš, Databázové systémy a SQL 4 Subdotaz na pozici FROM nahrazuje tabulku SELECT COUNT(*) FROM ( SELECT study_id, COUNT(*) FROM patient_study GROUP BY study_id ) • Jakýkoliv SELECT dotaz je možné ozávorkovat a použít místo tabulky • Počet možných zanoření závisí na konkrétním databázovém SW •Využijte předchozí dotaz a vypočítejte kolik studento-předmětů bude odučeno Autor, Název akce Vnořený dotaz za WHERE Daniel Klimeš, Databázové systémy a SQL 5 Varianty: • WHERE sloupec = (SELECT sloupec FROM… zanořený dotaz musí vrátit právě 1 řádek a 1 sloupec • WHERE sloupec = ANY (SELECT sloupec FROM… • WHERE sloupec IN (SELECT sloupec FROM … • WHERE sloupec > ALL (SELECT sloupec FROM … zanořený dotaz musí vrátit 1 sloupec a libovolný počet řádků • • •WHERE EXISTS (SELECT * FROM…. • WHERE NOT EXISTS (SELECT * FROM… zanořený dotaz může vracet libovolný počet řádků i sloupců Zanořené dotazy se obvykle propojují s nadřazeným dotazem pomocí podmínky v sekci WHERE Autor, Název akce Domácí úkol Daniel Klimeš, Databázové systémy a SQL • Vytvoření schématu patients/patient_study/sites/studies/studies_site spuštěním skriptu schema_pg.sql • Import dat patients.txt, patient_study.txt, studies.txt, sites.txt (příkaz COPY) Zjistěte počet pacientů v jednotlivých studiích po pracovištích a dle pohlaví STUDY_NAME, SITE, SEX, počet pacientů •