SQL – databázový jazyk, příkazy, syntaxe a použití.

 

Obecně

SQL – strukturovaný dotazovací jazyk. SQL je tzv. jazyk deklarativní. Zatímco u imperativních jazyků počítači vlastně říkáme krok po kroku, co má udělat, u jazyků deklarativních pouze říkáme co má být výsledkem a již nás nezajímá, jak tohoto výsledku počítač dosáhne. Díky tomu jsou databázové dotazy zjednodušeny na příkaz typu „Vrať mi 10 uživatelů s nejvyšším hodnocením“. Databáze takový dotaz pochopí, rozloží si ho na nějaké své instrukce a tak jej zpracuje. Nám poté opravdu vrátí výsledek, aniž bychom tušili, jak k němu došla.

Příkazy

SELECT

Základní použití

Příkaz SELECT slouží k získání dat z tabulky nebo pohledu v požadované podobě.

Získání všech řádků a sloupců z tabulky

SELECT * FROM Person.Contact

Vrací všechny všechny řádky a sloupce (*) z tabulky Person.Contact (Person je schéma do kterého tabulka Contact patří, je-li tabulka v jiném schématu než dbo, je třeba uvádět v jejím názvu toto schéma)

 

Získání všech řádků a vybraných sloupců z tabulky

SELECT FirstName, LastName FROM Person.Contact

Vrací všechny řádky z tabulky, ale jen zvolné sloupce

Aplikace filtru na vracené řádky

SELECT * FROM Person.Contact WHERE Title = ‚Mr.‘

Vrací pouze řádky, kde hodnota sloupce

Title je rovna řetězci ‚Mr.‘ Podmínky lze seskupovat logickými operátory (AND, OR, NOT)

SELECT * FROM Person.Contact WHERE Title = ‚Mr.‘ AND Suffix = ‚Jr.‘

Práce s řetězci v podmínce

Pokud potřebujeme použít zástupné symboly v řetězci, musíme použít klíčové slovo LIKE

SELECT * FROM Person.Contact WHERE Title NOT LIKE ‚M%‘

Dotaz vrací všechny řádky z dané tabulky, kde ve sloupci Title není (NOT) řetězec začínající písmenem M, které je následované 0-n libovolnými symboly.

  • % – 0..n libolných symbolů
  • _ – 1 libolný symbol
  • [abc] – množina symbolů (aplikován 1x)
  • [^abc] -všechny symboly, kromě určených (aplikován 1x)

SELECT * FROM Person.Contact WHERE ContactID < 10

Vrací řádky, kde je ContactID < 10

Podmínka na test hodnoty NULL

SELECT * FROM Sales.SalesOrderHeader WHERE CreditCardID IS NULL

Na hodnotu NULL se v podmínce musíme dotazovat klíčovým slovem IS

Modifikace dat

 Vkládání dat

INSERT INTO Sales.CreditCard VALUES (‚Maestro‘,’5464654654′,12,2009)

Do specifikované tabulky vložíme hodnoty uvedené za VALUES. Pořadí se bere ze schématu tabulky a jsou vynechány vypočítané sloupce a sloupce s IDENTITY.

INSERT INTO Sales.CreditCard (CardType, CardNumber) VALUES (‚Maestro‘,’5464654654′)

Možnost specifikovat pořadí sloupců a případně možnost některé vynechat.

Modifikace dat

UPDATE Sales.CreditCard SET CardNumber = ‚45646546‘ WHERE CardNumber = ‚45646547‘

Ve vybrané tabulce aktualizujeme záznamy splňující podmínku (pokud není podmínka, aktualizace se provede nad všemi záznamy!)

Odstranění dat

DELETE FROM Sales.CreditCard WHERE CardNumber = ‚45646547‘

Odstraníme záznamy splňující podmínku (není-li podmínka, vymažou se všechny záznamy)

Datové typy

Celá čísla

Typ Rozsah
TINYINT 8bitové číslo
SMALLINT 16bitové číslo
MEDIUMINT 24b číslo
INT 32b
BIGINT 64b

Pozn. pokud hledáte datový typ boolean (hodnoty true/false), tak k ukládání této hodnoty se zpravidla používá TINYINT (0/1).

Texty

Typ Rozsah
TINYTEXT max. 255 B
TEXT max. 64 KB (to je opravdu dlouhý text, třeba článku)
MEDIUMTEXT max. 224 B
LONGTEXT max. 232 B
VARCHAR (max. počet znaků) počet znaků jaký si zvolíte, max. 64 KB
CHAR (počet znaků) pevný počet znaků jaký si zvolíte, max. 255

Ostatní

Typ Rozsah
DATE Datum jako textový řetězec ve tvaru ‚rrrr-mm-dd‘, rozsah od ‚1000-01-01‘

do ‚9999-12-31‘

TIME Čas jako textový řetězec ve tvaru ‚hh:mm:ss‘
DATETIME Prakticky je to zřetězení data a času: ‚rrrr-mm-dd hh:mm:ss‘
TIMESTAMP Navenek se chová stejně jako Datetime, ale interně je to dword s počtem

sekund uplynulých od 1.1.1970. Rozsah mu končí v lednu 2038, takže tenhle

typ moc nedoporučuji a uvádím ho jenom pro úplnost.

BLOB a spol. Obecná data v binárním tvaru, použití analogické k typům TEXT.

Umožňují do databáze ukládat např. obrázky nebo zvuky.