Vzhled
12 • Jazyk SQL
1. Historie a charakteristika
- Původ: Vyvinuto firmou IBM
- Název: Původně SEQUEL (Structured English QUEry Language), ale kvůli ochranné známce zkráceno na SQL.
- Účel: Slouží výhradně ke komunikaci s relačními databázemi. Je to tzv. deklarativní jazyk – říkáme „CO“ chceme (např. dej mi seznam studentů), nestaráme se „JAK“ to počítač na disku najde.
- Design (dva směry):
- Pro lidi: Snaha o jednoduchou angličtinu, aby se to dalo číst jako věta (
SELECT * FROM users WHERE age > 18) - Pro počítač: Jednoznačná syntaxe a pořadí příkazů = snadný parsing (počítač vždy přesně ví, co má udělat)
- Pro lidi: Snaha o jednoduchou angličtinu, aby se to dalo číst jako věta (
Standardizace vs. Realita
- První standard byl SQL-86 (ANSI).
- Problém: Každý výrobce databází (Oracle, Microsoft, PostgreSQL) si standard trochu upravil a přidal vlastní funkce. Vznikly tak dialekty:
- Microsoft SQL Server
- Oracle SQL
- pgSQL (PostgreSQL)
2. Rozdělení příkazů
A. DDL (Data Definition Language) – Definice dat
Příkazy, které mění strukturu databáze (schéma), ne samotná data uvnitř.
CREATE: Vytvoří nový objekt (tabulku, databázi, pohled).ALTER: Upraví existující objekt (přidá sloupec do tabulky).DROP: Smaže objekt nenávratně i s daty (zruší tabulku).TRUNCATE: Smaže všechna data v tabulce, ale strukturu (hlavičku) nechá. Je to rychlejší než DELETE.
B. DML (Data Manipulation Language) – Manipulace s daty
Příkazy pro práci s obsahem tabulek (řádky)
SELECT: Vybere data (někdy se vyčleňuje jako DQL – Query Language)INSERT: Vloží nová dataUPDATE: Aktualizuje existující dataDELETE: Smaže konkrétní data (řádky)
C. DCL (Data Control Language) – Řízení přístupu
Příkazy pro práva a bezpečnost
GRANT: Udělí oprávnění (např. uživatel smí jen číst)REVOKE: Odebere oprávnění
D. TCL (Transaction Control Language) – Řízení transakcí
Zajišťuje integritu operací (všechno nebo nic)
COMMIT: Potvrdí změny (uloží je natrvalo)ROLLBACK: Vrátí změny zpět (pokud se něco pokazilo)
3. Databázové objekty a Integrita
Co všechno v databázi vlastně "leží" a jak to hlídáme.
Objekty (co tvoříme přes CREATE)
- Tabulka (Table): Základní úložiště dat (řádky a sloupce).
- Pohled (View): Virtuální tabulka. Je to uložený SQL dotaz, který se tváří jako tabulka. Užitečné pro bezpečnost (skryjeme citlivé sloupce).
- Index: Datová struktura (často B-strom), která urychluje vyhledávání (funguje jako rejstřík v knize).
- Sekvence (Sequence/Auto_increment): Generátor čísel, typicky pro primární klíče (1, 2, 3...).
- Uložené procedury (Stored Procedures): Kusy kódu/funkce uložené přímo v databázi.
Integritní omezení (Constraints)
Pravidla, která hlídají kvalitu dat při vkládání/úpravě.
PRIMARY KEY(PK): Jednoznačný identifikátor řádku (musí být unikátní a nesmí být prázdný).FOREIGN KEY(FK): Odkaz na PK jiné tabulky (vazby).UNIQUE: Hodnoty ve sloupci se nesmí opakovat (např. email, rodné číslo), ale může být NULL (pokud není zároveň PK).NOT NULL: Sloupec nesmí být prázdný.CHECK: Podmínka, kterou data musí splnit (např.cena > 0).
4. Konkrétní příkazy (Syntaxe)
SELECT (Výběr dat)
Nejpoužívanější příkaz. Má pevné pořadí klauzulí:
SELECT: Co chci zobrazit (sloupce, funkce).FROM: Odkud (tabulka).JOIN: Připojení dalších tabulek (vazby).WHERE: Filtrace řádků (podmínka, např.vek > 18).GROUP BY: Seskupení řádků (např. "počet studentů podle tříd").HAVING: Filtrace skupin (podmínka pro GROUP BY, např. "jen třídy, kde je víc než 20 lidí").ORDER BY: Řazení výsledků (ASCvzestupně,DESCsestupně).
INSERT (Vložení)
SQL
INSERT INTO studenti (jmeno, prijmeni, trida) VALUES ('Jan', 'Novák', '4.B');
UPDATE (Úprava)
Pozor: Vždy používat WHERE, jinak přepíšeš celou tabulku!
SQL
UPDATE studenti SET trida = '4.C' WHERE id = 5;
DELETE (Smazání)
Pozor: Zase nutné WHERE, jinak smažeš všechna data (jako TRUNCATE, ale pomaleji).
SQL
DELETE FROM studenti WHERE znamka = 5;