Home!
Up!

SQL

SQL klauzule dělíme na 5 druhů dle jejich použití:

DDL - Data Definition Language - Klauzule, která nám definují, jak bude vypadat struktura databáze nebo tabulek
CREATE
ALTER
DROP
TRUNCATE
VIEW

DML - Data Manipulation Language - Klauzule nám říkají, jakým způsobem manipulujeme s daty
INSERT
UPDATE
DELETE
SELECT

DCL - Data Control Language - Pomocí těchto klauzilí nastavujeme oprávnění pro práci s daty
GRANT
REVOKE

TCL - Transaction Control language - S těmito klauzulemi ovládáme jednotlivé transakce SŘBD s transakčním logem
COMMIT
ROLLBACK
SAVEPOINT

ACID transakce

ACID transakce jsou transakce využívané u relačních SŘBD. Tyto transakce zabraňují aby došlo k poškození dat uvnitř databáze a spoléhají na transakční log.

A - Atomicity - Jednotlivé transakce jsou rozděleny na atomární části.
C - Consistency - Data zůstávají díky transakčnímu logu a těmto transakcím konzistentní, např. při výpadku elektřiny.
I - Isolation - Transakce se vykonávají odděleně, jedna po druhé.
D - Durability - TRansakce jsou odolné vůči např. výpadku elektřiny, spojení atp. Poslední stav se udržuje v transakčním logu.

Základní operace SQL - CRUD

zkratka CRUD je zktratka pro 4 záklní operace, které lze vždy s každým informačním systémem provádět a tím jsou operace:

Create - Vytváření (SQL: INSERT)

INSERT INTO role (name) VALUES ('Administrator'), ('Supervisor'), ('Uzivatel');

Read - Čtení (SQL: SELECT)

SELECT * FROM role;
SELECT idrole, name FROM role;

Update - Aktualizace dat (SQL: UPDATE)

UPDATE role SET name = 'Supervisor' WHERE idrole = 2;

Delete - Smazání dat (SQL: DELETE)

DELETE FROM role WHERE idrole = 2;

Doplňkové příkazy

Zobrazení všech databází na serveru: show schemas;

Použití konkrétní datbáze pro práci s SQL:
use `database-name"`;
e.g.: use `steam-krizik`;

Zobrazení všech tabulek/entit uvnitř databáze: show tables;

Zobrazení vlastností + atributů z konkrétní tabulky:
show columns from table-name;
show columns from role;

Jednořádkový komentář:
-- Komentář

Víceřádkový komentář:
/* Toto
je celé
komentář */

WHERE, ORDER BY, LIKE

WHERE - podmínka pomocí které filtrujeme výsledek

SELECT <sloupce> FROM <nazev tabulky> WHERE <hodnota sloupce> = <hodnota>;
SELECT jmeno, prijmeni FROM uzivatel WHERE prijmeni = 'Novák';

LIKE - Přidáváme ke klauzuli WHERE pokud používáme např. regulární výraz pro vyhledávání s řetězci

SELECT jmeno, prijmeni FROM uzivatel WHERE prijmeni LIKE 'Novak%'; - Vypíše nejen všechny Nováky, ale i Novákové a Novákovi.
% je zástupný znak pro libovolný počet libovolných znaků pro řetězce v SQL.

ORDER BY - Slouží k řazení výstupu dle zvoleného sloupce tabulky

Máme dvojí řazení a to:
Ascending [ASC] - Vzestupně = 1,2,3,4, ...
Descending [DESC] - Sestupně = 10,9,8,7, ...
SELECT jmeno, prijmeni FROM uzivatel WHERE prijmeni LIKE 'Novak%' ORDER BY prijmeni ASC;
- ASC znamená Ascending, tedy příjmení půjde vzestupně = od nejkratšího po nejdelší. Výsledek nám tak seřadí všechny uživatele podle délky příjmení, tzn. nejdříve budou:
- Novák
- Nováková
- Novákovi

Příklady:

/* 1. Vyhledejte všechny názvy žánrů, které mají ID 5 a méně */
SELECT name FROM genre WHERE idgenre <= 5;

/* 2. Vypište všechna ID žánrů, které jsou 2 cif. a seřaďte od nejmenšího */
SELECT idgenre FROM genre
WHERE (idgenre >= 10 AND idgenre <= 99) ORDER BY idgenre ASC;

/* 3. Vypište všechny názvy žánrů, které začínají na písmeno 'M' */
SELECT name FROM genre WHERE name LIKE 'M%';

JOINy

Pomocí JOINů spojujeme 2 a více tabulek k sobě, abychom mohli vzájemně používat vazby a hodnoty z několika tabulek na jeden výpis.

Máme celkem 4 druhy JOINů:

INNER JOIN - Vypíše pouze obsah společné množiny A a B
LEFT JOIN - Vypíše celou tabulku A a společný obsah s tabulkou B
RIGHT JOIN - Vypíše celou tabulku B a společný obsah s tabulkou A
FULL OUTER JOIN - Vypíše obě množiny A a B

Příklad:

Tabulka A = uzivatel (protože ji voláme jako první z klauzule FROM)
Tabulka B = role (protože ji voláme jako druhou z klauzule JOIN)

SELECT uzivatel.jmeno, uzivatel.prijmeni, uzivatel.idrole, role.jmeno
FROM uzivatel JOIN role
ON uzivatel.idrole = role.idrole;

- uzivatel.jmeno - stejné jako v objektovém programování. Voláme entitu/tabulku uzivatel a z ní vlastnost jmeno. Kdybychom takto neoznačili správně vlastnosti, SŘBD neví, které jméno k jaké tabulce přiřadit.
- Klauzule ON nám přiřazuje cizí klíč z tabulky uzivatel k primárnímu klíči tabulky role, tak aby bylo jasná shodů klíčů. Kdybychom takto neprovedli, každý uživatel by ve výpisu měl takový počet řádků se svými hodnotami, kolik je řádků rolí.

Např. máme Josefa Nováka s idrole 5, dále máme celkem 4 role v tabulce role, výsledek by bez klauzule ON vypadal následovně:
Josef Novák 5 Admin
Josef Novák 5 Obsluha
Josef Novák 5 Supervisor
Josef Novák 5 Uživatel

Agregační klauzule

SELECT:

PODMÍNKY - WHERE, LIKE, SIMILAR TO, ORDER BY, BETWEEN;

AGREGAČNÍ KLAUZULE (Funkce):

Count(), MIN(), MAX(), AVG(), SUM(); - Číselné
DISTINCT, GROUP BY, CONCAT(), UNION; - Řetězcové;

JOINy - JOIN, LEFT JOIN, RIGHT JOIN, INNER JOIN, ON;

/* Spočítej kolik žánrů her je v DB */
SELECT Count(idgenre) FROM genre; /* = 10 */
SELECT SUM(idgenre) FROM genre;