Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— | pitel:isz:sql [30. 12. 2022, 13.43:01] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== Relační datový model a jazyk SQL ====== | ||
+ | ===== Relační databázový model ===== | ||
+ | {{ http:// | ||
+ | [[wp> | ||
+ | To důležité ukazuje obrázek napravo. Relaci tvoří domény (sloupce), tělo relace pak tvoří řádky. | ||
+ | * Neexistují duplicitní řádky((řeší klíče)) | ||
+ | * Nezáleží na pořadí řádků a sloupců | ||
+ | * Hodnoty jsou atomické | ||
+ | |||
+ | Každý řádek relace má tzv. **primární klíč**((Bývá to celý sloupec, nejčastěji pojmenovaný '' | ||
+ | |||
+ | FIXME Chtělo by to asi ještě něco dopsat, ale ta teorie je taková... //meh// :-? | ||
+ | ===== Jazyk SQL ===== | ||
+ | [[wp> | ||
+ | |||
+ | FIXME Úvodni kecy | ||
+ | ==== Příkazy ==== | ||
+ | === SELECT === | ||
+ | [[wp> | ||
+ | |||
+ | Slouží k získání dat z databáze. | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | Pomocí '' | ||
+ | |||
+ | Výběr z více tabulek se provádí parametrem [[wp> | ||
+ | |||
+ | === INSERT === | ||
+ | [[wp> | ||
+ | |||
+ | Slouží k vkládání nových dat. | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | === UPDATE === | ||
+ | [[wp> | ||
+ | |||
+ | Slouží k změně již existujících dat. | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | === DELETE === | ||
+ | [[wp> | ||
+ | |||
+ | Slouží k mazání dat. | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | === Transakce === | ||
+ | [[wp> | ||
+ | |||
+ | Všechny SQL příkazy se provádějí atomicky((čili v jednom kroku, a buď se provedou celé nebo vůbec)). Pokud ale chceme atomicky provést posloupnost příkazů (nejčastěji takovou, která by při svém přerušení způsobila nekonzistenci databáze) musíme příkazy uzavřít do transakce. Provedení transakce pák můžeme potvrdit příkazem '' | ||
+ | |||
+ | <code sql> | ||
+ | START TRANSACTION; | ||
+ | UPDATE Account SET amount=amount-200 WHERE account_number=1234; | ||
+ | UPDATE Account SET amount=amount+200 WHERE account_number=2345; | ||
+ | IF ERRORS=0 COMMIT; | ||
+ | IF ERRORS<> | ||
+ | </ | ||
+ | |||
+ | === CREATE, ALTER, DROP === | ||
+ | [[wp> | ||
+ | |||
+ | Tyto příkazy slouží k manipulaci s tabulkami a indexy. | ||
+ | |||
+ | <code sql> | ||
+ | CREATE TABLE telefonni_seznam (jmeno VARCHAR(50) NOT NULL, cislo INT PRIMARY KEY); | ||
+ | ALTER TABLE telefonni_seznam ADD prijmeni INT NOT NULL; | ||
+ | DROP TABLE telefonni_seznam; | ||
+ | </ | ||
+ | |||
+ | ===== Shrnutí ===== | ||
+ | * relační databáze: matematický model, množiny a relace | ||
+ | * relace je tabulka, definují ji domény (sloupce), tělo relace pak n-tice (řádky), jeden řádek je pak konkrétní prvek těla relace | ||
+ | * neexistují duplicitní n-tice, atributy a n-tice jsou neuspořádané, | ||
+ | * kandidátní klíč: unikátní a neredukovatelný | ||
+ | * primární klíč: nejjednodušší z kandidátních klíčů relace | ||
+ | * integritní omezení obecná: pravidla kandidátních klíčů, existence primárního klíče | ||
+ | * integritní omezení specifická: | ||
+ | * relační algebra: množina n-tic, množinové operace (sjednocení, | ||
+ | * relační operace: selekce (výběr řádků, where), projekce (výběr sloupců, select X, Y, Z), spojování (více tabulek podle podmínek) | ||
+ | * relační kalkul: alternativa pro manipulaci s daty, jazyk podle kalkulu je pak například SQL jazyk | ||
+ | * SQL definice dat: create, alter, drop (table, index, view, procedure) | ||
+ | * SQL operace s daty: insert, update, delete, select | ||
+ | * join: inner (kartézský součin a následná aplikace podmínek), natural, outer (podobně jako inner, ale když není podle podmínky nalezeno, tak doplňuje NULL), left a right outer (směr přístupu ke spojování) | ||
+ | * where: určování podmínek - filtrování po vyhledání | ||
+ | * group by: seskupení podle sloupce (při 1:N), například při agregačních funkcích | ||
+ | * having: filtrování až po group by | ||
+ | * pohledy, procedury, triggery |