JLABS

VaxNt.Základy SQL

Základy SQL

Bullet Ú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.

Bullet 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.

Bullet SELECT - výběr zobrazovaných dat. SELECT (anglicky "vybrat") má logicky parametry, kterými se říká

  • Jaká data chceme získat (seznam jejich jmen)
  • Odkud data chceme získat (FROM - "z")
  • Jakou mají splňovat podmínku (WHERE - "kde")
  • Jak se mají seřadit (ORDER BY - "seřadit podle")
  • Bullet Triky a ukázky

  • Výběr položek, které nejsou vůbec vyplněny. Podmínka X='' nefunguje, místo ní ale můžete napsat X IS NULL a obdobně IS NOT NULL. Takže můžeme vybrat všechny adresy s vyplněným PSČ příkazem "SELECT * FROM ADRESY WHERE PSC IS NOT NULL". Pozor na to, že NULL a prázdný řetězec '' se mohou v jemnostech lišit. Pokud tedy výběr nějaká data podle Vašeho názoru přeskakuje, vyplňte pečlivě variantu NULL i prázdný řetězec ...
  • Výběr položek se vzorovou hodnotou. K tomu slouží predikát LIKE, můžeme například napsat "SELECT * FROM ADRESY WHERE PSC LIKE 16%" a získáme seznam adres, jejichž PSČ začíná znaky 16 a pak pokračuje cokoli. Takže znak % zde zastupuje známou hvězdičku (*) při popisu vzoru souborů v adresářích (anglicky se takovému znaku říká wildcard a česky výstižně žolík).
  • Výběr pouze některých položek. Pokud nás nezajímají všechny položky, můžeme vyjmenovat pouze ty zajímavé. Například "SELECT Zarizeni,Drs,Uziv FROM Sluzba" sestaví seznam zařízení, druhů služeb a uživatelů z tabulky Sluzba. Pokud vybíráme položky z několika tabulek jedním dotazem, musíme naznačit, kam která vlastně patří. Napíšeme například
    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.Uziv
    
    Což je mimochodem onen strašný Uzizar ...

    Bullet 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
    -----------------------------------------------------------------------------------------------
    
    
    

    Bullet Hlavní obsahová stránka / rejstřík


  • JLABS Aktualizováno dne 20000623. Komentář: info@jlabs.cz