Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да ограничите редовете в MySQL набор от резултати

Проблем:

Искате да ограничите броя на редовете в набор от резултати в MySQL.

Пример:

Нашата база данни има таблица с име student с данни в колоните id , first_name , last_name и age .

id first_name фамилно_име възраст
1 Стивън Уотсън 25
2 Лиза Андерсън 19
3 Алиса Милър 19
4 Мери Кафяв 25
5 Луси Уотсън 25
6 Майкъл Джаксън 22

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

Решение:

SELECT first_name, last_name, age
FROM student
LIMIT 3;

Ето резултата от заявката:

id first_name фамилно_име възраст
1 Стивън Уотсън 25
2 Лиза Андерсън 19
3 Алиса Милър 19

Дискусия:

Клаузата LIMIT ограничава броя на редовете в набора от резултати. Използва се в оператора SELECT, обикновено в края на оператора. (Дори ORDER BY трябва да се посочи преди LIMIT.)

Единственият задължителен аргумент е броят на редовете за показване. В нашия пример LIMIT 3 създаде набор от резултати, съдържащ три реда. Освен ако не посочите друго с аргумента OFFSET, тази функция винаги ще връща първия n редове, които отговарят на изискванията за заявка.

Незадължителният аргумент OFFSET на LIMIT се поставя преди аргумента, указващ броя на върнатите редове. Показва позицията на първия ред, върната от LIMIT (т.е. „0“ е първият ред, 1 е вторият ред и т.н.). Отместването и броят на редовете са разделени със запетая.

Заявката връща същите записи като предишната заявка, тъй като отместването е нула. (Нулата е стойността на отместване по подразбиране.)

SELECT first_name, last_name, age
FROM student
LIMIT 0, 3;

В тези заявки редовете с резултати са неподредени. Ако искате да изберете три реда от сортиран набор от резултати, използвайте ORDER BY:

SELECT first_name, last_name, age
FROM student
ORDER BY age DESC, last_name, first_name
LIMIT 1,3;

Тук първо подреждаме редовете по възраст (надолу), след това по фамилия, след това по собствено име. Използваме стойността на отместване, за да започнем от втория върнат ред и ограничаваме резултатите до три реда:

first_name фамилно_име възраст
Луси Уотсън 25
Стивън Уотсън 25
Майкъл Джаксън 22

Тази заявка първо сортира редовете според колоната за възрастта в низходящ ред. След това сортира по last_name и first_name във възходящ ред. Ако погледнете таблицата, ще видите, че най-възрастните ученици (Стивън, Луси, Мери) са на 25 години. Мария обаче е пропусната, защото тя е първият ред и отместването е 1 (т.е. започваме с втория ред). Луси вече е първа, защото първото й име идва преди Стивън. (Стивън и Луси имат едно и също фамилно име, така че реда им се определя от собственото име.) Майкъл е на 22, което го прави следващият най-възрастен ученик и последният от трите върнати реда.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете MySQL йерархична рекурсивна заявка?

  2. Увеличете полето на базата данни с 1

  3. PDO::PARAM за тип десетичен?

  4. Ръководство за проектиране на база данни за бюлетин в MySQL

  5. Грешка:командата за избор е отказана на потребителя '<userid>'@'<ip-address>' за таблица '<table-name>'