Problem:
Chcesz ograniczyć liczbę wierszy w zestawie wyników w MySQL.
Przykład:
Nasza baza danych zawiera tabelę o nazwie student
z danymi w kolumnach id
, first_name
, last_name
i age
.
id | imię | nazwisko | wiek |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alicja | Młynarz | 19 |
4 | Maryi | Brązowy | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Wybierzmy imiona i nazwiska uczniów oraz ich wiek, ale ograniczmy zwracane wiersze do trzech.
Rozwiązanie:
SELECT first_name, last_name, age FROM student LIMIT 3;
Oto wynik zapytania:
id | imię | nazwisko | wiek |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alicja | Młynarz | 19 |
Dyskusja:
Klauzula LIMIT ogranicza liczbę wierszy w zestawie wyników. Jest używany w instrukcji SELECT, zwykle na końcu instrukcji. (Nawet ORDER BY powinno być wymienione przed LIMIT.)
Jedynym wymaganym argumentem jest liczba wierszy do wyświetlenia. W naszym przykładzie LIMIT 3 wygenerował zestaw wyników zawierający trzy wiersze. O ile nie określisz inaczej z argumentem PRZESUNIĘCIE, ta funkcja zawsze zwróci pierwsze n wiersze spełniające wymagania zapytania.
Opcjonalny argument OFFSET funkcji LIMIT jest umieszczany przed argumentem wskazującym liczbę zwróconych wierszy. Wskazuje pozycję pierwszego wiersza zwróconego przez LIMIT (tj. „0” to pierwszy wiersz, 1 to drugi wiersz itd.). Przesunięcie i liczba wierszy są oddzielone przecinkiem.
Zapytanie zwraca te same rekordy, co poprzednie, ponieważ przesunięcie wynosi zero. (zero jest domyślną wartością przesunięcia).
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
W tych zapytaniach wiersze wyników są nieuporządkowane. Jeśli chcesz wybrać trzy wiersze z posortowanego zestawu wyników, użyj opcji ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Tutaj najpierw porządkujemy wiersze według wieku (według stanu początkowego), potem nazwiska, a następnie imienia. Używamy wartości przesunięcia, aby rozpocząć od drugiego zwróconego wiersza i ograniczamy wyniki do trzech wierszy:
imię | nazwisko | wiek |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
To zapytanie najpierw sortuje wiersze według kolumny wieku w porządku malejącym. Następnie sortuje według last_name
i first_name
w porządku rosnącym. Jeśli spojrzysz na stół, zobaczysz, że najstarsi uczniowie (Steven, Lucy, Mary) mają 25 lat. Jednak Mary została pominięta, ponieważ jest w pierwszym rzędzie, a przesunięcie wynosi 1 (tzn. zaczynamy od drugiego rzędu). Lucy jest teraz pierwsza, ponieważ jej imię jest przed Stevenem. (Steven i Lucy mają to samo nazwisko, więc ich kolejność zależy od imienia.) Michael ma 22 lata, co czyni go kolejnym najstarszym uczniem i ostatnim z trzech rzędów zwróconych.