V takomto prípade sa musíme obrátiť na ďalšie možnosti, ktoré nám ponúka OpenOffice.org, a to konkrétne na jeho databázový modul Base. Krátke zoznámenie s ním sme si priniesli iba nedávno. Vtedy sme si uviedli, že aj keď to nie je nutné, je vhodné, aby sme sa zoznámili aspoň trochu so základmi SQL jazyka.
Pohľady nad tabuľkami
Pre praktickú prácu s SQL v OpenOffice.org nám bude úplne postačovať, ak sa bližšie (aj to nie úplne podrobne) zoznámime s príkazom SELECT, pretože pomocou neho vlastne dokážeme vytvárať potrebné zložité výberové podmienky.
Príkaz SELECT je veľmi dobre popísaný aj v nápovede OpenOffice.org. Je potrebné vyhľadať podľa kľúčového slova SELECT časť o návrhu výberov (v českej verzii OpenOffice.org je to nápoveda k návrhu dotazu).
Aby sme si vedeli predstaviť príklady, ktoré budeme pri výberových podmienkach zadávať presnejšie, predpokladajme, že si vytvoríme databázu, kde budeme mať tabuľku „adresy“. Ako adresné prvky (polia databázy) si zadáme meno, priezvisko, názov firmy, ulicu, PSČ, mesto, štát, pohlavie, dátum narodenia a pod. To, ako vytvoríme takúto tabuľku, si už neuvádzame, pretože predpokladáme, že to používatelia OpenOffice.org po už zmieňovanom návode vedia urobiť.
Názov poľa
Pravdaže, do takto vytvorenej tabuľky si zadáme naše kontaktné adresy. Predpokladajme však, že ju nebudeme využívať iba na firemné adresy, ale aj na súkromné. Teraz vzniká otázka, ako dokážeme túto jedinú tabuľku „rozdeliť“ na tieto dve skupiny. Na to nám slúžia pohľady nad tabuľkami, kde môžeme zadávať potrebné výberové kritéria.
Pohľad nad tabuľkou vlastne nevytvára novú tabuľku, ale je to vlastne iba SQL príkaz SELECT s vhodnými parametrami. A tu je ukryté tajomstvo, prečo je vhodné, aby sme sa s týmto príkazom bližšie zoznámili. Príslušné parametre môžeme zadávať vlastne v dvoch režimoch – priamo v návrhu pohľadu, alebo v SQL zobrazení. Nesmie nás prekvapiť, že zápisy niektorých výberových podmienok sa budú líšiť, pretože ich zápis v režime návrhu OpenOffice.org je iný, ako v si vyžaduje jazyk SQL. OpenOffice.org prevádza tieto rôzne formáty zápisov automaticky medzi sebou.
Teraz si ukážme niekoľko príkladov, ako si dokážeme urobiť niekoľko rôznych pohľadov. Ako prvé si vyberieme adresy firiem. Tu môže byť podmienka jednoduchá – napr. položka s názvom firmy nesmie byť prázdna. Pravdaže, môžeme mať aj iné kritéria, napr. neprázdnu položku IČO a pod. Pretože robíme výbery pre hromadnú korešpodenciu, vyberieme si iba tie položky, ktoré nás budú zaujímať v adrese (meno, priezvisko, názov firmy, ulicu, PSČ, mesto a štát).
Ako výberové kritérium musíme zapísať teraz do položky „firma“ to, že tento údaj nesmie byť prázdny. V OpenOffice.org je to zápis „IS NOT EMPTY“, v SQL jazyku je to zápis „IS NOT NULL“. Tu už vidíme spomínaný rozdiel medzi zápismi niektorých kritérií v OpenOffice.org a v SQL jazyku. Následne spustíme vykonanie zadaného SQL výberového príkazu, čím sa nám zobrazia iba firemné adresy. Nakoniec si vytvorený pohľad uložíme povedzme pod názvom „firmy“.
Upozorňujeme, že niektoré funkcie v hromadnej tlači nefungujú úplne korektne, pokiaľ ako zdroj databázy je použitá tabuľka a nie databáza. Napríklad nefunguje správne spomínaný príklad so zadaním podmienky, že niektoré pole je prázdne. Pokiaľ použijeme ako zdroj údajov databázu, nemusíme si pre tento konkrétny prípad robiť špeciálny pohľad, lebo filter v hromadnej tlači vtedy funguje naozaj korektne.
Zoznámenie sa s príkazom SELECT
Pozrime sa teraz, aký SQL príkaz sme takto vlastne „napísali“:
SELECT "meno", "priezvisko", "firma", "ulica", "psc", "mesto", "stat" FROM "adresy" WHERE (("firma" IS NOT NULL))
Čo tento príkaz znamená? Pokúsme sa ho preložiť do zrozumiteľnejšieho jazyka: „Vyber položky meno, priezvisko, firma, ulica, psc, mesto, stat z tabuľky adresy pokiaľ položka firma nie je prázdna.“
Názvy položiek sa v SQL jazyku nemusia zadávať do úvodzoviek, pokiaľ neobsahujú medzery, znaky s dĺžňami a pod. OpenOffice.org však radšej automaticky úvodzovky zadáva, aby preventívne zabránil prípadným kolíziám.
Podobne si môžeme vytvoriť druhý pohľad nad tabuľkou (nazvime ho napr. „osobne“), teraz pre súkromné adresy. Pri výbere položky „firma“ ju neoznačíme v zaškrtávacom políčku „viditeľné“, pretože nás vlastne v adrese nezaujíma, ale potrebujeme ju iba pre zadanie výberovej podmienky, ktorá je, že táto položka má byť prázdna. Podmienka výberu je v OpenOffice.org „IS EMPTY“ a v SQL jazyku „IS NULL“.
SELECT "meno", "priezvisko", "ulica", "psc", "mesto", "stat" FROM "adresy" WHERE (("firma" IS NULL))
Teraz si už môžeme uviesť niekoľko obecných príkladov príkazu SELECT:
SELECT čo vyberáme FROM odkiaľ SELECT čo vyberáme AS náhradné meno FROM odkiaľ SELECT čo vyberáme FROM odkiaľ WHERE podmienka SELECT funkcia FROM odkiaľ SELECT DISTINCT čo vyberáme FROM odkiaľ
Ako sme videli, zoznam vybraných položiek môže obsahovať viacero položiek, resp, ak chceme vybrať všetky položky, môžeme zadať znak hviezdičky:
SELECT * FROM "adresy"
Pokiaľ nie sme spokojní s názvami, ktoré máme definované v databáze, môžeme si ich vo výbere zmeniť pomocou náhradných mien, napríklad:
SELECT "meno" AS "krstné", "priezvisko", "ulica", "psc" AS "PSČ", "mesto", "stat" AS "štát" FROM "adresy"
Následne sa na položky výberu odvolávame cez ich náhradné názvy, t.j. už nebudeme používať položku „meno“, ale položku „krstné“ atď. Vo výbere položiek môžeme použiť aj niektoré funkcie, takže môžeme priamo prevádzať určité výpočty. Aby sme v záhlaví nemali názov funkcie, je vhodné tieto prípady kombinovať s náhradnými menami, napr. pre zistenie počtu súkromných adries v databáze môžeme zadať nasledovný príkaz:
SELECT COUNT(*) AS "počet súkromných" FROM "adresy" WHERE (("firma" IS NULL))
Funkcie, ktoré môžeme nad príslušnými údajmi urobiť, závisia od ich typu (napr. pre číselné údaje sú to funkcie priemer, počet, maximum, minimum, súčet a zoskupenie) a môžeme ich mať naraz aj viacero. Vzhľadom na tému dnešného článku sa nebudeme teraz nimi zaoberať. Spomeňme iba, že závisia od typu poľa, nad ktorým sa robia a OpenOffice.org nám automaticky ponúka tie, ktoré môžeme s daným poľom vôbec vykonať.
Ďalšou zaujímavou a potrebnou možnosťou je výber jedinečných údajov. Je možné, že vo výbere sa nám aj po zadaní výberových podmienok zobrazia rovnaké údaje vo viacerých riadkoch (napr. máme zadaného aj otca a syna, ktorí sa volajú rovnako a bývajú na tej istej adrese). Pokiaľ požadujeme jednoznačný výber, potom musíme zadať príkaz SELECT spolu s predikátom DISTINCT, napr.:
SELECT DISTINCT "meno", "priezvisko", "ulica", "psc", "mesto", "stat" FROM "adresy"
Výberové podmienky príkazu SELECT
Na záver predstavovania príkazu SELECT sa musíme ešte zoznámiť s výberovými možnosťami, ktoré môžeme zadávať v podmienke WHERE. V prvom rade sú to základné operátory, ktorých význam je jasný:
= (rovná sa) <> (nerovná sa) > (je väčší ako) < (je menší ako) >= (je väčší alebo rovný ako) <= (je menší alebo rovný ako)
Pokiaľ porovnávame textové údaje (rovná, alebo nerovná sa), uzatvárame ich medzi znaky apostrofov, napr:
SELECT * FROM "adresy" WHERE "meno"<>'Jozef'
Ďalej môžeme zadávať príkazové podmienky, ktoré sme si už naznačili v našich príkladoch s výberom adries podľa toho, či boli firemné alebo nie. Pretože vieme, že tieto zápisy môžu mať dve formy, uvedieme vždy najprv zápis pre OpenOffice.org a následne v SQL jazyku.
To, že OpenOffice.org nepoužíva rovnaké zápisy pre podmienky ako jazyk SQL, nie je až taký veľký problém. Napokon, rozdiely nie sú až také veľké a týkajú sa vlastne iba niekoľkých príkazov. Namiesto príkazu NULL používa OpenOffice.org príkaz EMPTY. V príkaze LIKE používa OpenOffice.org také náhradné znaky, aké poznáme z regulárnych výrazov, kým jazyk SQL má svoje vlastné náhradné znaky. A posledný rozdiel je v oddeľovačoch v príkaze IN.
OpenOffice.org | SQL | Význam |
---|---|---|
IS EMPTY | IS NULL | Podmienku spĺňa prázdne (nezadané) pole. |
IS NOT EMPTY | IS NOT NULL | Podmienku spĺňa neprázdne (zadané) pole. |
LIKE výraz | LIKE výraz | Podmienku spĺňa pole, ktoré obsahuje zadaný výraz. Vo výraze sa môžu nachádzať aj zástupné znaky. Vo formáte OpenOffice.org je to náhradný znak * pre ľubovoľný počet znakov a náhradný znak ? pre jeden znak. V SQL je to náhradný znak % pre ľubovoľný počet znakov a náhradný znak _ pre jeden znak. |
NOT LIKE výraz | NOT LIKE výraz | Podmienku spĺňa pole, ktoré neobsahuje zadaný výraz. Aj tu je, samozrejme, možné použiť zástupné znaky. |
BETWEEN x AND y | BETWEEN x AND y | Podmienku spĺňa pole, ktoré obsahuje hodnotu v zadanom rozsahu od x po y. |
NOT BETWEEN x AND y | NOT BETWEEN x AND y | Podmienku spĺňa pole, ktoré neobsahuje hodnotu v zadanom rozsahu od x po y. |
IN (a; b; c...) | IN (a, b, c...) | Podmienku spĺňa pole, ktoré obsahuje jeden zo zadaných prvkov. Polia sa v OpenOffice.org oddeľujú bodkočiarkami, v SQL čiarkami. |
NOT IN (a; b; c...) | NOT IN (a, b, c...) | Podmienku spĺňa pole, ktoré neobsahuje ani jeden zo zadaných prvkov. Oddeľovanie polí je také isté ako pri podmienke IN. |
=TRUE | =TRUE | Pole je pravdivé. |
=FALSE | =FALSE | Pole je nepravdivé. |
Pokiaľ používate viacero tabuliek spojených do jedného pohľadu, nezabudnite využiť náhradné mená, aby ste nemuseli následne zbytočne zadávať mená položiek komplikovane cez meno databázy, znak bodky a názov položky. To isté platí, pravdaže, aj pri zadaných funkciách. Týmto dosiahnete prehľadný a pohodlný prístup k vašim údajom.
Teraz si uveďme niekoľko potrebných detailov pre zadávanie podmienok. Pokiaľ chceme v textovom reťazi testovať niektorý zástupný znak (hviezdičku a pod.), môžeme ho uviesť za vyhľadávacím výrazom ako výnimku pomocou nasledujúcej postupnosti:
{escape 'zástupný znak'}
Napríklad vyhľadáme názvy všetkých firiem, ktoré začínajú na písmeno „A“ a majú v názve znak podčiarknutia:
SELECT "firma" FROM "adresy" WHERE "firma" LIKE 'A%_%' {escape '_'}
Na záver si ešte uveďme, ako sa zadávajú podmienky pre testovanie dátumových a časových údajov:
{D'YYYY-MM-DD'} – dátum {D'YYYY-MM-DD HH:MM:SS'} – dátum a čas {D'HH:MM:SS'} – čas
Napríklad, budeme chcieť zistiť mená a adresy všetkých ľudí, ktorí sa narodili v marci (predpokladajme, že dátum narodenia máme v položke datum_narodenia):
SELECT "meno", "priezvisko", "ulica", "psc", "mesto", "stat" FROM "adresy" WHERE ("datum_narodenia" BETWEEN {D'1900-03-01'} AND {D'2100-03-31'})
Roky sme zadali schválne vo veľkom rozsahu, lebo nás v tomto prípade nezaujímajú. My sme chceli sme zistiť iba mená a adresy ľudí narodených v mesiaci marec.
Pravdaže, jednotlivé podmienky sa dajú medzi sebou rôzne logicky kombinovať (operátory AND, OR a NOT), prípadne sa dá naraz robiť výber z viacerých tabuliek a pod. Popis týchto možností by však už naozaj značne presiahol rámec dnešného článku.
Vlastná podmienená hromadná tlač
Potom, ako sme si vytvorili tabuľky a pohľady nad nimi, tieto uložíme tak, aby sa stali súčasťou OpenOffice.org. Následne si otvoríme nový textový dokument (napr. pomocou pripravenej šablóny na hromadnú tlač) a spustíme cez menu Nástroje sprievodcu hromadnou tlačou. Ako sme už spomínali, jej problematike sme sa podrobne venovali v časopise LinuxEXPRES v čísle 12/2006. Preto si teraz iba pripomenieme, že na tretej záložke Vložiť blok s adresou vyberáme cez tlačidlo Vybrať databázu kontaktov zdroj údajov.
V otvorenom okne vidíme zobrazenú aj našu databázu adresy (počet zobrazených údajov závisí od počtu používaných databáz). Pokiaľ na ňu klikneme, zobrazia sa nám v novom okne Vybrať tabuľku jej všetky vnútorné tabuľky a aj pohľady nad nimi, t.j. vidíme tam zoznam troch položiek – adresy, firmy a osobne. Hoci sú posledne dve menované položky vlastne iba definície výberov (príkaz SELECT), v rámci hromadnej tlače sa správajú ako samostatné tabuľky, a preto je ako ich typ uvedený údaj tabuľka.
Teraz nám stačí vybrať ten pohľad, ktorý chceme v hromadnej tlači použiť – či už všetky adresy, firemné alebo osobné adresy. V rámci výberu si môžeme pozrieť cez tlačidlo Náhľad údaje, ktoré obsahuje príslušná tabuľka, takže sa môžeme presvedčiť, či naozaj obsahuje tie údaje, ktoré požadujeme. Výber nakoniec potvrdíme tlačidlom OK.
Tento zoznam zobrazuje obsah: firmy
Týmto krokom sa nám zmenil obsah zoznamu databázových zdrojov v okne Vybrať databázu kontaktov, kde sa ako typ zobrazuje konkrétne zvolená tabuľka. Jej definitívny výber musíme v tomto okne ešte raz potvrdiť tlačidlom OK.
Tabuľka firmy
Sprievodcu hromadnou korešpodenciou môžeme spustiť aj jednoduchšie. Stačí, ak si najprv zobrazíme zdroje dát (menu Zobraziť-Zdroje dát – klávesová skratka [F4]) a po prejdení na príslušnú tabuľku stlačíme tlačidlo Hromadná korešpondencia (v českej jazykovej lokalizácii je to tlačidlo Sériový list). V takom prípade sa nám automaticky spustí sprievodca s už prednastavenou vybranou tabuľkou ako zdrojom údajov.
Zdroje dát, tlačidlo Hromadná korešpondencia (nachádza sa nad písmenom „H“ textu v nápovede „Hromadná korešpodencia“)
Následne už pokračujeme úplne bežným postupom, ako pri klasickej hromadnej tlači, t.j. vyberieme si vzor adresy, priradíme prvky databázy k adresným poliam, v prípade potreby upravíme list pre hromadnú korešpodenciu a nakoniec listy vytlačíme či uložíme do súborov. To všetko sme však už preberali v minulých číslach magazínu LinuxEXPRES, a preto nemá zmysel, aby sme sa k tomu zbytočne znovu vracali.