← IT

Jazyk SQL a práce s databází

Doplněný obsah — není z archivu podkladů, napsáno podle ŠVP. Vhodné ověřit u vyučujícího.

Jazyk SQL

Kategorie příkazů SQL

Definice struktury – DDL

CREATE DATABASE eshop;

CREATE TABLE zakaznik (
	id INT PRIMARY KEY AUTO_INCREMENT,
	jmeno VARCHAR(50) NOT NULL,
	email VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE objednavka (
	id INT PRIMARY KEY AUTO_INCREMENT,
	datum DATE NOT NULL,
	zakaznik_id INT NOT NULL,
	FOREIGN KEY (zakaznik_id) REFERENCES zakaznik(id)
);

ALTER TABLE zakaznik ADD telefon VARCHAR(20);

DROP TABLE objednavka;

Práce s daty – DML

-- vložení záznamu
INSERT INTO zakaznik (jmeno, email) VALUES ('Jan Novák', 'jan@example.com');

-- úprava záznamu
UPDATE zakaznik SET telefon = '777123456' WHERE id = 1;

-- smazání záznamu
DELETE FROM zakaznik WHERE id = 1;

Výběr dat – SELECT

-- výběr sloupců s podmínkou
SELECT jmeno, email FROM zakaznik WHERE jmeno LIKE 'J%';

-- řazení výsledků
SELECT * FROM objednavka ORDER BY datum DESC;

-- seskupení a agregace
SELECT zakaznik_id, COUNT(*) AS pocet_objednavek
FROM objednavka
GROUP BY zakaznik_id
HAVING COUNT(*) > 2;

Propojení tabulek – JOIN

SELECT z.jmeno, o.datum
FROM zakaznik z
INNER JOIN objednavka o ON z.id = o.zakaznik_id
ORDER BY o.datum;

Zdroje záznamů, import a export dat

Vytvoření databáze a přístupová oprávnění – DCL

CREATE DATABASE firma;

CREATE USER 'petr'@'localhost' IDENTIFIED BY 'heslo123';

GRANT SELECT, INSERT ON firma.* TO 'petr'@'localhost';

REVOKE INSERT ON firma.* FROM 'petr'@'localhost';

Archivace a obnova dat

Praktické příklady v MySQL

Navazujeme na schéma e-shopu z předchozí kapitoly (zakaznik, objednavka, produkt, polozka_objednavky). Doplníme ho o produkty a položky objednávek a ukážeme si na něm další reálné dotazy.

USE eshop;

-- ukázková data
INSERT INTO zakaznik (jmeno, prijmeni, email, telefon) VALUES
    ('Jan', 'Novák', 'jan.novak@example.com', '777123456'),
    ('Eva', 'Svobodová', 'eva.svobodova@example.com', '602987654'),
    ('Petr', 'Dvořák', 'petr.dvorak@example.com', NULL);

INSERT INTO produkt (nazev, cena, sklad_mnozstvi) VALUES
    ('Myš USB', 249.90, 120),
    ('Klávesnice', 599.00, 45),
    ('Monitor 24"', 3490.00, 15),
    ('USB flash disk 32GB', 199.00, 200);

INSERT INTO objednavka (datum, zakaznik_id) VALUES
    ('2026-01-15', 1),
    ('2026-02-03', 1),
    ('2026-02-10', 2);

INSERT INTO polozka_objednavky (objednavka_id, produkt_id, mnozstvi) VALUES
    (1, 1, 2),
    (1, 4, 1),
    (2, 3, 1),
    (3, 2, 1),
    (3, 4, 3);

JOIN přes víc tabulek

-- kdo si co objednal a v jakém množství
SELECT z.jmeno, z.prijmeni, o.datum, p.nazev, po.mnozstvi
FROM zakaznik z
INNER JOIN objednavka o ON z.id = o.zakaznik_id
INNER JOIN polozka_objednavky po ON o.id = po.objednavka_id
INNER JOIN produkt p ON po.produkt_id = p.id
ORDER BY o.datum;

GROUP BY a HAVING – zákazníci s víc než 5 objednávkami

SELECT z.id, z.jmeno, z.prijmeni, COUNT(o.id) AS pocet_objednavek
FROM zakaznik z
INNER JOIN objednavka o ON z.id = o.zakaznik_id
GROUP BY z.id, z.jmeno, z.prijmeni
HAVING COUNT(o.id) > 5;

ORDER BY a LIMIT

-- 3 nejdražší produkty v nabídce
SELECT nazev, cena FROM produkt ORDER BY cena DESC LIMIT 3;

-- 5 nejnovějších objednávek
SELECT id, datum FROM objednavka ORDER BY datum DESC LIMIT 5;

UPDATE a DELETE s konkrétními daty

-- zdražení konkrétního produktu
UPDATE produkt SET cena = 279.90 WHERE nazev = 'Myš USB';

-- odebrání jedné položky z objednávky č. 2
DELETE FROM polozka_objednavky WHERE objednavka_id = 2 AND produkt_id = 3;

-- doplnění telefonu zákazníkovi, který ho zatím nemá
UPDATE zakaznik SET telefon = '605112233' WHERE email = 'petr.dvorak@example.com';

Práce s MySQL z příkazové řádky

Kromě grafických nástrojů lze s MySQL databází pracovat i přímo z terminálu:

mysql -u root -p

Po zadání hesla se otevře příkazová řádka MySQL klienta, ve které lze psát běžné SQL příkazy zakončené středníkem:

SHOW DATABASES;
USE eshop;
SHOW TABLES;
DESCRIBE zakaznik;
SELECT * FROM zakaznik;

phpMyAdmin – webová grafická nadstavba nad MySQL, přes kterou lze provádět stejné operace (procházení tabulek, spouštění SQL dotazů, import/export dat) bez nutnosti pamatovat si příkazovou řádku; na školách i webhostinzích bývá nejběžnějším způsobem, jak se s MySQL databází pracuje – vlevo nabízí strom databází a tabulek, v prostřední části pak záložky pro procházení dat (Procházet/Browse), spouštění vlastního SQL (SQL), úpravu struktury (Struktura/Structure) a export/import.