Select top 1 sql: SQL SELECT TOP, LIMIT, ROWNUM

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:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköp Christina BerglundBerguvsvägen 8LuleåS-958 22Sweden


Примеры 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

WHERE Country=’Germany’;

Попробуйте сами »

Следующий оператор 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 .

Порядок результатов без 9Пункт 0019 Order By является произвольным. Таким образом, ваш пример вернет произвольный RequestID (т. е. первый RequestID в произвольно упорядоченном списке RequestID s).
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *