Category Archives: SQL příkazy

V rubrice SQL Příkazy jsou sdruženy články zaměřené na MS SQL Server, konkrétně na skriptování. Každý článek je věnován některému zajímavému SQL příkazu. Na své si přijdou jak začátečníci, tak i ostřílení borci… Mapa článků v rubrice dle abecedy »

SQL Dotazy – Nejčastější chyby začátečníků v SQL příkazech při dotazování

Články pro začátečníky zde na webu mají docela velký úspěch a návštěvnost a proto jsem se rozhodl na ně navázat. I ten nejlepší profík v jakémkoliv oboru někdy začínal a ze začátku dělal chyby. S úplnými základy SQL (není potřeba mít předchozí znalosti) se můžete seznámit v článcích: Základní SQL dotazy Základy SQL – Nejpoužívanější… Read More »

SQL THROW zavolání výjimky – alternativa k RAISERROR a rozdíly

Před časem jsem zde na webu zveřejnil článek o RAISERROR příkazu, 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. Syntaxe THROW Syntaxe THROW je v porovnání s RAISERROR jednodušší. Pro… Read More »

SQL RAISERROR – Jak zavolat ve skriptu error a přerušit skript

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 zavilat 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. V tomto článku se podíváme na první zmíněný příkaz. Příkaz THROW je… Read More »

SQL Přehledně zformátovaný kód – Chováme se ke kolegům zodpovědně!

Každý ví, že by to měl dělat, ale málokdo to skutečně dělá. Řeč je formátování 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. Proč je správně naformátovaný kód důležitý Každý kód (nejen… Read More »

SQL Synonym – alternativní název objektu v databázi

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]. To je velmi pohodlné, protože nemusíme tolik psát a je to i výhodné pokud pracujeme v databázi,… Read More »

SQL IDENTITY (Auto increment) – Automatické zvýšení hodnoty, popis argumentů příkazu

IDENTITY je v SQL Server vlastnost atributu (sloupce), která umožňuje automatické číslování záznamů, které jsou vkládány do tabulky. Tuto vlastnost lze využít na číselné datové typy. Typické využítí je pro identifikátory a primární klíče. K automatickému číslování lze využít také jiných možností, např SEQUENCE. Syntaxe IDENTITY Identity připojujeme jako vlastnost sloupce např. při založení tabulky… Read More »

SQL Schema – Užitečné skripty

Schéma je prostor (kontejner), který sdružuje databázové objekty – tabulky, pohledy, procedury, atd. Primárním důvodem pro zakládání schémat je logické oddělení určitých objektů od jiných a možnost upravovat přístupová práva pro jednotlivá schémata uživatelům. CREATE a DROP SQL Schema 1) Vytvoření SQL schéma: CREATE SCHEMA trzby; 2) Založení SQL schématu s ověřením existence: Pokud chceme… Read More »

SQL Cursor – Ukázka jak funguje SQL kurzor

Nedávno mi psal do komentáře David, že by jej potěšil článek o kurzorech (Chybí vám tu nějaký článek? Napiště si o něj). Mám teď volněji, tak se tu pokusím tady něco uvařit. Každopádně, kurzory jsou obecně velmi slow operace a používal bych je jako možnost poslední instance. Často jde úloha řešit bez kurzoru (rekurzivním dotazem,… Read More »

SQL View WITH SCHEMABINDING – hlídací pes nad view

Dříve jsem napsal větší článek, vé kterém jsem popisoval jak založit View v sql. V tomto článku se nenápadně nachází jeden SQL příkaz, který bych chtěl více objasnit zde. Jde o příkaz SCHEMABINDING, který se používá při založení view. SCHEMABINDING si můžeme představit jako hlídacího psa. Ten kontroluje, jestli v podkladové tabulce nedochází ke změnám,… Read More »

SQL Hierarchie Díl 2 – Rekurzivní dotaz do parent-child hierarchie

V minulém článku jsem popisoval, jak správně založit do sql tabulky hierarchii se zaměstnanci (viz. článek Jak správně vytvořit parent-child strukturu). Nyní bude řeč o tom, jak se do hierarchií dotazovat a jak s nimi pracovat. Můžete na to jít bláznivými skripty nebo od lesa. Způsob od lesa zahrnuje rekurzivní dotaz. Rekurzivní dotaz na hierarchie… Read More »

SQL # Tempová tabulka – Rozdíl mezi # a ## temp tabulkou

Tempová tabulka s hashtagem # nebo ## je dočasná tabulka, která je uložena v systémové databázi tempdb. Tabulka existuje pouze po dobu, po kterou je otevřena user session ID. Rozeznáváme 2 typy tempových tabulek: Lokální # tempová tabulka – je přístupná pouze v rámci dané session, tzn vidí ji pouze uživatel vykonávající skript Globální ## tempová… Read More »

SQL GO separátor – Vysvětlení příkazu a účelu GO

Možná jste si všimli, že se při generování skriptů v SQL Server používá v syntaxi příkaz nebo lépe řečeno separátor GO. Tento separátor se používá k oddělení dávek v rámci skriptu. Syntaxe, která se nachází v separátoru, je realizována v rámci jednoho exekučního plánu a až poté je realizována další dávka. Příklad na separátor GO… Read More »

SQL ROLLUP, CUBE, GROUPING SETS – Součty a mezisoučty

Co takhle rozšířit si GROUP BY klauzuli o využití užitečných operátorů? GROUP BY používáme v SQL při agregačních operacích a platí, že při jejím použítí dochází k agregaci přes všechny sloupce. Pomocí takto jednoduchého “groupování” ale nejsme schopni udělat součty a mezisoučty (Totals a subtotals). Existuje několik operátorů, pomocí kterých se jednoduše můžeme na Totals dotázat. Po… Read More »

SQL TRY CATCH & Error handling

Příkaz SQL TRY CATCH je navržen pro kontrolu code flow v případě, že nastane chybová situace (Error handling). Tato konstrukce obsahuje 2 bloky s tím, že je zde možné použít také transakci (viz článek o Transakcích). Pokud nastane chyba v prvním bloku – TRY..END , tak je aktivován mechanismus v CATCH..END bloku. Syntaxe SQL TRY CATCH BEGIN TRY BEGIN TRANSACTION… Read More »

SQL UNION ALL – Sjednocení dotazů

Operátor UNION ALL v SQL umožnujě provést sjednocení 2 výsledky dotazů s tím, že neodstraní duplicity v dotazech. Operátor vrátí všechny záznamy z obou dotazů bez ohledu na duplicity, které v nich existují. UNION ALL patří do skupiny tzv. SET operators spolu s UNION, EXCEPT, INTERSECT Syntaxe: SELECT Sloupec FROM dbo.Tabulka WHERE Podmínka   UNION ALL SELECT Sloupec FROM dbo.Tabulka WHERE Podmínka… Read More »

SQL IF THEN ELSE příkaz – Neplést s CASE

T-SQL Příkaz IF se používá ke kontrolování toku kódu hlavně při operacích, kde pvovádíme nějaké zásahy do db (DDL, DML operace) – třeba procedury. Můžete si ho celkem jednoduše splést s CASE příkazem. Chybou bývá, že se snažíme rvát sql IF do klauzule SELECT, což je chyba. Dotaz kde byste použili IF v příkazu SELECT vám… Read More »

SQL CTE WITH klauzule – dotazy a procedury budou přehlednější

SQL CTE neboli Common table expression je zjednodušeně dočasná tabulka (lépe řečeno result set) v podobě výrazu, po jehož deklarování pomocí klauzule WITH se na něj můžeme odkázat v SELECT, INSERT, DELETE nebo UPDATE skriptu. Pomocí CTE lze provádět (a je to dokonce doporučeno) rekurzivní dotazy v případě, že máme  nad tabulkou nadefinovánu parent – child hierarchii… Read More »

SQL CASE WHEN THEN ELSE s příklady

CASE je výraz (expression), který umožňuje aplikovat IF/THEN logiku v sql skritpu. Jde o podmíněnou logiku, kdy na základě podmínky (ve WHEN) vrátí hodnotu definovanou v THEN části. Existují 2 formy Simple CASE Expression (jednoduchá forma) a Searched CASE expression (forma pro vyhledávání). Konstrukce: CASE obsahuje tyto kompomenty – CASE, WHEN, THEN, ELSE, END Začínáme… Read More »

SQL Zpracování dotazu – V jakém pořadí SQL Server vyhodnocuje klauzule?

Pořadí, v jakém se SQL klauzule do dotazu zadávají je všeobecně celkem známé. Pořadí logického SQL zpracování dotazu (logical query processing) je ale jiné než pořadí, v jakém je píšeme do skriptu. Seznam SQL klauzulí v pořadí, jakém po sobě následují v SQL skriptu: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY Logicky je SQL… Read More »

SQL OVER() – Klauzule pro fajnšmekry

OVER můžeme v SQL zařadit do příkazů pracujících s tzv. Window functions. Tyto typy funkcí nám umožňují na data pohlížet nejen agregovaně (přes GROUP BY), ale můžeme se na funkční operace dívat přes více atributů => vlastně si vytváříme taková okénka a nad těmito ohraničenými daty aplikujeme různé výpočetní operace. Zní to složitě, ale na příkladu později uvidíte, že… Read More »