Představ si, že máš hromadu papírků a na každém je napsáno jméno kamaráda a jeho telefonní číslo. Jak v tom najdeš číslo na Petra? Bude to trvat dlouho. A co kdyby sis všechna jména a čísla napsal přehledně do sešitu s linkami a sloupci? Najednou by to bylo mnohem jednodušší! Přesně k tomu slouží tabulky. Jsou to skvělí pomocníci pro uspořádání dat.
Tabulka je způsob, jak uspořádat data do řádků a sloupců. Díky tomu jsou data přehledná a můžeme s nimi snadno pracovat.
| Jméno (Atribut) | Věk (Atribut) | Oblíbené zvíře (Atribut) |
|---|---|---|
| Petr | 15 | Pes |
| Jana | 16 | Kočka |
| Tomáš | 15 | Had |
Do buněk tabulky nemůžeme dávat jen tak cokoli. Každý sloupec má obvykle určený typ dat. To nám pomáhá udržet v tabulce pořádek a počítač pak ví, jak s daty pracovat.
Když počítač ví, že ve sloupci "Věk" jsou jen čísla, může s nimi počítat (např. spočítat průměrný věk). Kdyby tam bylo i slovo "patnáct", počítač by to nezvládl.
Sestavit tabulku pro nějaký problém je snadné. Stačí se zamyslet.
| Název knihy | Autor | Počet stran | Přečteno |
|---|---|---|---|
| Harry Potter a Kámen mudrců | J. K. Rowlingová | 223 | Ano |
| Pán prstenů: Společenstvo Prstenu | J. R. R. Tolkien | 423 | Ne |
Pokud chceš svou tabulku vytvořit v počítači, nejlepší volbou je program Microsoft Excel nebo bezplatný Google Tabulky. Tady je jednoduchý návod:
Tabulky jsou všude kolem nás, od rozvrhů hodin po ceníky v obchodech. Schopnost vytvářet a rozumět tabulkám je základní digitální dovedností, která nám pomáhá organizovat informace v osobním životě i v budoucí profesi. Díky přehlednému uspořádání dat můžeme lépe plánovat, sledovat pokrok a dělat informovaná rozhodnutí.
Když pracuješ s profesionálními databázemi nebo i v Excelu, je důležité rozumět datovým typům. Každý sloupec by měl obsahovat data stejného typu, protože to umožňuje správné řazení, výpočty a validaci.
Textová data jsou nejflexibilnější – mohou obsahovat písmena, čísla i speciální znaky. Používají se pro jména, adresy, popisy. V Excelu se text automaticky zarovnává doleva. Pozor: telefonní číslo je text (ne číslo!), protože může začínat nulou a nepočítáš s ním.
INTEGER jsou celá čísla bez desetinných míst – věk, počet kusů, ID. DECIMAL (nebo FLOAT) jsou desetinná čísla – ceny, váhy, procenta. V Excelu se čísla zarovnávají doprava a můžeš s nimi počítat.
Speciální typ pro kalendářní data. Excel ukládá datum jako číslo (počet dnů od 1. 1. 1900), ale zobrazuje ho čitelně. Díky tomu můžeš počítat rozdíl mezi daty – například kolik dnů uběhlo od objednávky.
Představ si, že máš tabulku zákazníků a v jedné buňce je napsáno "Jan Novák, Praha, 25 let". To je špatně! Správně by to mělo být ve třech sloupcích: Jméno | Město | Věk. Proč?
Toto pravidlo se nazývá 1. normální forma (1NF) – každá buňka obsahuje pouze jednu hodnotu.
V reálných systémech máme více tabulek, které spolu souvisejí. Například: tabulka ZÁKAZNÍCI a tabulka OBJEDNÁVKY. Jak je propojit?
Primární klíč (Primary Key) je sloupec s unikátní hodnotou pro každý záznam – obvykle ID. Žádní dva zákazníci nemají stejné ID.
Cizí klíč (Foreign Key) v tabulce OBJEDNÁVKY odkazuje na primární klíč zákazníka. Tak víme, který zákazník udělal kterou objednávku.
Relační databáze jsou nejrozšířenějším způsobem ukládání strukturovaných dat. Název "relační" pochází z matematického pojmu "relace", ale v praxi to znamená, že data jsou uložena v tabulkách, které jsou vzájemně propojené.
Každá databáze se skládá z několika prvků:
Hlavní výhody oproti jednoduchým tabulkám v Excelu:
SQL (Structured Query Language) je standardní jazyk pro práci s relačními databázemi. Naučit se SQL je jako naučit se anglicky v IT světě – používá ho MySQL, PostgreSQL, SQLite, Microsoft SQL Server i Oracle.
Většina práce s databází se dá shrnout do čtyř operací, které se označují zkratkou CRUD:
1. CREATE (Vytvoř) – vložení nových dat:
INSERT INTO Zakaznici (Jmeno, Email) VALUES ('Jan Novák', 'jan@email.cz');
2. READ (Přečti) – získání dat z databáze:
SELECT * FROM Zakaznici WHERE Mesto = 'Praha';
3. UPDATE (Aktualizuj) – změna existujících dat:
UPDATE Zakaznici SET Email = 'novy@email.cz' WHERE ID = 1;
4. DELETE (Smaž) – odstranění dat:
DELETE FROM Zakaznici WHERE ID = 1;
I v Excelu můžeš pracovat s daty jako s databází. Zde jsou nejužitečnější funkce:
Nejpoužívanější funkce pro propojení tabulek. Hledá hodnotu v prvním sloupci tabulky a vrátí hodnotu z jiného sloupce na stejném řádku.
=SVYHLEDAT(A2; Cenik!$A$2:$C$100; 3; NEPRAVDA)Kontingenční tabulka je mocný nástroj pro analýzu a sumarizaci velkého množství dat. Umožňuje rychle odpovědět na otázky jako: "Kolik jsme prodali produktu X v měsíci Y?" nebo "Kdo je náš nejlepší zákazník?".
Vytvoření: Vyber data → Vložit → Kontingenční tabulka → Přetáhni pole do oblastí Řádky, Sloupce, Hodnoty.
Jako IT specialista budeš navrhovat databáze a psát SQL dotazy. Tato sekce tě naučí praktické dovednosti.
-- Vytvoření tabulky
CREATE TABLE produkty (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nazev VARCHAR(100) NOT NULL,
cena DECIMAL(10,2) NOT NULL,
skladem INTEGER DEFAULT 0,
vytvoreno TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- INSERT - vložení dat
INSERT INTO produkty (nazev, cena, skladem)
VALUES ('Notebook', 25000.00, 10);
INSERT INTO produkty (nazev, cena, skladem) VALUES
('Myš', 500.00, 50),
('Klávesnice', 800.00, 30),
('Monitor', 5000.00, 15);
-- SELECT - čtení dat
SELECT * FROM produkty;
SELECT nazev, cena FROM produkty WHERE cena > 1000;
SELECT * FROM produkty ORDER BY cena DESC LIMIT 5;
-- UPDATE - aktualizace
UPDATE produkty SET cena = 24000 WHERE id = 1;
UPDATE produkty SET skladem = skladem - 1 WHERE nazev = 'Myš';
-- DELETE - mazání
DELETE FROM produkty WHERE id = 1;
DELETE FROM produkty WHERE skladem = 0;
-- Vytvoření propojených tabulek
CREATE TABLE zakaznici (
id INTEGER PRIMARY KEY,
jmeno VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE objednavky (
id INTEGER PRIMARY KEY,
zakaznik_id INTEGER,
castka DECIMAL(10,2),
datum DATE,
FOREIGN KEY (zakaznik_id) REFERENCES zakaznici(id)
);
-- INNER JOIN - jen záznamy s odpovídajícím párem
SELECT
z.jmeno,
o.castka,
o.datum
FROM objednavky o
INNER JOIN zakaznici z ON o.zakaznik_id = z.id;
-- LEFT JOIN - všichni zákazníci, i ti bez objednávky
SELECT
z.jmeno,
COALESCE(SUM(o.castka), 0) as celkem
FROM zakaznici z
LEFT JOIN objednavky o ON z.id = o.zakaznik_id
GROUP BY z.id;
import sqlite3
class ProduktDB:
def __init__(self, db_cesta='produkty.db'):
self.conn = sqlite3.connect(db_cesta)
self.conn.row_factory = sqlite3.Row # Přístup podle názvů sloupců
self.vytvor_tabulku()
def vytvor_tabulku(self):
self.conn.execute('''
CREATE TABLE IF NOT EXISTS produkty (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nazev TEXT NOT NULL,
cena REAL NOT NULL,
skladem INTEGER DEFAULT 0
)
''')
self.conn.commit()
def pridej(self, nazev, cena, skladem=0):
self.conn.execute(
"INSERT INTO produkty (nazev, cena, skladem) VALUES (?, ?, ?)",
(nazev, cena, skladem)
)
self.conn.commit()
def vsechny(self):
cursor = self.conn.execute("SELECT * FROM produkty")
return cursor.fetchall()
def hledej(self, nazev):
cursor = self.conn.execute(
"SELECT * FROM produkty WHERE nazev LIKE ?",
(f'%{nazev}%',)
)
return cursor.fetchall()
def aktualizuj_cenu(self, id, nova_cena):
self.conn.execute(
"UPDATE produkty SET cena = ? WHERE id = ?",
(nova_cena, id)
)
self.conn.commit()
# Použití
db = ProduktDB()
db.pridej("Notebook", 25000, 10)
db.pridej("Myš", 500, 50)
for produkt in db.vsechny():
print(f"{produkt['nazev']}: {produkt['cena']} Kč")
V kapitolách 14-19 vytvoříš databázovou aplikaci Evidence studentů. Naučíš se SQL, MySQL a propojení s Pythonem.
MySQL je nejpopulárnější open-source relační databázový systém. Používají ho velké firmy jako Facebook, Twitter, YouTube.
brew install mysql
brew services start mysql
mysql_secure_installation
| Funkce | Popis |
|---|---|
| SQL Editor | Psaní a spouštění SQL dotazů |
| Navigator | Prohlížení databází a tabulek |
| EER Diagram | Vizuální návrh databáze |
| Data Export/Import | Záloha a obnovení dat |
Otevři MySQL Workbench, připoj se k serveru a spusť tyto příkazy:
-- Vytvoření databáze
CREATE DATABASE IF NOT EXISTS skola;
-- Použij databázi
USE skola;
-- Vytvoření tabulky studentů
CREATE TABLE studenti (
id INT AUTO_INCREMENT PRIMARY KEY,
jmeno VARCHAR(50) NOT NULL,
prijmeni VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
datum_narozeni DATE,
trida VARCHAR(10),
prumer DECIMAL(3,2),
vytvoreno TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Vytvoření tabulky předmětů
CREATE TABLE predmety (
id INT AUTO_INCREMENT PRIMARY KEY,
nazev VARCHAR(50) NOT NULL,
zkratka VARCHAR(10) NOT NULL,
ucitel VARCHAR(100)
);
-- Vytvoření tabulky známek (propojovací tabulka)
CREATE TABLE znamky (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
predmet_id INT NOT NULL,
znamka INT CHECK (znamka BETWEEN 1 AND 5),
datum DATE NOT NULL,
FOREIGN KEY (student_id) REFERENCES studenti(id) ON DELETE CASCADE,
FOREIGN KEY (predmet_id) REFERENCES predmety(id) ON DELETE CASCADE
);
-- Vložení předmětů
INSERT INTO predmety (nazev, zkratka, ucitel) VALUES
('Matematika', 'MAT', 'Mgr. Novák'),
('Čeština', 'CJL', 'Mgr. Svobodová'),
('Informatika', 'INF', 'Ing. Černý'),
('Angličtina', 'ANJ', 'Bc. White');
-- Vložení studentů
INSERT INTO studenti (jmeno, prijmeni, email, datum_narozeni, trida) VALUES
('Jan', 'Novák', 'jan.novak@skola.cz', '2008-03-15', '9.A'),
('Eva', 'Svobodová', 'eva.svobodova@skola.cz', '2008-07-22', '9.A'),
('Petr', 'Černý', 'petr.cerny@skola.cz', '2008-01-10', '9.B'),
('Anna', 'Veselá', 'anna.vesela@skola.cz', '2008-11-30', '9.B');
-- Vložení známek
INSERT INTO znamky (student_id, predmet_id, znamka, datum) VALUES
(1, 1, 1, '2024-09-15'), -- Jan, Matematika, 1
(1, 2, 2, '2024-09-16'), -- Jan, Čeština, 2
(1, 3, 1, '2024-09-17'), -- Jan, Informatika, 1
(2, 1, 2, '2024-09-15'), -- Eva, Matematika, 2
(2, 2, 1, '2024-09-16'), -- Eva, Čeština, 1
(3, 1, 3, '2024-09-15'), -- Petr, Matematika, 3
(3, 3, 2, '2024-09-17'); -- Petr, Informatika, 2
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ STUDENTI │ │ ZNAMKY │ │ PREDMETY │
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ id (PK) │◄────►│ id (PK) │◄────►│ id (PK) │
│ jmeno │ │ student_id (FK) │ │ nazev │
│ prijmeni │ │ predmet_id (FK) │ │ zkratka │
│ email │ │ znamka │ │ ucitel │
│ datum_narozeni │ │ datum │ └─────────────────┘
│ trida │ └─────────────────┘
│ prumer │
└─────────────────┘
schema.sql s příkazy pro vytvoření tabulek.V další kapitole: Naučíš se pokročilé SELECT dotazy a JOIN.