Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Základy jazyka SQL

Jazyk SQL je velice jednoduchý a srozumitelný. Jeho syntaxe vychází z angličtiny a příkazy se podobají normálním větám, takže jestli umíte anglicky, máte napůl vyhráno. Jestli ne, nevadí, budu překládat.

Syntaktická pravidla

  • Nezáleží na pozicích a "bílém místu" mezi slovy. Můžete naprosto libovolně odsazovat, mezerovat a entrovat. Má to jenom jeden háček: příkaz musíme vecpat do parametru funkce mysql_query, takže ho nakonec budeme muset sesypat na jeden řádek.
  • Nezáleží na velikosti písmen v klíčových slovech. Je jedno, jestli napíšeme "SELECT", "select" nebo "SeLecT", fungovat to bude pokaždé stejně. V dalším textu je budu psát velkými písmeny jenom kvůli přehlednosti.
  • Identifikátory se normálně skládají z písmen (A..Z, a..z), číslic (0..9, číslicí mohou i začínat), podtržítek (_) a dolarů ($) a nesmí se shodovat s klíčovými slovy. Jestli se vám to nelíbí, můžete psát i s diakritikou a mezerami (jenom to mezerou nesmí končit), mít identifikátor ze samých čísel nebo i stejný jako nějaké klíčové slovo, ale takové hrůzy pak musíte uzavírat do obrácených apostrofů, aby se z nich systém nezvencnul. Obrácený apostrof se píše na anglické klávesnici takovou tou klávesou úplně vlevo nahoře mezi escapem, jedničkou a tabulátorem.
  • Jména databází interně odpovídají jménům adresářů a jména tabulek jménům souborů, takže pozor, na linuxových serverech (kterých je mezi freehostingy většina) záleží na velikosti písmen. Jinak pro ně platí všechna pravidla pro identifikátory.
  • Pro jména sloupců v tabulkách platí všechna pravidla pro identifikátory a na velikosti písmen u nich nezáleží.
  • Řetězce se uzavírají buď do 'apostrofů' nebo do "uvozovek", stejně jako v PHP.
  • Příkazy se oddělují středníkem, ale to nás nezajímá, protože mysql_query bere vždycky jenom jeden a středník se za něj nedává.
  • Údajně existují tři typy komentářů: #první, -- druhý (oba platí do konce řádku) a /třetí/, ale v životě jsem je nepotřeboval :-).

Vytváření tabulek

Veškerá data v databázi musí být uložena v tabulkách, takže tímhle musíme začít. Příkaz se jmenuje CREATE TABLE (čili "vytvoř tabulku") a pro dříve uvedenou tabulku aut by mohl vypadat třeba takhle:

CREATE TABLE auta
 (
 spz     CHAR(8)     PRIMARY KEY,
 typ     VARCHAR(30) NOT NULL,
 majitel TINYTEXT
 );

Tím jsme řekli, že chceme vytvořit tabulku jménem auta, ve které budou sloupce spz, typ a majitel. U každého sloupce je potřeba uvést datový typ (tedy co se do něj bude ukládat) a dále mohou následovat další upřesňující informace: že je to klíč, že nesmí být prázdný apod..

Datové typy

Pro přehlednost tady do dvou tabulek shrnu úplně všechno, s čím se během celého seriálu možná potkáme. Zatím si je jen tak prolítněte; vrátit se sem můžete později, až něco budete potřebovat. Konkrétní použití a podrobnější popisy si stejně probereme na příkladech.

Celá čísla:
TINYINT osmibitové číslo
SMALLINT 16bitové číslo
MEDIUMINT 24b číslo
INT 32b
BIGINT 64b
Když za typem uvedeme upřesňující slovo UNSIGNED, čísla budou bez znaménka (tedy přirozená), s rozsahem 0..2počet bitů. Pokud neuvedeme nic, čísla jsou celá se znaménkem a rozsahem posunutým o polovinu do záporna (tedy např. místo 0..255 bude -127..128).
Texty:
TINYTEXT max. 255 B
TEXT max. 64 KB
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
V ASCII textech platí uvedené maximální délky přímo pro znaky (1 znak = 1 B). V kódování Unicode je potřeba počítat s tím, že jeden znak může zabrat víc bytů.
Ostatní:
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. Nebudeme je potřebovat.

Upřesňující informace k datovým typům:
UNIQUE Říká, že nesmí existovat víc řádků, které mají v této položce stejnou hodnotu (s výjimkou hodnoty NULL). Smysl to má pouze u klíčů.
NOT NULL Tahle hodnota nesmí být prázdná - nepůjde do ní vložit hodnota NULL.
PRIMARY KEY Tím se určí, že se tenhle sloupec (v každé tabulce max. jeden) bude používat jako klíč. Vhodné pro nějaké relativně krátké identifikační kódy, podle kterých budeme řádky nejčastěji hledat. Primární klíč je vždy NOT NULL a UNIQUE; i když to nenařídíme, dostane tyhle vlastnosti implicitně.
AUTO_INCREMENT Jen pro čísla. Při vkládání řádku dejte této položce hodnotu NULL a systém jí automaticky přidělí hodnotu o 1 větší než dal minulému řádku (přírůstek se teoreticky dá změnit, ale tím se teď nebudeme zatěžovat). Výborná věc pro pohodlnou tvorbu unikátních identifikačních klíčů.
DEFAULT hodnota Výchozí hodnota, kterou položka dostane, když ji při vkládání řádku neuvedeme. Nefunguje na Texty, Bloby a položky s auto_incrementem. Jen pro úplnost, prakticky to nevyužijeme.

 

Článek pro vás napsal Mircosoft
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Autor je amatérský pascalista, assemblerista a bastlíř. Profesionálně psal nebo píše v HLASM, Rexxu, Cobolu, ST, LAD, FBD, PHP, SQL, JS, Basicu a pár dalších jazycích, které kupodivu stále existují a používají se :-).
Aktivity