VaxNt.Základy SQL
Úvod - co to je SQL. SQL je jazyk pro vyjadřování dotazů k relačním databázím. Každá konkrétní databáze má poněkud odlišný dialekt, přičemž v zásadních věcech jsou stejné. Jazyk slouží k popisu množniny údajů, které chcete z databáze získat. K tomu musíte ovšem znát poněkud strukturu databáze, čili jména tabulek, jejich položek a samozřejmě také i jejich význam. Pro rutinního uživatele obsahuje aplikace již předpřipravenu řadu (parametrizovatelných) dotazů. Obvykle budete pouze vybírat z menu a nanejvýše odpovídat na dotazy "Které období provozu chcete?" nebo "Jaký druh služby Vás zajímá?". Tento text je určen pokročilejším uživatelům, kteří si chtějí předpřipravené dotazy sami nějak upravit.
Pohledy - dočasné tabulky pro zobrazení výsledku dotazu. Data, která více nebo méně složitým způsobem z databáze "vyloudíte" se mohou prezentovat buď jako "papírová sestava" nebo jako přehledná fiktivní databázová tabulka. Tento druhý způsob používá naše aplikace častěji, přičemž získaná data můžete postupně zužovat nebo rozšiřovat modifikací SQL dotazu - ten si také konečně můžete uložit jako svůj preferovaný pohled na lokální disk svého počítače. Zvláště vydařené a zajímavé dotazy pak může administrátor uložit mezi globální - všem uživatelům aplikace přístupné pohledy. Ze všech variant SQL dotazů se omezíme na návod na to, jak si vhodně formulovaným dotazem naplnit pohled na data. Bude nás tedy zajímat příkaz SELECT a jeho různé varianty.
SELECT - výběr zobrazovaných dat. SELECT (anglicky "vybrat") má logicky parametry, kterými se říká
Triky a ukázky
SELECT K.Zarizeni,S.Uziv,S.Drs,P.Dp,P.Dz,K.Zavod,S.TypZDMO,S.ZDMO,S.AkslK,S.AkslZ,K.DatAktK FROM Kmen K, Sluzba S, Provud P WHERE K.Zarizeni=S.Zarizeni AND K.Idpu=P.Idpu ORDER BY K.Zarizeni,S.Drs,S.UzivCož je mimochodem onen strašný Uzizar ...
Další příklady složitějších SQL dotazů:
----------------------------------------------------------------------------------------------- Poruchy v časovém intervalu pro konrétního uživatele - ukázka metaproměnných ----------------------------------------------------------------------------------------------- SELECT DatPl,Drs,Uziv,S.Spojeni,P.Zarizeni,NazevSpojeni,N.Kralert,Typ,DobaUziv FROM Poruchy P,Sluzba S,Spojeni N WHERE P.Zarizeni=S.Zarizeni AND S.Spojeni=N.Spojeni AND DatPl >='$(Datum Od)' AND DatPl <='$(Datum Do)' AND Uziv like '$(Uživatel)' ORDER BY DatPl,DRS,Uziv,Spojeni,P.Zarizeni ----------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- Spoje podle stanice - ukázka toho, kdy se nemá software znovu vyptávat na stejnou odpověď ... ----------------------------------------------------------------------------------------------- SELECT SPOJ,TypZarizeni,Vyrobce,STA,STA1,STA2,sta3,sta4,sta5,sta6,sta7,sta8,sta9,sta10,STAK FROM SPOJ WHERE STA like '$(StaniceX)%' OR STA1 like '$(StaniceX)%' OR STA2 like '$(StaniceX)%' OR STA3 like '$(StaniceX)%' OR STA4 like '$(StaniceX)%' OR STA5 like '$(StaniceX)%' OR STA6 like '$(StaniceX)%' OR STA7 like '$(StaniceX)%' OR STA8 like '$(StaniceX)%' OR STA9 like '$(StaniceX)%' OR STA10 like '$(StaniceX)%' OR STA11 like '$(StaniceX)%' OR STA12 like '$(StaniceX)%' OR STA13 like '$(StaniceX)%' OR STA14 like '$(StaniceX)%' OR STAK like '$(StaniceX)%' ----------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- Statistika pro Uziv=NOVA ----------------------------------------------------------------------------------------------- SELECT ST.Stvol, ST.Spoj, SL.Drs, SL.Uziv, PR.Dp, SP.Modul, ST.Sk, SP.SS, SP.MB, ST.Tok, K.DatPrej, K.DatPuPo, K.Akt, SL.AkslK, K.DatAktK, ST.TypZarizeni, SP.Kapacita, SL.Zvuk, K.Zavod FROM Sluzba SL, Kmen K, Stvol ST, Provud PR, Spoj SP WHERE ST.Stvol = K.Zarizeni and K.Zarizeni = SL.Zarizeni and ST.Spoj = SP.Spoj and PR.Idpu = K.Idpu and SL.Uziv = 'NOVA'and ST.AKT= 'A' order by ST.Stvol,SL.Drs,SL.Uziv ----------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- Dotaz pro aktualizaci digimemo ----------------------------------------------------------------------------------------------- SELECT ST.NazevSpojeni as Spojeni, ST.Stvol, ST.Spoj, K.Rks, SL.Zvuk, SL.TypZDMO, SL.ZDMO, K.DatPrej, K.DatPuPo, SL.AkslK, K.DatAktK, SL.Drs, SL.Uziv, T.TypZarizeni, T.Idty, T.Vyrobce, T.VykonZar, K.VlZar, K.Pus, SL.Lim, ST.Sta, ST.StaK, ST.Sk, ST.P2, ST.P3, ST.P4, ST.UC, PR.Dp, SP.Kapacita, ST.Tok, SL.Kralert, K.Idty, K.Idpu, PR.Idpu FROM Sluzba SL, Kmen K, Stvol ST, Provud PR, Spoj SP, TypTech T WHERE ST.Stvol = K.Zarizeni and K.Zarizeni = SL.Zarizeni and ST.Spoj = SP.Spoj and T.Idty = K.Idty and PR.Idpu = K.Idpu order by ST.Stvol -----------------------------------------------------------------------------------------------