Предикати ALL, DISTINCT, DISTINCTROW и TOP
Applies ToAccess за Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Задава записите, избрани с SQL заявки.

Синтаксис

SELECT [ALL | РАЗЛИЧНИ | DISTINCTROW | [TOP n [PERCENT]]]FROM таблица

Командата SELECT, съдържаща тези предикати, има следните части:

Част

Описание

ALL

Предполага се, ако не включите някой от предикати. Ядрото на базата данни на Microsoft Access избира всички записи, които отговарят на условията в SQL командата. Следващите два примера са еквивалентни и връщат всички записи от таблицата "Служители":

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

DISTINCT

Пропуска записи, които съдържат дублирани данни в избраните полета. За да бъдат включени в резултатите от заявката, стойностите за всяко поле, посочено в командата SELECT, трябва да са уникални. Например няколко служители, включени в таблицата "Служители", може да имат едно и също фамилно име. Ако два записа съдържат Smith в полето LastName, следната SQL команда връща само един запис, който съдържа Smith:

SELECT DISTINCT LastNameFROM Employees;

Ако изпуснете DISTINCT, тази заявка връща двата записа на Smith.

Ако клаузата SELECT съдържа повече от едно поле, комбинацията от стойности от всички полета трябва да бъде уникална за даден запис, за да бъде включен в резултатите.

Резултатът от заявка, която използва DISTINCT, не може да се актуализира и не отразява последващите промени, направени от други потребители.

DISTINCTROW

Пропуска данни, базирани на цели дублирани записи, а не само дублирани полета. Можете например да създадете заявка, която съединява таблиците "Клиенти" и "Поръчки" в полето "ИД на клиент". Таблицата "Клиенти" не съдържа дублирани полета CustomerID, но таблицата "Поръчки" има, защото всеки клиент може да има много поръчки. Следната SQL команда показва как можете да използвате DISTINCTROW, за да създадете списък с фирми, които имат поне една поръчка, но без подробности за тези поръчки:

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

Ако изпуснете DISTINCTROW, тази заявка създава множество редове за всяка фирма, която има повече от един ред.

DISTINCTROW има ефект само когато изберете полета от някои, но не от всички, от таблиците, използвани в заявката. DISTINCTROW се игнорира, ако вашата заявка включва само една таблица или ако извеждате полета от всички таблици.

TOP n [PERCENT]

Връща определен брой записи, които попадат в горната или долната част на диапазон, зададен от клауза ORDER BY. Да предположим, че искате имената на първите 25 ученици от класа на 1994 г.:

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

Ако не включите клаузата ORDER BY, заявката ще върне произволен набор от 25 записа от таблицата "Ученици", които удовлетворяват клаузата WHERE.

Предикатът TOP не избира между равни стойности. В предишния пример, ако средното за двадесет и пето и двадесет и шесто от най-високите оценки е едно и също, заявката ще върне 26 записа.

Можете също да използвате запазената дума PERCENT, за да се върне определен процент от записите, които попадат в горната или долната част на диапазон, зададен от клауза ORDER BY. Да предположим, че вместо първите 25 ученици искате последните 10 процента от класа:

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

Предикатът на ASC задава връщане на най-ниските стойности. Стойността, която следва TOP, трябва да бъде неподписано цяло число.

TOP не засяга дали заявката може да се актуализира.

таблица

Името на таблицата, от която са извлечени записите.

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.