SQL

Tvorba SQL dotazov

Tvorba dotazov sa používa na výber javov dát záznamov v tabuľke. Dotazy využívajú štandardtný jazyk SQL. Napr. môžete využiť túto syntax na Výber podľa atribútov alebo nástroj Query Builder na nastavenie definícií vrstiev.

Táto časť popisuje ako vytvoriť základný príkaz WHERE. Pre podrobnejšie informácie pozri SQL príručku pre tvorbu dotazov v prostredí ArcGIS.

Základné SQL dotazy

SELECT * FROM je prvá a základná časť dotazu.

Po prvej časti nasleduje obvykle názov dotazovanej vrstvy alebo datasetu doplnený klauzulou Where.

(Príklad časti SQL dotazu: SELECT * FROM WHERE).

Všeobecná skladba dotazu:

<Field_name> <Operator> <Value or String>

Pri zložených dotazoch sa používa:

<Field_name> <Operator> <Value or String> <Conector> <Field_name> <Operator> <Value or String> ...

Zátvorky () môžu byť použité pre definovanie poradia operácií v zložených dotazoch.

Stĺpec sa vyberá ako celok, preto nemožno zabrániť príkazu SELECT aby vrátil iba časť tohto stĺpca. Syntax SELECT * je pevne zadefinovaná. Z tohto dôvodu príkazy DISTINCT, ORDER BY a GROPU BY nemôžu byť použité v dotaze okrem použitia poddotazov. Pozri SQL príručku pre tvorbu dotazov v prostredí ArcGIS.

Pri budovaní dotazu možete vyberať názvy vrstiev alebo tabuliek z predpripravených rozbaľovacích zoznamov. Napr.:

SELECT * FROM countries WHERE:
"STATE_NAME" = 'California' AND NOT "POP2009" < 500000

Ďalšia časť výrazu je klauzula WHERE, ktorú musíte doplniť do dotazu. Základná syntax SQL WHERE vyzerá takto:

STATE_NAME = 'Alabama'

Dotaz nájde a vyberie hodnoty obsahujúce text "Alabama" v poli STATE_NAME.

SQL syntax

Použitie SQL syntax sa môže líšiť od rôzneho zdroja dát. Každá DBMS má vlastný SQL dialekt.

Na tvorbu dotazov v prostredí ArcGIS používate ArcGIS SQL dialekt, ktorý podporuje podmnožinu SQL možností. Pre personálnu geodatabazu môžete použiť syntax Microsoft Access. Pre SDE geodatabázu môžete použiť syntax SQL pre DBMS (ako napr. pre Oracle, SQL Server, DB2, Informix, alebo PostgreSQL).

Dialógové okno na tvorbu dotazov SQL WHERE Vám pomože používať správnu syntax pre databázu, na ktorú sa dotazujete. Nájdete tu zoznamy, vlastnosti, názvy polí a ich hodnoty s príslušnými oddeľovačmi. Dialógové okno Vám pomôže vybrať príslušné kľučové slová a operátory.

Vyhľadávanie textových reťazcov

Textové reťazce musia byť stále uzavreté jednoduchými zátvorkami. Napr.:

STATE_NAME = 'California'

Textové reťazce v dotazoch sú Case sensitive, t.j. využitie veľkých a malých písmen v dotaze, s výnimkou ak sa dotazujeme na názov vrstvy alebo tabuľky v personálnej geodatabáze. Ak chceme vykonať takéto case sensitive vyhľadávanie pre iné databázy, môžme využiť SQL fukcie na prevod takýchto hodnôt na rovnakú "výšku" písmen. Pre súborovú geodatabázu alebo vrstvy, použite UPPER alebo LOWER funkcie.

Dotaz vyberie zákazníka, kotrého priezvisko je Jones alebo JONES:

UPPER("LAST_NAME") = 'JONES'

Aj ostatné databázy obsahujú podobné funkcie. Personálna geodatabáza, napr. má funkciu UCASE a LCASE, ktoré vykonajú rovnakú činnosť.

Operátor LIKE (namiesto =) sa využíva na vyhľadávanie časti textového reťazca. Príklad ukazuje ako vyhľadáme názov Mississippi a Missouri vo vrstve štátov:

"STATE_NAME" LIKE 'Miss%'

Na mieste % (zástupný znak) môže byť jeden, sto alebo žiadny znak.
Ak chete vyhľadať pomocou zástupného znaku iba jeden znak, použite _.

Príklad ukazuje ako vyhľadáme Catherine Smith a Katherine Smith:

"OWNER_NAME" LIKE '_atherine smith'

Zástupné znaky použité vyššie sú použiteľné pre dáta uložené v rôznych databázach ako aj SDE geodatabáze. V personálnej geodatabáze môžete použiť * pre ľubovoľné čísla alebo ? pre jeden znak.

Ak používate zástupný znak v textovom reťazci s operátorom =, tento znak je považovaný za súčasť dotazu, nie textového reťazca.

Môžete tektiež použiť matematické operátory <; >; =>; <= a BETWEEN pre výber hodnôt. Príklad vyberie všetky mestá, ktorých názov začína od M po Z:

"CITY_NAME" >= 'M'

Pre textové reťazce možeme použiť aj operátor rôzne (<>).

Pozri Zástupné znaky.

Hodnota NULL

V dotazoch môžete použiť aj hodnotu NULL pre výber prázdnych záznamov, resp. majú hodnotu NULL. NULL sa vždy spája s vyrazmi IS alebo IS NOT.

Príklad ukazuje ako vyhľadať mestá v ktorých v roku 1996 nebola vyplnený údaj o populácii:

"POPULATION96" IS NULL

Opačný príklad, t.j. kde bol vyplnený údaj o populácii:

"POPULATION96" IS NOT NULL

Hľadanie čísiel

V číselných dotazoch môžete použiť aj operátory = (rovná sa), <> (rôzne), > (väčší), < (menší), => (väčší alebo rovný), <= (menší alebo rovný), alebo BETWEEN.

Napríklad:

"POPULATION96" >= 5000

Desatinné čísla sú vždy uvádzané s "." (bodkou) namiesto "," (čiarky) bez ohľadu na miestne nastavenia. Čiarka nemôže byť použitá ani ako oddeľovač desiatok, tisícok.

Výpočty

Výpočty môžu byť súčasťou dotazov a využívajú aritmetické operátory ako +, -, *a /.

Výpočty môžno vykonávať s číslami.

Naríklad:

"AREA" >= "PERIMETER" * 100

Výpočty môžno vykonávať aj medzi poliami.

Príklad ukazuje ako vyhľadať krajiny s hustotou obyvateĺstva menšou alebo rovnajúcov sa 25 ľudí na m2:

"POP1990" / "AREA" <= 25

Prednostné pravidlá pre operátory

Dotazy sú vyhodnocované podľa štandardných prednostných pravidiel.

Naríklad, časť dotazu, ktorá je ohraničená zátvorkami sa vykoná skôr ako neohraničená časť:

"HOUSEHOLDS" > "MALES" * "POP90_SQMI" + "AREA"

Výsledok je rozdielny, ak výraz vyzerá takto:

Príklad ukazuje ako vyhľadať krajiny s hustotou obyvateĺstva menšou alebo rovnajúcov sa 25 ľudí na m2:

"HOUSEHOLDS" > "MALES" * ("POP90_SQMI" + "AREA")

Kombinované dotazy

Kombinované dotazy sa môžu spájať pomocou operátorov AND alebo OR.

Príklad ukazuje ako vyberieme domy, ktorých obytná plocha je 1 500 m2 a priestor v garáži pre 3 a viac áut:

"AREA" > 1500 AND "GARAGE" > 3

Operátor NOT može byť použitý s AND aj OR.

Príklad by mal vybrať všetky štáty New England okrem štátu Maine:

"SUB_REGION" = 'New England' AND NOT "STATE_NAME" = 'Maine'

Poddotaz

Poddotaz je dotaz vnorený do iného dotazu. Je podporovaný iba pre geodatabázu. Može byť použitý ako predikát alebo agregačná funkcia alebo pre porovnanie dátr s hodnotami uloženými v inej tabuľke.

Naríklad, dotaz vyberie iba krajiny, ktoré sa nenachádzajú v tabuľke indep_countries:

"COUNTRY_NAME" NOT IN (SELECT "COUNTRY_NAME" FROM indep_countries)

Pre podrobnejšie informácie pozri SQL príručku pre tvorbu dotazov v prostredí ArcGIS.