Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.

Podobné prezentace


Prezentace na téma: "Informační systémy Nástroje pro sběr dat, návrh a realizace databáze."— Transkript prezentace:

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 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= ) BEGIN UPDATE TFirma SET fir_Nazev='Continental Automotive Control System' WHERE fir_ICO= END ELSE BEGIN INSERT INTO TFirma (fir_ICO,fir_Nazev) VALUES ( ,'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é.


Stáhnout ppt "Informační systémy Nástroje pro sběr dat, návrh a realizace databáze."

Podobné prezentace


Reklamy Google