Článek: AN0002377Aktualizováno:: 16.09.2021
SQL (Structured Query Language) je de facto standardem pro práci se strukturovanými daty. Používá se v relačních databázích pro čtení a zápis dat z/do databáze a zároveň se používá pro definici vlastních databázových objektů (databázová struktura). Více informací k jazyku SQL doporučujeme získat na Wikipedii a ve w3schools.
Podívejme se na pár příkladů.
Mějme tabulku objednávek, která se nazývá Objednavky.
Id |
Cislo_obj |
Castka |
Mena |
Datum |
Dodavatel |
1 |
4200000353 |
20.000 |
CZK |
1.10.2018 |
2 |
2 |
4200000354 |
5.000 |
EUR |
3.10.2018 |
3 |
3 |
4200000355 |
2.100 |
CZK |
29.10.2018 |
3 |
4 |
4200000356 |
10.500 |
CZK |
3.11.2018 |
3 |
Provedeme výběr tří sloupců z tabulky.
SELECT Cislo_obj, Castka, Mena
FROM Objednavky
Uvedený dotaz nám vrátí tyto záznamy.
Cislo_obj |
Castka |
Mena |
4200000353 |
20.000 |
CZK |
4200000354 |
5.000 |
EUR |
4200000355 |
2.100 |
CZK |
4200000356 |
10.500 |
CZK |
Nyní uvažujme další tabulku s údaji o dodavatelích, která se nazývá Dodavatelé. Data máme v různých tabulkách z důvodu normalizace, která nám zajistí integritu dat. V tabulce objednávek nechceme opakovat u každé objednávky ty samé údaje o dodavatelích a navíc riskovat, že u různých objednávek na stejného dodavatele uvedeme různé informace o dodavateli. U objednávky tedy uvedeme pouze odkaz na dodavatele (jeho Id) a veškeré informace o dodavateli budou uloženy pouze na jednom místě - v jednom řádku tabulky dodavatelů.
Id |
Nazev |
Adresa |
Komodita |
Segmentace |
1 |
Fastcom a.s. |
Na Bělidle 35, Praha 5, 150 00 |
IT |
A |
2 |
TOP Catering, s.r.o. |
Na Pankráci 109, Praha 4, 140 00 |
Catering |
B |
3 |
SoftFusion s.r.o. |
Pobřežní 37, Praha 8, 180 00 |
IT |
B |
4 |
Paperless a.s. |
Sokolovská 89, Praha 8, 180 00 |
Consulting |
B |
Výše uvedený příklad doplníme o data z této další tabulky, která je s první tabulkou propojena. Všimněte si, že jsme tabulkám dali aliasy obj a dod, které pak můžeme použít. Vidíme také, že tabulka Objednávky se ve sloupci Dodavatel odkazuje na tabulku Dodavatelů. Hodnoty ve sloupci Dodavatel (v tabulce Objednávky) odpovídají hodnotám ve sloupci Id (v tabulce Dodavatelé). To nám umožní data propojit a získat přehled kombinující data z obou tabulek.
SELECT obj.cislo_obj, obj.castka, obj.mena, dod.nazev
FROM objednavky obj
LEFT JOIN dodavatele dod ON obj.dodavatel = dod.id
Všiměte si, že v dotazu jsme uvedli objednavky a dodavatele místo Objednavky a Dodavatele. Je to v pořádku, protože SQL není senzitivní na (nerozlišuje) malé a velké písmo v názvech objektů (tabulek a sloupců).
Uvedený dotaz nám vrátí tyto záznamy.
cislo_obj |
castka |
mena |
dodavatel |
4200000353 |
20.000 |
CZK |
TOP Catering, s.r.o. |
4200000354 |
5.000 |
EUR |
SoftFusion s.r.o. |
4200000355 |
2.100 |
CZK |
SoftFusion s.r.o. |
4200000356 |
10.500 |
CZK |
SoftFusion s.r.o. |
Nyní budeme chtít vybrat pouze objednávky v CZK. Data proto omezíme pomocí klauzule WHERE.
SELECT obj.cislo_obj AS Cislo_objednavky, obj.castka AS Castka, obj.mena AS Mena, dod.nazev AS Dodavatel
FROM objednavky obj
LEFT JOIN dodavatele dod ON obj.dodavatel = dod.id
WHERE obj.mena = 'CZK'
Text CZK jsme v SQL uvedli v uvozovkách, aby databázový stroj poznal, že jde o hledaný řetězec a ne název nějakého objektu. Za klíčovým slovem AS jsme uvedli název sloupce, jak nám ho má databázový stroj zobrazit.
Uvedený dotaz nám vrátí tyto záznamy.
Cislo_objednavky |
Castka |
Mena |
Dodavatel |
4200000353 |
20.000 |
CZK |
TOP Catering, s.r.o. |
4200000355 |
2.100 |
CZK |
SoftFusion s.r.o. |
4200000356 |
10.500 |
CZK |
SoftFusion s.r.o. |
V následujícím příkladu budeme chtít zobrazit souhrn všech objednávek u všech dodavatelů a rozlišit měnu. Budeme tedy chtít zobrazit seznam dodavatelů a celkou sumu objednávek, které jsme na ně vystavili, členěnou podle měny.
SELECT dod.nazev AS Název, obj.mena AS Mena, Sum (obj.castka) AS Celkova_castka
FROM dodavatele dod
LEFT JOIN objednavky obj ON obj.dodavatel = dod.id
GROUP BY dod.nazev, obj.mena
Všiměte si, že jsme nyní vyhledávání zahájili v tabulce dodavatelů a k ní připojili údaje z tabulky objednávek. Kdybychom klauzule FROM a LEFT JOIN ponechali jako v předchozím příkladě, výsledky by neobsahovaly údaje o dodavatelích, kteří žádnou objednávku nemají.
Název |
Mena |
Celkova_castka |
Fastcom a.s. |
|
|
TOP Catering, s.r.o. |
CZK |
20.000 |
SoftFusion s.r.o. |
EUR |
5.000 |
SoftFusion s.r.o. |
CZK |
12.600 |
Paperless a.s. |
|
|
V ObjectGears máte možnost pracovat s SQL v dotazech nebo ve skriptu (např. pro přímý zápis do databáze). Ukázky použití SQL v ObjectGears najdete v příkladech.
Vysvětlení použitých pojmů:
Databázový stroj - Software, který představuje systém řízení báze dat.
Databáze - Systém uspořádáných dat ve formě záznamů.
Tabulka - Struktura obsahující záznamy. Každému záznamu odpovídá jeden řádek. Každý sloupec obsahuje určitou vlastnost záznamu.
Select - Klauzule jazyka SQL definující, jaká data se mají z tabulek vybrat (zobrazit).
Join - Klauzule jazyka SQL definující, jak se mají při našem zpracování propojit data z více tabulek mezi sebou.