SELECT TOP, LIMIT, ROWNUM — Учебник SQL — Schoolsw3.com
schoolsw3.com
САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ
❮ Назад Далее ❯
TOP
Инструкция SELECT TOP используется для указания количества возвращаемых записей.
Инструкция SELECT TOP полезно для больших таблиц с тысячами записей. Возврат большого количества записей может повлиять на производительность.
Примечание: Не все базы данных поддерживают SELECT TOP. MySQL поддерживает предложение LIMIT для выбора ограниченного числа записей, в то время как Oracle использует ROWNUM.
Синтаксис SQL Server / MS Access:
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
Синтаксис MySQL:
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Синтаксис Oracle:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Демо база данных
Ниже приведен выбор из таблицы «Customers» в образце базы данных Northwind:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Примеры SQL TOP, LIMIT и ROWNUM
Следующая инструкция SQL выбирает первые три записи из таблицы «Customers»:
Пример
SELECT TOP 3 * FROM Customers;
Попробуйте сами »
Следующий оператор SQL показывает эквивалентный пример использования предложения LIMIT:
Пример
SELECT * FROM Customers
LIMIT 3;
Попробуйте сами »
Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
Пример
SELECT * FROM Customers
WHERE ROWNUM <= 3;
Пример SQL TOP PERCENT
Следующая инструкция SQL выбирает первые 50% записей из таблицы «Customers»:
Пример
SELECT TOP 50 PERCENT * FROM Customers;
Попробуйте сами »
Добавить WHERE
Следующая инструкция SQL выбирает первые три записи из таблицы «Customers», где страна — «Germany»:
Пример
SELECT TOP 3 * FROM Customers
Попробуйте сами »
Следующий оператор SQL показывает эквивалентный пример использования LIMIT:
Пример
SELECT * FROM Customers
WHERE Country=’Germany’
LIMIT 3;
Попробуйте сами »
Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
Пример
SELECT * FROM Customers
WHERE Country=’Germany’ AND ROWNUM <= 3;
❮ Назад Далее ❯
ВЫБОР ЦВЕТА
ТОП Учебники
HTML УчебникCSS Учебник
JavaScript Учебник
КАК Учебник
SQL Учебник
Python Учебник
W3. CSS Учебник
Bootstrap Учебник
PHP Учебник
Java Учебник
C++ Учебник
jQuery Учебник
ТОП Справочники
HTML СправочникCSS Справочник
JavaScript Справочник
SQL Справочник
Python Справочник
W3.CSS Справочник
Bootstrap Справочник
PHP Справочник
HTML Цвета
Java Справочник
Angular Справочник
jQuery Справочник
ТОП Примеры
HTML ПримерыCSS Примеры
JavaScript Примеры
КАК Примеры
SQL Примеры
Python Примеры
W3.CSS Примеры
Bootstrap Примеры
PHP Примеры
Java Примеры
XML Примеры
jQuery Примеры
Форум | О SchoolsW3
SchoolsW3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.
Авторское право 1999- Все права защищены.
SchoolsW3 работает на площадке от SW3.CSS.
SQL SELECT TOP 1 –
спросил
Изменено 5 лет, 7 месяцев назад
Просмотрено 134 тыс. раз
Я получаю странные результаты из таблицы, из которой выбираю. Рассмотрим следующую таблицу:
USERID TICKETSASSIGNED 1 0 100 0 101 0 102 0 103 0
Теперь, если у меня есть следующий sql, как в:
SELECT TOP 1 USERID ИЗ ТАБЛЕКС ЗАКАЗАТЬ ПО БИЛЕТАМ
Я ожидаю получить результат «1», но чаще всего я получаю «100», вторую запись.
Поскольку все значения TICKETSASSIGNED
равны «0», он случайным образом выбирает то, которое, по его мнению, является TOP 1, поскольку это поле, в котором я заказываю. Чтобы получить правильное значение «1» в этом случае, мне также пришлось заказать USERID
.Есть идеи?
1
Я ожидаю получить результат «1», но чаще всего я получаю «100», вторую запись. Поскольку все значения TICKETSASSINGED равны «0», он случайным образом выбирает тот, который, по его мнению, является TOP 1, поскольку это поле, в котором я заказываю. Чтобы получить правильное значение «1» в этом случае, мне также пришлось заказать на USERID.
Это поведение по умолчанию во всех SQL — порядок не гарантируется, если нет предложения ORDER BY, и в этом случае вы не упорядочиваете соответствующие данные, поэтому база данных произвольно выбирает строку.
Использование:
ЗАКАЗ ПО БИЛЕТАМ, НАЗНАЧЕННЫМ, ID ПОЛЬЗОВАТЕЛЯ
В этом случае вам понадобится второй столбец в предложении ORDER BY
:
SELECT TOP 1 USERID ИЗ ТАБЛЕКС ЗАКАЗ ПО БИЛЕТАМ, НАЗНАЧЕННЫМ, ID ПОЛЬЗОВАТЕЛЯ
Без этого это , вероятно, , дающее вам записи, заказанные TICKETASSIGNED
, а затем их физическое расположение в таблице, например. порядке, в котором они были вставлены в большинстве случаев.
Если вы проверите документацию для TOP
: TOP (Transact-SQL), особенно в первых двух абзацах в разделе «Примечания», прямо указано, что TOP не упорядочивает строки. Таким образом, используется тот порядок, который вы навязали сами себе.
К сожалению, ваш заказ неполный. Только иногда получается производить то, что вы хотите.
Правильный способ — именно то, что вы придумали, нужно заказывать еще и по USERID.
Если вы заказываете только по TICKETSASSIGNED
и все они имеют одинаковые значения, нет причин, по которым какая-либо конкретная запись должна быть возвращена в качестве верхней. Если вы хотите получить лучший, используя USERID
в качестве следующего поля для заказа, тогда да, вы должны просто добавить USERID
в предложение заказа по.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
sql server — Что означает TOP 1 в sql-запросе?
спросил
Изменено 10 лет назад
Просмотрено 23 тысячи раз
Что означает TOP 1 в запросе sql?
SELECT TOP 1 RequestId ОТ PublisherRequests
- SQL-сервер
1
Я не согласен с «Порядок будет определяться на основе кластеризованного ключа в этой таблице».
Электронная документация по SQL Server весьма ясна: Если в запросе нет предложения ORDER BY, порядок строк произвольный
репродукция, демонстрирующая, что это не всегда так: без ORDER BY порядок сортировки по умолчанию отсутствует.
1
Будет выбрана первая строка из таблицы PublisherRequests
.
РЕДАКТИРОВАТЬ: [Порядок будет определяться на основе кластерного ключа в этой таблице — это утверждение неверно]. На самом деле, по выводам Алекса и согласно BOL, порядок строк будет произвольным.
Справку можно найти здесь.
2
Запрос в примере вернет первый RequestID
из таблицы PublisherRequests
.
RequestID
(т. е. первый RequestID
в произвольно упорядоченном списке RequestID
s).