Využívá váš projekt databázi k ukládání dat? Potřebujete vyřešit spolupráci s tímto úložištěm rychle a efektivně? Nebo pracujete jenom s databázemi a hledáte, jak vaše SQL dotazy napsat lépe a elegantněji? Tato kniha nabízí více než tisíc tipů a triků, jak využít SQL a databáze na maximum.
Zkušený autor, který patří mezi špičkové experty na problematiku databází, vás v krátkých radách a návodech seznámí nejen se základními operacemi, ale i řadou pokročilých technik, které řeší určitý specifický problém.
Najdou zde inspiraci začátečníci, pokročilí, ale i profesionálové, kteří se bez SQL a databází ve svých projektech neobejdou. Jednotlivé rady jsou přehledně členěny do tématických sekcí, nalezení požadované odpovědi je tak dílem okamžiku.
SQL (Structured Query Language) je obecný nástroj pro manipulaci, správu a organizování dat uložených v databázi počítače. SQL je standardizovaný nástroj pro práci s relačními databázemi. SQL je především interaktivní dotazovací jazyk - umožňuje získat odpovědi i na velmi komplikované dotazy téměř ihned.
Je v prvé řadě určen uživatelům, i když jej v mnoha směrech využívají i tvůrci aplikací. SQL totiž není pouze dotazovací jazyk, s jeho pomocí je možno také definovat data, tedy strukturu tabulky, naplňovat sloupce tabulky (pole záznamů) daty a definovat vztahy a organizaci mezi položkami dat.
Smetanové brambory jako příloha
SQL je specializovaný programovací jazyk, který se používá ve vhodném prostředí buď uživatelsky nebo interaktivně k okamžitému řešení úloh (nejčastěji dotazy), nebo se jeho příkazy vkládají do hostitelského jazyka. SQL není však plnohodnotným samostatným programovacím jazykem, např. proto, že se v něm ve většině implementací nenachází řídicí programové konstrukce a další požadované prvky, které by měl obsahovat každý obecný programovací jazyk.
Pracuje s relačními databázemi, ve kterých se uživatel dívá na data v podobě soustavy provázaných tabulek. Každá tabulka představuje množinu dat, která je uspořádaná v řádcích (záznamech) a sloupcích (položkách). V převážné většině případů je výsledkem úlohy popsané v SQL nějaká množina dat z jedné nebo více tabulek, tzv. tabulka výsledků, která nemusí být vždy konečným produktem.
Jazyk SQL se používá také k vytváření náhledů (dotazů). Náhledy SQL umožňují vytvořit pro různé uživatele různé pohledy na struktury tabulek a na data. Každý uživatel tak vidí pouze ta data, která má vidět. Přitom data vidí uživatel opět v podobě jednoduché tabulky, i když ve skutečnosti data pocházejí z různých tabulek. Data zobrazovaná v náhledech jsou dynamická, tzn. znění-li se data v tabulkách (databázových souborech), změní se také data, které zobrazuje náhled.
Klíčovým pojmem v jazyku SQL je příkaz. Každý příkaz začíná klíčovým slovem. Slovo vyjadřuje orientačně, jakou činnost daný příkaz provádí. Každá klauzule začíná klíčovým slovem, jako jsou např. FROM nebo WHERE. Některé klauzule jsou povinné, jiné volitelné.
Jména objektů v jazyku SQL mají ve standardu délku 1-18 znaků, z toho první znak musí být písmeno, a jméno nesmí obsahovat mezery nebo interpunkční znaky. Při udávání jména je někdy potřeba jméno kvalifikovat, vyskytují‑li se stejná jména, a není jednoznačně jasné, na který objekt se jméno odkazuje. Kvalifikace jména se provádí pomocí kvalifikátoru '.' (tečka), např. <jméno_tabulky>.<jméno_sloupce>.
Jak upéct husu: Tradiční recept
Obecně se v SQL určuje typ dat pro sloupce (položky) tabulek, tedy to, jaké hodnoty jakého druhu mohou být ve sloupci obsaženy. Celá čísla v délce až šesti číslic (včetně znaménka). Celá čísla v délce až 11 číslic (včetně znaménka). Čísla v pohyblivé řádové čárce. Rozpětí čísel sahá od 2.22507385850720160*10-308 až k 1.79769313486231560*10+308. Znakové řetězce v délce n znaků. Povolené rozpětí pro n je interval od 1 do 32767. Umožňuje používat řetězců proměnné délky. Dovoluje ukládat řetězce různé délky v jednotlivých řádcích. Stanovuje se horní maximálně možná délka řetězce. Řetězec libovolného počtu znaků. Časový okamžik dne. Reálná čísla s vědeckotechnickým formátem. Binární data celkové délky ‘n’ Byte. Implicitně je size= 1 Byte. Max. délka je 32767 Byte. Binární datový typ libovolné délky.
Číselné konstanty se píší klasickým způsobem. Jediný problém může vzniknout v implicitním nastavení oddělovače desetinných míst, tzn. že v různých implementacích SQL se často může psát místo desetinné čárky tečka. Řetězcové konstanty se standardně píší v oddělovačích apostrofy, v některých implementacích je možno používat i uvozovky. Datové a časové konstanty se obvykle v SQL píší jako znakové řetězce. Některé implementace umožňují navíc používat tzv. vestavěné funkce.
Součástí standardu ANSI/ISO je zvláštní indikátor (požadavek na zacházení s chybějícími hodnotami), psaný obvykle symbolicky jako NULL. Další obvyklé konstanty jsou např. CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP pro systémové datum, systémový čas a systémové datum a čas.
Výrazy se skládají z operandů (konstanty, proměnné, jména sloupců, vestavěné funkce) a operátorů, s jejichž pomocí se získá výsledná hodnota výrazu. Priorita je obvyklá - násobení a dělení mají vyšší prioritu než sčítání a odečítání. Prioritu provádění operací je samozřejmě možno změnit použitím kulatých závorek. Mnohé implementace podporují další operátory a umožňují také fungování základních operací pro znakové řetězce a data typu datum nebo čas.
Mnohé implementace SQL obsahují řadu vestavěných funkcí, i když tyto nejsou ve standardu ANSI/ISO vůbec zmiňovány. V příkazech jazyka SQL se mohou, např. v databázovém prostředí Microsoft Access, prakticky používat nejen vestavěné funkce danému prostředí vlastní, ale jsou dokonce povoleny i uživatelsky definované funkce.
V řadě implementací se příkazy SQL, i když těchto příkazů není mnoho, rozdělují do dvou základních skupin. První skupinu tvoří příkazy pro definice dat - DDL (Data Definition Language), jež zabezpečují v podstatě tři základní činnosti vykonávané nad objekty databáze, tj. vytvořit objekt, vymazat existující objekt a změnit definici objektu. Druhou skupinu tvoří jazyk pro manipulaci s daty - DML (Data Manipulation Language), jež zahrnuje tyto tři základní příkazy: přidání (vymazání) jednoho nebo více řádků z (do) existující tabulky a aktualizace sloupcových hodnot určené množiny řádků.
CREATE TABLE je příkaz jazyka SQL sloužící k vytvoření nové tabulky SQL v aktuální databázi. Uživatel, který vytváří tabulku je jejím vlastníkem, jemu připadají veškerá privilegia, jež mu mimo jiné umožňují přidávat určitá práva (GRANT) uživatelům. DROP TABLE ruší v databázi data tabulky a indexy. Odkazy na tabulku uvedené ve výrazech SQL, náhledy založené na této tabulce, integrita omezení nebo uložených procedur nemohou být zrušeny. Tabulka užívaná aktivní transakcí nemůže být také zrušena, dokud se transakce neukončí.
Pokud se chcete naučit pracovat s databázemi, SQL příkazy jsou tím prvním, co potřebujete ovládat. Pokud jste úplný začátečník, doporučujeme vám nejprve přečíst náš článek Zoznám sa s SQL databázami, kde se dozvíte základy o tom, co je databáze a jak funguje.
Při každodenní práci s daty platí: SELECT - Výběr dat z databáze; WHERE podmínka; DŮLEŽITÉ: Vždy používejte WHERE podmínku! Filtrujte a tříděte data pomocí klauzulí jako LIMIT, ORDER BY a efektivně využívejte JOINy.
JOINy jsou nejsilnější nástroj SQL. Umožňují vám kombinovat data z více tabulek. Představte si situaci: Máte tabulku zaměstnanci a tabulku oddělení.
Práce s NULL hodnotami: NULL není totéž jako 0 nebo prázdný řetězec. SELECT plat + COALESCE(prémie, 0) AS celkový_příjem;
Filtrování a agregace: GROUP BY pozice; HAVING AVG(plat) > 2000; -- HAVING je správné pro agregace. INNER JOIN oddělení o ON z.oddělení_id = o.id;
Pro generování ID (primárních klíčů) v aplikačních databázích nebo primárních klíčů - surrogate key v datových skladech existuje řada přístupů. Většinou jsou používány GUIDy nebo numerická ID. Guidy jsou používány hlavně v aplikačních databázích a jsou generovány například pomocí funkce NEWID(). To má své výhody a nevýhody.
RAISERROR je příkaz, který vyvolá exception s tím, že jsme schopni přes severity (závažnost) ovlivnit, jestli skript bude nebo nebude pokračovat dále. Příkaz THROW je alternativní příkaz, který byl poprvé uveden v rámci SQL Server 2012. V určitých situacích potřebujeme uvnitř SQL skriptu zavolat chybu a skript přerušit. Typickým případe je třeba nesplnění nějakého data quality checku nebo potřeba zavolat příkaz uvnitř BEGIN/END TRY BEGIN/END CATCH konstrukce. V podobných případech můžeme použít příkaz RAISERROR nebo novější příkaz THROW.
SQL Synonym je příkaz, který je v SQL Server již od verze SQL Server 2005. Tato funkce slouží k tomu, že můžeme vytvořit referenci (alternativní jméno) na objekt v jeho kompletní cestě - four part name, tedy [Server].[Databáze].[schéma].[objekt].
V jednom z předchozích článků jsme zkoušeli, jak se dají dostat data z Excelu do SQL tabulky (Import Excelu do SQL databáze). Nyní si ukážeme jak udělat opak - tedy chceme dostat data z SQL databáze do Excelu - export tabulky.
Každý ví, že by to měl dělat, ale málokdo to skutečně dělá. Řeč je formátování sql kódu a jeho přehlednosti. Zejména ve větších týmech dokážou pravidla ohledně formátování zjednodušit a zefektivnit práci. Mnohdy i o několik desítek procent/mnoho man days v případě revizí/úprav kódu a refaktoringu kódu.
O autorovi Ľuboslav Lacko je předním slovenským odborníkem na databázové technologie a webové programování, působí jako školitel a konzultant.
| Téma | Co se naučíte |
|---|---|
| Základy | SELECT, INSERT, UPDATE, DELETE, WHERE, ORDER BY |
| Dotazy | JOINy, agregace, GROUP BY, HAVING |
| Výkon | Indexy, optimalizace, formátování kódu |
| Pokročilé | Procedury, triggery, transakce, RAISERROR/THROW |
| Nástroje | MySQL, PostgreSQL, MS SQL Server, online editory |