Návrh dotazu

Režim návrhu dotazu umožňuje vytvořit a upravit databázový dotaz.

Pro přístup k tomuto příkazu...

V okně databázového souboru klepněte na ikonu Dotazy a poté zvolte Úpravy - Upravit


Ikona poznámky

Většina databází používá dotazy k filtrování a řazení tabulek. Pohledy nabízejí stejné funkce jako dotazy, ale na straně serveru. Pokud databázový server podporuje pohledy, je možné je použít k filtrování záznamů na serveru a zrychlení zobrazení.


Ikona poznámky

Zvolte příkaz Vytvořit pohled na kartě Tabulky v databázovém dokumentu. Zobrazí se okno Návrh pohledu, které je podobné zde popsanému oknu Návrh dotazu.


Rozvržení okna Návrh dotazu se ukládá s vytvořeným dotazem, ale nelze je uložit s vytvářeným pohledem.

Režim návrhu

Chcete-li vytvořit dotaz, klepněte v databázovém dokumentu na ikonu Dotazy a poté klepněte na Vytvořit dotaz v režimu návrhu.

V dolní části režimu návrhu definujete dotaz. Pro definici dotazu vyberte názvy databázových polí, které má dotaz obsahovat, a kritéria pro zobrazení polí. Chcete-li přeuspořádat sloupce v dolní části režimu návrhu, přetáhněte záhlaví sloupce na nové místo nebo vyberte sloupec a stiskněte +kurzorové klávesy.

V horní části návrhu jsou zobrazeny ikony lišty Návrh dotazu a lišty Návrh.

Pokud chcete dotaz ověřit, poklepejte na název dotazu v databázovém dokumentu. Výsledek dotazu se zobrazí v tabulce podobné zobrazení zdroje dat. Poznámka: zobrazená tabulka je pouze dočasná.

Klávesy v režimu návrhu dotazu

Klávesa

Funkce

F4

Náhled

F5

Spustit dotaz

F7

Přidat tabulku nebo dotaz


Procházet

When you open the query design for the first time, you see a dialog in which you must first select the table or query that will be the basis for your new query.

Poklepáním na pole je přidáte do dotazu. Přetáhnutím určíte relace.

Ikona poznámky

Při vytváření dotazu není možné vybrané tabulky měnit.


Odstranění tabulek

Chcete-li odstranit tabulku z návrhu, klepněte pravým tlačítkem na horní okraj tabulky. Z místní nabídky zvolte příkaz Odstranit. Další možností je klepnout na tabulku a stisknout klávesu Delete.

Posunutí tabulky a změna velikosti tabulky

Tabulky je možné podle potřeby uspořádat a změnit jejich velikost. Jestliže chcete tabulku posunout, přetáhněte její horní okraj na požadovanou pozici. Okno tabulky zvětšíte nebo zmenšíte tak, že umístíte kurzor myši na jeho ohraničení nebo roh a tažením myši jej upravíte na požadovanou velikost.

Relace mezi tabulkami

Pokud existují mezi názvem pole v jedné tabulce a názvem pole v druhé tabulce datové relace, je možné v dotazu tyto relace použít.

Příklad: máte sešit pro zboží (identifikované číslem) a sešit pro zákazníky, ve kterém pomocí odpovídajících čísel zboží zaznamenáváte všechno zboží, které si zákazník objedná. Mezi těmito dvěma datovými poli "číslo zboží" tedy existuje relace. Pokud chcete vytvořit dotaz, který vrací všechno zboží, které si zákazník objednal, musíte získat data z obou sešitů. Musíte tedy LibreOffice sdělit, jaká existuje relace mezi daty v těchto dvou sešitech.

To zajistíte tak, že klepnete na název pole v tabulce (např. pole "Zboží-Číslo" v tabulce Zákazníci), podržíte tlačítko myši a přetáhnete název pole na název pole v druhé tabulce ("Zboží-Číslo" v tabulce Zboží). Když uvolníte tlačítko myši, zobrazí se čára spojující obě pole. Do výsledného SQL dotazu se vloží odpovídající podmínka, že obsah polí musí být roven.

Vytvoření dotazu, který je založen na několika sešitech, je možné jen pokud používáte LibreOffice jako rozhraní k relační databázi .

Ikona poznámky

V dotazu není možné přistupovat k tabulkám z jiných databází. Dotazy nad několika tabulkami lze vytvořit jen v jedné databázi.


Určení typu propojení

Pokud poklepete na čáru spojující dvě propojená pole nebo zvolíte příkaz Vložit - Nová relace, je možné určit druh propojení v dialogovém okně Relace.

Případně je možné pomocí klávesy Tab vybrat relaci, poté stisknutím Shift+F10 zobrazit místní nabídku a zvolit příkaz Upravit. Některé databáze podporují jen některé druhy relací.

Odstranění relací

Chcete-li odstranit relaci mezi dvěma tabulkami, klepněte na spojnici a poté stiskněte klávesu Delete.

Případně je možné odstranit odpovídající záznamy v poli Použitá pole v dialogovém okně Relace nebo pomocí klávesy Tab vybrat relaci (zobrazí se zvětšeně), poté stisknutím Shift+F10 zobrazit místní nabídku a zvolit příkaz Odstranit.

Definování dotazu

Vyberte podmínky pro definici dotazu. Každý sloupec představuje jedno datové pole. Podmínky v jednom řádku se spojí booleovským AND.

Zadání názvu pole

Nejprve vyberte všechny názvy polí, která chcete přidat do dotazu. To je možné udělat buď přetažením, nebo poklepáním na název pole v okně tabulky. Pokud chcete použít přetažení, přetáhněte název pole do spodní části okna návrhu. Tak je možné určit, do kterého sloupce chcete pole přidat. Pokud na název pole poklepete, bude přidán do následujícího volného sloupce.

Odstranění názvů polí

Chcete-li odstranit z dotazu název pole, klepněte na záhlaví pole a v místní nabídce zvolte Odstranit.

Uložení dotazu

Pomocí ikony Uložit na Standardní liště dotaz uložíte. Zobrazí se dialogové okno, ve kterém zadáte název dotazu. Pokud databáze podporuje schémata, je možné také zadat schéma.

Schéma

Zadejte název schématu, které se přiřadí dotazu nebo pohledu.

Název dotazu nebo název pohledu

Zadejte název dotazu nebo pohledu.

Filtrování dat

Chcete-li filtrovat data dotazu, nastavte požadované možnosti v dolní části okna návrhu. K dispozici máte následující řádky:

Pole

Zadejte název datového pole, na které se odkazujete v dotazu. Všechna nastavení v nižších řádcích sloupce se vztahují k tomuto poli. Pokud aktivujete buňku klepnutím myši, uvidíte tlačítko šipky, které vám umožňuje vybrat pole. Volba "Název tabulky.*" vybere všechna datová pole dané tabulky.

Alias

Zadejte alias datového pole. V dotazu se místo skutečného názvu pole použije tento alias. To umožňuje používat uživatelem definované popisky slopců. Např. pokud se datové pole jmenuje DČ a místo tohoto názvu chcete v dotazu zobrazit ČísloDílu, zadejte jako alias ČísloDílu.

V SQL příkazu jsou aliasy definovány následovně:

SELECT sloupec AS alias FROM tabulka.

Například:

SELECT "DČ" AS "ČísloDílu" FROM "Díly"

Tabulka

Databázová tabulka, ve které se nachází vybrané datové pole. Pokud aktivujete buňku klepnutím myši, zobrazí se šipka, která vám umožní vybrat jinou tabulku ze současného dotazu.

Řadit

V této buňce je možné zvolit řazení: vzestupně, sestupně a neseřazeno. Textová pole se řadí abecedně (A až Z) a číselná pole číselně (0 až 9). U většiny databází může administrátor nastavit možnosti řazení.

Viditelné

Pokud zaškrtnete vlastnost Viditelné, zobrazí se dané pole v dotazu. Pokud pole používáte jen pro zadání podmínky, nemusíte jej zobrazovat.

Kritérium

Určuje kritéria, podle kterých se filtruje obsah datového pole.

Nebo

Do každého řádku s tímto názvem je možné zadat další kritérium pro filtrování. Více kritérií v jednom sloupci bude spojeno logickým operátorem OR.

Chcete-li vložit další řádek pro funkce, je možné použít také místní nabídku záhlaví řádku v dolní oblasti návrhu dotazu:

Funkce

Výběr funkcí závisí na databázi.

Pokud pracujete s databází HSQL, v seznamu Funkce najdete následující možnosti:

Možnost

SQL

Význam

Bez funkce

Nebude spuštěna žádná funkce.

Průměr

AVG

Vypočítá aritmetický průměr pole.

Počet

COUNT

Zjistí počet záznamů v databázi. Prázdná pole se buď počítají (a), nebo nepočítají (b).

a) COUNT(*): Zadáte-li jako argument funkce hvězdičku, spočítá funkce všechny záznamy v tabulce.

b) COUNT(sloupec): Zadáte-li jako argument funkce název pole, spočítá funkce pouze ta pole, která obsahují nějakou hodnotu. Nezadané hodnoty (prázdná pole) počítány nebudou.

Maximum

MAX

Zjistí nejvyšší hodnotu pole.

Minimum

MIN

Zjistí nejnižší hodnotu pole.

Součet

SUM

Sečte všechny hodnoty přidružených polí.

Seskupit

GROUP BY

Seskupí data dotazu podle daného pole. Funkce se spouští podle určených skupin. V SQL tato volba odpovídá klauzuli GROUP BY. Pokud přidáte kritérium, zobrazí se toto pole v SQL HAVING.


Funkce je možné zadat také přímo do SQL dotazu. Syntaxe je:

SELECT FUNKCE(sloupec) FROM tabulka.

Funkci pro výpočet součtu je například možné volat ve výrazu SQL následujícím způsobem:

SELECT SUM("Cena") FROM "Výrobek".

Kromě funkce Seskupit jsou výše zmíněné funkce tzv. agregační funkce. Jsou to funkce, které počítají data pro vytváření souhrnů z výsledků. Také mohou být k dispozici další funkce, které nejsou vypsány v seznamu. To závisí na použitém databázovém systému a aktuální stavu ovladače Base.

Chcete-li použít funkce, které nejsou v seznamu, musíte je zadat do Pole.

Také volání funkce je možné přiřadit alias. Pokud nechcete v záhlaví sloupce zobrazit název funkce, zadejte požadované jméno do Alias.

Odpovídající funkce v příkazu SQL je:

SELECT FUNKCE() AS alias FROM tabulka

Příklad:

SELECT COUNT(*) AS počet FROM "Položka".

Ikona poznámky

Spustíte-li tuto funkci, není již možné vložit do dotazu další sloupce jinak, než získat tyto sloupce jako funkci Group.


Příklady

V následujícím příkladu je dotaz spuštěn nad dvěma tabulkami: tabulkou Položka s polem Položka_č a tabulkou Dodavatelé s polem Název_dodavatele. Obě tabulky mají navíc společný název pole Dodavatel_č.

K vytvoření dotazu obsahujícího všechny dodavatele, kteří dodávají více než tři položky, je nutné provést kroky uvedené dále.

  1. Do návrhu dotazu vložte tabulky Položka a Dodavatelé.

  2. Spojte pole Dodavatel_č obou tabulek, pokud dosud relace tohoto typu neexistuje.

  3. Poklepejte na pole "Zboží_č" v tabulce "Zboží". Zobrazte si pomocí místní nabídky řádek Funkce a zvolte funkci Počet.

  4. Zadejte hodnotu >3 jako kritérium a zrušte zaškrtnutí políčka v poli Viditelné.

  5. V tabulce Dodavatelé poklepejte na pole Název_dodavatele a vyberte funkci Seskupit.

  6. Spusťte dotaz.

Existuje-li v tabulce Položka pole cena (jako jednotlivá cena výrobku) a pole Dodavatel_č (jako dodavatel daného výrobku), potom je možné zadáním následujícího dotazu obdržet průměrnou cenu za položku dodávanou dodavatelem:

  1. Do návrhu dotazu vložte tabulku Položka.

  2. Poklepejte na pole Cena a Dodavatel_č.

  3. Pro pole Cena povolte řádek Funkce a zvolte funkci Průměr.

  4. Možné je také zadat text Average do řádku pro zástupný název (alias).

  5. Pro pole Dodavatel_č vyberte funkci Group.

  6. Spusťte dotaz.

K dispozici jsou následují příkazy a symboly místní nabídky:

Funkce

Zobrazí nebo skryje řádek pro výběr funkcí.

Název tabulky

Zobrazí nebo skryje řádek s názvem tabulky.

Alias

Zobrazí nebo skryje řádek s aliasem.

Jedinečné hodnoty

Zobrazí pouze jedinečné hodnoty. To platí o záznamech, které v daném poli obsahují stejné údaje několikrát. Je-li příkaz Jedinečné hodnoty aktivní, uvidíte z těchto záznamů pouze jeden (DISTINCT). Jinak uvidíte všechny záznamy splňující kritéria dotazu (ALL).

Příklad: pokud se v databázi adres několikrát objevuje "Novák", po zvolení příkazu Jedinečné hodnoty se v dotazu "Novák" zobrazí jen jednou.

Pokud dotaz obsahuje několik polí, musí být jedinečná kombinace hodnot ze všech polí. Příklad: v adresáři máte jednou "Nováka v Brně" a dvakrát "Nováka v Praze". S příkazem Jedinečné hodnoty použije dotaz pole "příjmení" a "město" a ve výsledku dotazu zobrazí jednou "Nováka v Brně" a jednou "Nováka v Praze".

V SQL odpovídá tento příkaz predikátu DISTINCT.

Limit

Umožní stanovit maximální počet záznamů, které dotaz vrátí.

Pokud je zadán Limit, získáte nejvýše tolik řádků, kolik udává stanovený počet. Jinak se zobrazí všechny záznamy odpovídající kritériím dotazu.

Formulování podmínek filtru

Při vytváření podmínek filtru máte k dispozici různé operátory a příkazy. Kromě relačních operátorů jsou k dispozici také příkazy specifické pro SQL, které kontrolují obsah databázových polí. Pokud použijete příkazy v syntaxi LibreOffice, automaticky je LibreOffice převede na odpovídají SQL syntax. Možné je také přímo zadat SQL příkaz. Následující tabulka poskytuje přehled operátorů a příkazů:

Operátor

Význam

Případy, kdy je podmínka splněna

=

se rovná

Obsah pole se shoduje se zadaným výrazem.

Operátor = se v polích dotazu nezobrazí. Zadáte-li hodnotu bez operátoru, bude automaticky použit operátor =.

<>

není rovno

Obsah pole se neshoduje se zadaným výrazem.

>

je větší než

Obsah pole je větší než zadaný výraz.

<

je menší než

Obsah pole je menší než zadaný výraz.

>=

je větší nebo se rovná

Obsah pole je větší nebo roven zadanému výrazu.

<=

je menší nebo se rovná

Obsah pole je menší nebo roven zadanému výrazu.


Příkaz LibreOffice

SQL příkaz

Význam

Případy, kdy je podmínka splněna

IS EMPTY

IS NULL

nezadáno

... The value of the field is empty. For Yes/No fields with three states, this command automatically queries the undetermined state (neither Yes nor No).

IS NOT EMPTY

IS NOT NULL

není prázdné

Pole není prázdné.

LIKE

(zástupný znak * pro libovolný počet znaků

zástupný znak ? pro jediný znak)

LIKE

(zástupný znak % pro libovolný počet znaků

zástupný znak _ pro jediný znak)

je prvkem

Datové pole obsahuje zadaný výraz. Zástupný znak (*) označuje, zda výraz x leží na začátku (x*), na konci (*x) nebo uprostřed obsahu pole (*x*). Jako zástupný znak v SQL dotazu je možné zadat buď znak z SQL '%', nebo v rozhraní LibreOffice zástupný znak známý ze souborového systému (*).

Zástupné znaky * nebo % nahrazují libovolný počet znaků. Znak otazníku (?) v rozhraní LibreOffice nebo podtržítka (_) v SQL dotazu představuje přesně jeden znak.

NOT LIKE

NOT LIKE

není prvkem

Pole neobsahuje zadaný výraz.

BETWEEN x AND y

BETWEEN x AND y

patří do intervalu [x,y]

Pole obsahuje hodnotu, která se nachází mezi dvěma hodnotami x a y.

NOT BETWEEN x AND y

NOT BETWEEN x AND y

nepatří do intervalu [x,y]

Pole obsahuje hodnotu, která se nenachází mezi dvěma hodnotami x a y.

IN (a; b; c...)

Jako oddělovač jednotlivých hodnot je v seznamu vždy používán středník.

IN (a, b, c...)

obsahuje a, b, c…

Pole obsahuje jeden ze zadaných výrazů a, b, c,… Je možné zadat libovolný počet výrazů. Výsledek dotazu je určen klauzulí OR. Výrazy a, b, c… mohou být buď čísla, nebo znaky.

NOT IN (a; b; c...)

NOT IN (a, b, c...)

neobsahuje a, b, c…

Pole neobsahuje žádný ze zadaných výrazů a, b, c,...

= TRUE

= TRUE

má hodnotu Pravda

Pole má hodnotu Pravda.

= FALSE

= FALSE

má hodnotu Nepravda

Pole má hodnotu Nepravda.


Příklady

='Polsko'

Vrátí pole, která obsahují výraz "Polsko".

<'2001-01-10'

Vrátí data, která jsou starší než 10. ledna 2001.

LIKE 'ko?ec'

Vrátí pole, která obsahují např. výraz "kopec" nebo "kotec".

LIKE 'S*'

Vrátí pole, která obsahují například výraz "Suchdol".

BETWEEN 10 AND 20

Vrátí pole, jejichž obsah se nachází mezi hodnotami 10 a 20. (Pole mohou být buď textová, nebo číselná.)

IN (1; 3; 5; 7)

Vrátí pole, která mají libovolnou z hodnot 1, 3, 5, 7. Pokud pole obsahuje číslo položky, je například možné vytvořit dotaz, který vrátí položku s daným číslem.

NOT IN ('Novák')

Vrátí pole, která neobsahují výraz "Novák".


Escape sekvence Like: {escape 'escape-character'}

Příklad: select * from Zboží where NázevZboží like 'Tužka *%' {escape '*'}

Tento příklad zobrazí všechny záznamy, kde název zboží začíná 'Tužka *'. To znamená, že je možné hledat také znaky, které se jinak identifikují jako zástupné znaky, např. *, ?, _, % nebo tečku.

Escape sekvence Outer Join: {oj outer-join}

Příklad: select Article.* from {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}

Dotazy na textová pole

Jestliže chcete filtrovat obsah textových polí, musíte uzavřít výraz do jednoduchých uvozovek. Rozdíl mezi velkými a malými znaky závisí na použité databázi. U LIKE podle definice závisí na velikosti znaků (ale některé databáze nejsou tak striktní).

Dotazy na datová pole

Datová pole se kvůli zřetelné identifikaci označují jako #Date#. V podmínkách použité konstanty (literály) data, času nebo data/času mohou mít escape syntaxi SQL nebo výchozí syntaxi SQL2.

Prvek datového typu

Escape syntaxe SQL č. 1 - může být zastaralá

Escape syntaxe SQL č. 2

Syntaxe SQL2

Datum

{D'YYYY-MM-DD'}

{d 'YYYY-MM-DD'}

'YYYY-MM-DD'

Čas

{D'HH:MM:SS'}

{t 'HH:MI:SS[.SS]'}

'HH:MI:SS[.SS]'

Datum a čas

{D'YYYY-MM-DD HH:MM:SS'}

{ts 'YYYY-MM-DD HH:MI:SS[.SS]'}

'YYYY-MM-DD HH:MI:SS[.SS]'


Příklad: select {d '1999-12-31'} from svět.roky

Příklad: select * from mojetabulka where roky='1999-12-31'

Všechny výrazy (literály) data musí být uzavřeny v jednoduchých uvozovkách. (Podrobnosti naleznete v dokumentaci k databázi a konektoru, které používáte.)

Dotazy na pole s hodnotami Yes/No (Ano/Ne)

Chcete-li filtrovat pole typu Ano/Ne, použijte pro tabulky dBASE následující syntaxi:

Stav

Kritérium dotazu

Příklad

Ano

pro tabulky ve formátu dBASE: není rovno žádné zadané hodnotě

=1 vrátí všechny záznamy, kde má pole Ano/Ne stav Ano nebo Zapnuto (zobrazeno černě),

Ne

.

=0 vrátí všechny záznamy, kde má pole Ano/Ne stav Ne nebo Vypnuto (neoznačeno).

Null

IS NULL

IS NULL vrátí všechny záznamy, kde pole Ano/Ne není ve stavu ani Ano ani Ne (označeno šedě).


Ikona poznámky

Tato syntaxe závisí na použitém databázovém systému. Poznámka: pole Ano/Ne se mohou chovat různě (mohou nabývat dvou stavů místo tří).


Parametrické dotazy

Parametrické dotazy umožňují uživateli při vykonávání zadat vstupní hodnoty. Tyto hodnoty jsou použity v rámci kritérií pro výběr záznamů, které se mají zobrazit. Každé hodnotě odpovídá název parametru, který se zobrazí s výzvou pro zadání hodnoty při spuštění dotazu.

Názvy parametrů jsou uvozeny dvojtečkou, a to v režimu návrhu i SQL. Tento zápis se použije, kdekoliv se má hodnota vyskytnout. Pokud se stejná hodnota objevuje v dotazu víckrát, použije se tentýž název parametru.

V nejjednodušším případě, kdy uživatel vkládá hodnotu, které se mají záznamy rovnat, je název parametru s uvozující dvojtečkou zadán do řádku Kritérium. V režimu SQLto lze zapsat jako WHERE "Pole" = :Nazev_parametru

Ikona upozornění

Názvy parametrů nesmí obsahovat některý ze znaků <mezera>`!"$%^*()+={}[]@'~#<>?/,. Rovněž nemohou být stejné jako názvy polí nebo vyhrazená slova jazyka SQL. Mohou být stejné jako aliasy.


Ikona tipu

Při výběru záznamů podle části obsahu textového pole je užitečné přidat skrytý sloupec s kritériem "LIKE '%' || :Cast_pole || '%'". Tím vybereme záznamy s přesnou shodou. Požadujeme-li, aby při testování nezáleželo na velikosti písmen, řešením může být použití pole LOWER (Nazev_pole) a kritéria LIKE LOWER ( '%' || :Cast_pole || '%' ). Důležité jsou mezery v kritériu: jsou-li vynechány, syntaktický analyzátor SQL celé kritérium interpretuje jako řetězec, s nímž se má obsah shodovat. V režimu SQL lze toto zapsat jako LOWER ( "Nazev_pole" ) LIKE LOWER ( '%' || :Cast_pole || '%' ).


Parametrické dotazy lze použít jako zdroj dat pro podformuláře, u nichž může uživatel omezit zobrazené záznamy.

Vstup parametru

V dialogovém okně Vstup parametru je uživatel požádán o zadání hodnot parametrů. Zadejte hodnotu pro každý parametr dotazu a potvrďte klepnutím na OK nebo stisknutím klávesy Enter.

Hodnoty zadané uživatelem mohou obsahovat jakékoliv znaky, které jsou povolené pro SQL příslušného kritéria; to může záviset na použitém databázovém systému.

Ikona tipu

Je-li potřeba získat záznamy pomocí komplexnějších kritérií, je možné jako součást hodnoty použít zástupné znaky SQL "%" (libovolný řetězec) nebo "_" (libovolný jediný znak).


Režim SQL

SQL neboli Structured Query Language je jazyk, který popisuje příkazy sloužící k aktualizaci a správě relačních databází.

V LibreOffice nemusíte pro většinu dotazů znát SQL, jelikož není nutné zadávat přímo SQL příkazy. Když vytvoříte dotaz v režimu návrhu, LibreOffice ho automaticky převede na odpovídající syntaxi SQL. Příkazy SQL se pro vytvořený dotaz zobrazí, pokud se tlačítkem Režim návrhu zap/vyp přepnete do režimu SQL.

Dotaz je možné také zadat přímo v SQL. Zvláštní syntaxe ovšem závisí na použitém databázovém systému.

Pokud zadáváte SQL dotaz přímo, je možné použít specifické možnosti SQL, které nelze zadat v grafickém rozhraní v Návrhu dotazu. Tyto dotazy je nutno spouštět v nativním režimu SQL.

Po klepnutí na ikonu Spustit SQL příkaz přímo v režimu SQL je možné zadat dotaz, který nezpracovává LibreOffice.