Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
2
Obsah cvičení Indexy. Jednoduché dotazy. Více-tabulkové dotazy. Souhrnné dotazy. Poddotazy. Sjednocený dotaz. Výkonné dotazy.
3
Indexy Vytvořte clusterovaný index „CIprojekt“ na tabulku TProjekt pro sloupce: p_Resitel, p_ICislo, p_ZahajRes, p_Kateg Vytvořte neclusterovaný index NCIprojekt_DatPrijeti na tabulku TProjekt pro sloupce: p_DatumPrijeti, p_ZahajRes, p_ICislo Vytvořte neclusterovaný index NCIprojekt_Kateg na tabulku TProjekt pro sloupce: p_Kateg, p_Typ, p_Podtyp, p_ICislo USE EvidProjektu; GO CREATE UNIQUE CLUSTERED INDEX CIprojekt ON TProjekt (p_Resitel ASC,p_ICislo ASC,p_ZahajRes ASC,p_Kateg ASC ); GO USE EvidProjektu; GO CREATE NONCLUSTERED INDEX NCIprojekt_DatPrijeti ON TProjekt (p_DatumPrijeti ASC,p_ZahajRes ASC, p_ICislo ASC ); GO USE EvidProjektu; GO CREATE NONCLUSTERED INDEX NCIprojekt_Kateg ON TProjekt (p_Kateg ASC,p_Typ ASC,p_Podtyp ASC, p_ICislo ASC ); GO
4
Jednoduché dotazy Seznam hodnot z tabulky TZamestnanec se sloupci Jméno, Příjmení a Katedra (odpovídají sloupcům v tabulce s názvy: z_Jmeno, z_Prijmeni, z_Pracoviste) Seznam zaměstnanců katedry 352. Ostatní parametry viz výše. USE EvidProjektu; GO SELECT 'Přijetí projektu' = CASE WHEN p_DatumPrijeti IS NOT NULL THEN 'Projekt ve fázi přípravy' ELSE 'Projekt byl přijat' END, p_Resitel AS Řešitel,p_Pracoviste AS 'Název projektu' FROM TProjekt GO Seznam projektů, které jsou členěny dle data přijetí projektu. Nejprve se zobrazí projekty ve fázi návrhu (p_DatumPrijeti=NULL). Pak následují projekty přijaté (p_DatumPrijeti~=NULL). V seznamu se objeví sloupce Přijetí projektu, Řešitel, Název projektu. USE EvidProjektu; GO SELECT z_Jmeno AS Jméno,z_Prijmeni AS Příjmení,z_Pracoviste AS Katedra FROM TZamestnanec ORDER BY z_Jmeno; GO USE EvidProjektu; GO SELECT z_Jmeno AS Jméno,z_Prijmeni AS Příjmení,z_Pracoviste AS Katedra FROM TZamestnanec WHERE z_Pracoviste='352' ORDER BY z_Jmeno; GO
5
Více-tabulkové dotazy Zobrazte všechny projekty, které byly řešeny nebo jsou v řešení od roku 2007 dosud pouze pro katedru „352“. Informace pro zobrazení jsou: název projektu, zahájení a ukončení projektu,název spolupracující firmy a kontakt na jejich osobu. USE EvidProjektu; GO SELECT p_Nazev AS 'Název projektu',p_ZahajRes AS 'Zahájení řešení', p_KonecRes AS 'Ukončení řešení',TFirma.fir_Nazev AS 'Firma', TFirma.fir_Kontakt AS 'Kontaktní osoba' FROM TProjekt,TFirma WHERE p_Firma=fir_ICO AND TProjekt.p_Pracoviste='352' ORDER BY p_ZahajRes,p_Nazev USE EvidProjektu; GO SELECT p_Nazev AS 'Název projektu',p_ZahajRes AS 'Zahájení řešení', p_KonecRes AS 'Ukončení řešení',TFirma.fir_Nazev AS 'Firma', TFirma.fir_Kontakt AS 'Kontaktní osoba' FROM TProjekt RIGHT OUTER JOIN TFirma ON p_Firma=fir_ICO WHERE TProjekt.p_Pracoviste='352' ORDER BY p_ZahajRes,p_Nazev
6
Více-tabulkové dotazy (2) Zobrazte všechny firmy, které spolupracovaly v loňském roce na projektech. Informace pro zobrazení jsou: název firmy (vzestupně seřazené). USE EvidProjektu; GO SELECT DISTINCT fir_Nazev FROM TProjekt LEFT JOIN TFirma ON p_Firma=fir_ICO WHERE year(p_ZahajRes) =(year(getdate())-1) AND fir_Nazev IS NOT NULL; GO
7
Souhrnné dotazy Zobrazte počet projektů FRVŠ nebo GAČR řešených katedrami v jednotlivých letech. Informace pro zobrazení jsou: rok řešení, název katedry, a počet projektů. USE EvidProjektu; GO SELECT YEAR(p_ZahajRes),COUNT(p_ICislo),'projekt(y) za',p_Pracoviste FROM TProjekt INNER JOIN TKatedra ON p_Pracoviste=Číslo GROUP BY year(p_ZahajRes),p_Pracoviste ORDER BY year(p_ZahajRes),p_Pracoviste; GO HAVING COUNT(p_ICislo)>1 Omezte výpis pouze na ty katedry, které mají více než 1 projekt v daném roce řešení.
8
Poddotazy Zobrazte projekty v roce 2008 těch kateder, které měly v roce 2008 alespoň dva projekty v době řešení. Informace pro zobrazení jsou: název projektu, rok zahájení řešení, rok ukončení řešení, jméno řešitele a číslo katedry. poddotaz pro určení kateder splňujících podmínku: USE EvidProjektu; GO SELECT p_Pracoviste FROM TProjekt WHERE year(p_ZahajRes) =(year(getdate())-1) GROUP BY p_Pracoviste HAVING COUNT(p_Pracoviste)>1 ORDER BY p_Pracoviste; GO USE EvidProjektu; GO SELECT p_Nazev, p_Pracoviste, Název FROM TProjekt LEFT JOIN TKatedra ON p_Pracoviste=TKatedra.Číslo WHERE p_Pracoviste IN (SELECT p_Pracoviste FROM TProjekt WHERE year(p_ZahajRes) =(year(getdate())-1) GROUP BY p_Pracoviste HAVING COUNT(p_Pracoviste)>1) AND (year(p_ZahajRes) =(year(getdate())-1)); GO
9
Sjednocený dotaz Zobrazte seznam všech roků, v nichž probíhalo řešení jakéhokoliv projektu. SELECT year(p_ZahajRes) AS 'Doba řešení' FROM TProjekt GROUP BY year(p_ZahajRes) UNION SELECT year(p_KonecRes) AS 'Doba řešení' FROM TProjekt GROUP BY year(p_KonecRes); GO Zjistěte, jak se změní zobrazená data s operací UNION ALL. Jaký význam mají další obdobné operace tj. INTERSECT, EXCEPT.
10
Výkonný dotaz Vložit firmu „Continental Automotive Control System“ s číslem IČO 54623486. V případě, že firma s takovým číslem existuje, pak aktualizovat název firmy. USE EvidProjektu; GO IF EXISTS (SELECT fir_ICO FROM TFirma WHERE fir_ICO=54623488) BEGIN UPDATE TFirma SET fir_Nazev='Continental Automotive Control System' WHERE fir_ICO=54623488 END ELSE BEGIN INSERT INTO TFirma (fir_ICO,fir_Nazev) VALUES (54623488,'Continental Automotive Control System') END GO
11
Shrnutí Index – rychlý přístup k řádkům tabulky v závislosti na hodnotách jednoho nebo více sloupců. Maximálně jeden seskupený index (CLUSTERED) a ostatní indexy neseskupené (NOTCLUSTERED). Primární klíč nemusí být uložen jako seskupený index. Dotazy – podstatou jazyka SQL. Skládá se z klauzulí: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Druhy dotazů: jednoduché, více-tabulkové, souhrnné, poddotazy, sjednocené, výkonné.
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.