Predikáty ALL, DISTINCT, DISTINCTROW, TOP

Určuje záznamy vybrané pomocí dotazů SQL.

Syntaxe

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]Tabulka FROM

Příkaz SELECT obsahující tyto predikáty má následující části:

Část

Popis

ALL

Předpokládá se, pokud nezahrnete jeden z predikátů. Databázový stroj Microsoft Access vybere všechny záznamy, které splňují podmínky v příkazu SQL. Následující dva příklady jsou ekvivalentní a vrátí všechny záznamy z tabulky Employees:

SELECT ALL *FROM EmployeesORDER BY EmployeeID;
SELECT *FROM EmployeesORDER BY EmployeeID;

DISTINCT

Vynechá záznamy, které obsahují duplicitní data ve vybraných polích. Aby bylo možné zahrnout do výsledků dotazu, musí být hodnoty pro každé pole uvedené v příkazu SELECT jedinečné. Například několik zaměstnanců uvedených v tabulce Zaměstnanci může mít stejné příjmení. Pokud dva záznamy obsahují v poli Příjmení Smitha, vrátí následující příkaz SQL pouze jeden záznam, který obsahuje Smith:

SELECT DISTINCT LastNameFROM Employees;

Pokud funkci DISTINCT vynecháte, vrátí tento dotaz oba záznamy Smithe.

Pokud klauzule SELECT obsahuje více než jedno pole, musí být kombinace hodnot ze všech polí jedinečná, aby se daný záznam zahrnul do výsledků.

Výstup dotazu, který používá distinct, není aktualizovatelný a neodráží následné změny provedené jinými uživateli.

DISTINCTROW

Vynechá data založená na celých duplicitních záznamech, ne jenom na duplicitních polích. Můžete například vytvořit dotaz, který spojí tabulky Customers (Zákazníci) a Orders (Objednávky) v poli CustomerID (ID zákazníka). Tabulka Zákazníci neobsahuje žádná duplicitní pole CustomerID, ale tabulka Orders ano, protože každý zákazník může mít mnoho objednávek. Následující příkaz SQL ukazuje, jak můžete pomocí funkce DISTINCTROW vytvořit seznam společností, které mají alespoň jednu objednávku, ale bez jakýchkoli podrobností o těchto objednávkách:

SELECT DISTINCTROW CompanyNameFROM Customers INNER JOIN OrdersON Customers.CustomerID = Orders.CustomerIDORDER BY CompanyName;

Pokud nástroj DISTINCTROW vynecháte, vytvoří tento dotaz více řádků pro každou společnost, která má více než jednu objednávku.

Funkce DISTINCTROW má vliv pouze v případě, že vyberete pole z některých, ale ne všech tabulek použitých v dotazu. Funkce DISTINCTROW se ignoruje, pokud dotaz obsahuje pouze jednu tabulku nebo pokud je výstupem polí ze všech tabulek.

HORNÍ n [PROCENTO]

Vrátí určitý počet záznamů, které spadají do horní nebo dolní části rozsahu určeného klauzulí ORDER BY. Předpokládejme, že chcete jména 25 nejlepších studentů ze třídy v roce 1994:

SELECT TOP 25FirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage DESC;

Pokud nezadáte klauzuli ORDER BY, dotaz vrátí libovolnou sadu 25 záznamů z tabulky Students, které splňují klauzuli WHERE.

Predikát TOP si nevybírejte mezi stejnými hodnotami. V předchozím příkladu platí, že pokud je průměr dvacátého pátého a dvacátého šestého nejvyššího stupně stejný, vrátí dotaz 26 záznamů.

Pomocí rezervovaného slova PERCENT můžete také vrátit určité procento záznamů, které spadají do horní nebo dolní části rozsahu určeného klauzulí ORDER BY. Předpokládejme, že místo prvních 25 studentů potřebujete posledních 10 procent předmětu:

SELECT TOP 10 PERCENTFirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage ASC;

Predikát ASC určuje návrat nejnižších hodnot. Hodnota za hodnotou TOP musí být celé číslo bez znaménka.

FUNKCE TOP nemá vliv na to, jestli je dotaz aktualizovatelný.

tabulka

Název tabulky, ze které jsou načítány záznamy.

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.