|
Strana 10 (subdotaz x JOIN) | Sbírka příkladů SQL dotazů | Strana 12 (UNION) |
Příklad 19
Zadání: Vypište názvy firem (a případně částku), které mají alespoň jednu fakturu za více než 5000,- Kč.
Popis řešení: V tomto příkladu ukážeme použití subdotazu v části SELECT. Subdotaz pro každé číslo faktury vrátí jméno firmy. Toto jméno lze použít ve výčtu sloupců dotazu.
SQL:
SELECT DISTINCT (SELECT nazev
FROM Firmy
WHERE Firmy.cislo=Faktury.firma) AS Nazev
FROM Faktury
WHERE castka > 5000
Poznámky:
a) Sloupec Nazev odpovědi není samozřejmě editovatelný.
b) Stejného výsledku (s možností editace odpovědi) lze dosáhnout takto (Příkl_19a):
SELECT Firmy.nazev
FROM Firmy
WHERE Firmy.cislo =ANY (SELECT Faktury.firma
FROM Faktury
WHERE castka > 5000
AND Faktury.firma=Firmy.cislo)
c) Stejného výsledku lze dosáhnout i bez subdotazů, pomocí JOINu, např. takto (Příkl_19b):
SELECT DISTINCT Firmy.nazev
FROM Faktury,Firmy
WHERE (castka > 5000)
AND (Firmy.cislo=Faktury.firma)
d) Stejného výsledku lze dosáhnout také takto (Příkl_19c):
SELECT DISTINCT Firmy.nazev
FROM Firmy, (SELECT firma,castka
FROM Faktury
WHERE castka > 5000)
WHERE Faktury.firma=Firmy.cislo
Zadání: Pokud by nám ve stejném příkladě stačil jen počet firem, je třeba použít funkce COUNT. Otázkou zůstává umístění klauzule DISTINCT:
SELECT DISTINCT COUNT(Firmy.nazev)
nedá správný výsledek, je třeba před DISTINCT předřadit COUNT, tj. počítat jen unikátní firmy (Příkl_19d):
SELECT COUNT (DISTINCT Firmy.nazev)
FROM Faktury,Firmy
WHERE (castka > 5000)
AND (Firmy.cislo=Faktury.firma)
Strana 10 (subdotaz x JOIN) | Sbírka příkladů SQL dotazů | Strana 12 (UNION) |