SQL - TOP/LIMIT Klauzula


Ograničavanje skupova rezultata

U nekim situacijama, možda vas ne zanimaju svi redovi vraćeni upitom, na primjer, ako samo želite dohvatiti prvih 10 zaposlenih koji su se nedavno pridružili organizaciji, dobiti najbolje 3 studente po ocjeni ili nešto slično. Za rješavanje takvih situacija možete upotrijebiti SQL-ovu TOP klauzulu u SELECT izrazu. Međutim, TOP klauzulu podržavaju samo sistemi baza podataka SQL Server i MS Access. MySQL pruža ekvivalentnu LIMIT klauzulu, dok Oracle daje ROWNUM klauzulu za SELECT izjavu za ograničavanje broja redova vraćenih upitom.



SQL TOP Sintaksa

SQL TOP klauzula koristi se za ograničavanje broja vraćenih redova. Njegova osnovna sintaksa je:

SELECT TOP number | percent column_list FROM table_name;

Ovdje je column_list zarezom odvojen popis kolona ili polja tabele baze podataka (npr. ime, starost, država itd.) Čije vrijednosti želite dohvatiti. Da vidimo kako to funkcioniše. Pretpostavimo da u našoj bazi podataka imamo tabelu zaposlenih sa sljedećim zapisima:



Sljedeća izjava vraća tri najbolje plaćena radnika sa tabele zaposlenih.

-- Sintaksa za SQL Server Database  
SELECT TOP 3 * FROM employees
ORDER BY salary DESC;

Vraćeni skup rezultata izgledaće otprilike ovako:



Možete opcionalno koristiti PERCENT ključnu riječ nakon fiksne vrijednosti u TOP klauzuli, ako želite samo dohvatiti postotak reda umjesto fiksnog broja reda. Frakcijske vrijednosti zaokružuju se do sljedeće cjelobrojne vrijednosti (npr. 1,5 zaokružuju se na 2). Sljedeća izjava vraća prvih 30 posto zaposlenih sa najvećom platom.

-- Sintaksa za SQL Server Database  
SELECT TOP 30 PERCENT * FROM employees
ORDER BY salary DESC;

Skup rezultata koji se vraća gornjim upitom izgledat će ovako:




MySQL LIMIT Sintaksa

Klauzula MySQL LIMIT djeluje na isti način kao i SQL TOP klauzula. Njegova osnovna sintaksa je:

SELECT column_list FROM table_name LIMIT number;

Sljedeća izjava vraća tri najbolje plaćena radnika sa tabele zaposlenih.

-- Sintaksa za MySQL Database 
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 3;

Nakon izvršenja, dobit ćete izlaz ovako:





Postavljanje pomaka reda u klauzuli LIMIT

Klauzula LIMIT prihvata neobavezni drugi parametar. Kad su navedena dva parametra, prvi parametar određuje pomak prvog reda za povratak, tj. početnu točku, dok drugi parametar određuje maksimalni broj redova koje treba vratiti. Pomak početnog reda je 0 (ne 1). Dakle, ako želite saznati treće najviše plaćenog zaposlenika, možete učiniti sljedeće:

-- Sintaksa za MySQL Database 
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;

Nakon izvršenja gornje naredbe, dobit ćete samo jedan zapis u vašem skupu rezultata: