11.02.2013, Vladimír Klaus, navštíveno 9983x

MS Access
SQL

Tento příkaz umí vyhledat záznamy, které se vyskytují jak v prvním, tak i v druhém dotazu. Je to zkrátka klasický průnik. MS Access tento příkaz ale nezná, ale jak už bylo několikrát zmíněno, je zde náhrada. A tou je INNER JOIN, samozřejmě vhodně nastavený.

Mějme dva základní dotazy – první vypíše zákazníky z Prahy a druhý zákazníky, kteří si objednali alespoň za 1000 Kč.

SELECT * FROM Zakaznici WHERE Mesto LIKE "Praha*"

SQL obrázek

SELECT * FROM Objednavky WHERE Castka >= 1000

SQL obrázek

A nyní nás zajímají zákazníci, kteří jsou z Prahy a objednali si alespoň za 1000 Kč. Protože máme údaje ve dvou tabulkách, musíme je nejprve spojit. K tomu slouží INNER JOIN. Ale jak už asi vidíte z předchozího obrázku, někteří zákazníci si objednali více než jednou, a proto by byly ve výsledku vícekrát. Ale tak funkce INTERSECT pochopitelně nemůže fungovat. Přidáme tedy kouzelné slovo DISTINCT a je to.

SELECT DISTINCT Zakaznici.ID, Zakaznici.Prijmeni, Zakaznici.Mesto
FROM Zakaznici
INNER JOIN
  (SELECT * FROM Objednavky WHERE Castka >= 1000) b
  ON (Zakaznici.ID = b.IdZakaznika)
  WHERE Zakaznici.Mesto LIKE "Praha*"

SQL obrázek