Предикат ТОР позволяет возвращать определенное число записей из общего числа записей, получающегося в результате отбора по заданному условию.
Предикат ТОР часто используется совместно с предложением ORDER BY для обеспечения возможности вывода в ответ записей, находящихся в начале или в конце некоего диапазона. При этом в зависимости от запроса выбирается нужный вид упорядочения (ASC или DESC).
Следующая инструкция SQL позволяет получить список пяти лучших студентов выпуска 2002 г.:
SELECT TOP 5 Имя, Фамилия
FROMСтуденты
WHEREГодВыпуска =2002
ORDER BYСреднийБалл DESC;
Предикат ТОР не осуществляет выбор между равными значениями. Если в предыдущем примере средние баллы пятого и шестого студента будут равны, то запрос возвратит шесть записей.
Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY Предположим, что вместо пяти лучших студентов следует отобрать 10% студентов с наиболее низкой успеваемостью:
SELECT TOP 10 PERCENT Фамилия, Имя
FROM Студенты
WHERE ГодВыпуска = 1994
ORDER BY СреднийБалл ASC;
Предикат ASC обеспечивает упорядочение по возрастанию. В принципе его можно было не указывать, так как ASC является значением по умолчанию.
Значение, следующее после предиката ТОР, должно быть числовым значением без знака типа Integer.
Следует обратить внимание на то, что аргументы DISTINCTROW и ТОР, используемые в Access, отсутствуют в стандарте SQL.
Если запрос затрагивает несколько таблиц и в них имеются одноименные поля, перед именами таких полей необходимо ввести имя таблицы и знак « . » (точка).
Предположим, что есть две таблицы: «Продукция» (с полями «Код_продукции», «Наименование_продукции») и «Поставка» (с полями «Код_продукции», «Дата», «Количество»). Поле «Код_продукции» содержится в обеих таблицах. Следующий оператор SQL отберет поле «Наименование_продукции» и «Код_продукции» из таблицы «Продукция» и поля «Дата» и «Количество» из таблицы «Поставка»:
предыдущаяследующая