Online MS-SQL kompiler
V tomto MS-SQL tutoriálu si ukážeme, jak lze vyzkoušet základní T-SQL dotazy i bez instalace Microsoft SQL Serveru na náš počítač. Toto řešení je určené zejména pro studenty s operačním systémem macOS, kde není práce s Microsoft SQL Serverem tak přímočará jako ve Windows. Místo lokální instalace použijeme online kompiler OneCompiler.
Práce s online kompilerem
Při běžné práci s databází máme databázový server, databázi, tabulky a data. Tabulku vytvoříme jednou a později nad ní spouštíme další příkazy. Online kompiler však funguje jinak. Nabídne nám dočasné prostředí, které je vhodné pro krátké ukázky a testování syntaxe.
Výhodou je, že nemusíme instalovat SQL Server, Visual Studio ani žádný jiný databázový klient. Nevýhodou je, že se nemůžeme chovat stejně jako v dlouhodobě běžící lokální databázi. Každá ukázka (série SQL dotazů) musí obsahovat vše, co ke svému běhu potřebuje. Proto budeme v online kompilerech dodržovat tento postup:
- vytvoříme tabulku,
- vložíme do tabulky testovací data,
- provedeme dotaz nebo změnu,
- vypíšeme výsledek.
Když v dotazu používáme tabulku EMPLOYEE, musí
být ve stejné ukázce (scénáři) také příkaz, který tabulku
vytvoří.
OneCompiler
Nástroj, který si nyní ukážeme, je OneCompiler. Přejděme tedy na stránku OneCompiler, kde se po načtení zobrazí editor, ve kterém bude připravený ukázkový SQL kód:

Skript spustíme tlačítkem Run. Použít můžeme také klávesovou zkratku Ctrl + Enter. Výstup SQL skriptu se zobrazí v pravé polovině stránky:

V ukázce se nejdříve vytvoří tabulka EMPLOYEE. Poté se do
ní vloží tři řádky a nakonec příkaz SELECT vypíše pouze
zaměstnance z oddělení Sales.
Nejčastější chyba při spuštění dotazu
Nejčastější chyba vznikne ve chvíli, kdy spustíme jen navazující část skriptu. Zkusme do editoru vložit například jen tento SQL dotaz:
SELECT * FROM EMPLOYEE WHERE dept = 'Sales';
Následně ho spusťme a uvidíme, že kompiler vrátí chybu podobnou této:

Chyba Invalid object name 'EMPLOYEE' znamená, že databázový
server v daném běhu nezná tabulku EMPLOYEE. Tabulka nebyla
vytvořena, takže nad ní nelze spustit dotaz. Správně proto do ukázky
vložíme celý scénář:
CREATE TABLE EMPLOYEE ( empId int, name varchar(15), dept varchar(10) ); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (1, 'Clark', 'Sales'); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (2, 'Dave', 'Accounting'); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (3, 'Ava', 'Sales'); SELECT * FROM EMPLOYEE WHERE dept = 'Sales';
Tento zápis je pro online editor spolehlivější. Nezáleží na tom, co bylo v prostředí spuštěno předtím. Skript si nejdříve připraví tabulku, data a potom provede dotaz.
Úprava dat a struktury tabulky
Stejné pravidlo platí i pro úpravy. Pokud chceme spustit příkaz
UPDATE, musíme si nejprve připravit data, poté je upravit a
nakonec vypsat výsledek:
CREATE TABLE EMPLOYEE ( empId int, name varchar(15), dept varchar(10) ); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (1, 'Clark', 'Sales'); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (2, 'Dave', 'Accounting'); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (3, 'Ava', 'Sales'); UPDATE EMPLOYEE SET dept = 'Marketing' WHERE empId = 1; SELECT * FROM EMPLOYEE;
Výstup nám ukáže, že zaměstnanec s hodnotou empId = 1 už
není v oddělení Sales, ale v oddělení Marketing.
Podobně můžeme otestovat změnu struktury tabulky pomocí
ALTER TABLE:
CREATE TABLE EMPLOYEE ( empId int, name varchar(15), dept varchar(10) ); ALTER TABLE EMPLOYEE ADD email varchar(50); INSERT INTO EMPLOYEE (empId, name, dept, email) VALUES (1, 'Clark', 'Sales', '[email protected]'); SELECT * FROM EMPLOYEE;
Po přidání sloupce email vkládáme hodnotu i pro nový
sloupec. Kdybychom napsali jen
ALTER TABLE EMPLOYEE ADD email varchar(50); bez předchozího
CREATE TABLE, kompiler by opět nevěděl, kterou tabulku má
změnit.
Stažení a rozdělení souborů
OneCompiler umožňuje práci se soubory v levé části editoru. Hlavní
soubor bývá pojmenovaný například queries.sql. Přes nabídku
vedle tlačítka Run můžeme najít také možnost stažení.

Stažený soubor si pak můžeme otevřít v
libovolném editoru (například Visual Studio Code) nebo v jednoduchém
poznámkovém bloku: 
U delších ukázek (scénářů) je přehlednější rozdělit
inicializaci a dotazy. Inicializací myslíme příkazy, které
připraví prostředí. Typicky jde o CREATE TABLE a vložení
základních dat přes INSERT. Samotný dotaz potom může být v
hlavním souboru. Soubor init.sql můžeme přidat přes tlačítko
plus vedle seznamu souborů:

Do souboru init.sql vložíme přípravu tabulky:
CREATE TABLE EMPLOYEE ( empId int, name varchar(15), dept varchar(10) ); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (1, 'Clark', 'Sales'); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (2, 'Dave', 'Accounting'); INSERT INTO EMPLOYEE (empId, name, dept) VALUES (3, 'Ava', 'Sales');
Do hlavního souboru queries.sql potom vložíme samotný
dotaz:
SELECT * FROM EMPLOYEE WHERE dept = 'Sales';
Tento způsob je přehlednější 
Doporučený postup při řešení úloh
Při práci v online kompileru se držíme jednoduchého pořadí. Nejdříve si připravíme minimální data a teprve poté chystáme samotný SQL dotaz. Díky tomu snáze poznáme, zda je chyba v dotazu, nebo už v přípravě tabulky. Pro běžné úlohy doporučujeme tento postup:
- Otevřeme OneCompiler.
- Vytvoříme tabulku pomocí
CREATE TABLE. - Vložíme několik ukázkových řádků přes
INSERT. - Spustíme jednoduchý
SELECT * FROM nazev_tabulky;. - Teprve poté přidáme podmínky, řazení, agregace nebo spojení tabulek.
Když se objeví chyba, položíme si zejména tyto otázky:
- Existuje tabulka, nad kterou spouštíme dotaz?
- Jmenují se sloupce stejně v
CREATE TABLE,INSERTiSELECT? - Jsou textové hodnoty v apostrofech?
- Nechybí za příkazy středníky?
- Používáme stejnou verzi SQL Serveru, pro kterou je ukázka určená?
Názvy tabulek a sloupců pišme bez diakritiky. Pro výuku je to přehlednější a vyhneme se problémům při kopírování mezi různými editory či kompilery.
Shrnutí
Online kompilery, jako například OneCompiler, nám umožní procvičit základní MS-SQL dotazy i na operačním systému, kde není jednoduchá nativní instalace SQL Serveru. Ukázky musíme psát jako kompletní scénáře, které samy vytvoří tabulky, vloží data a potom spustí dotaz. Online kompiler bereme jako výukový sandbox (pískoviště), ne jako náhradu za vlastní databázový server.


