English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Clausola TOP / LIMIT di MySQL di SQL

In questo tutorial, imparerai come recuperare un numero specifico di record da una tabella.

Limitare il set di risultati

In alcuni casi, potrebbe non essere necessario restituire tutte le righe della query, ad esempio, se si desidera recuperare i primi 10 dipendenti che si sono uniti all'organizzazione recentemente, o i primi 3 studenti per punteggio, ecc.

Per gestire questa situazione, è possibile utilizzare la clausola TOP nella query SQL. Tuttavia, la clausola TOP è supportata solo dai sistemi di database SQL Server e MS Access.

MySQL fornisce una clausola LIMIT equivalente, mentre Oracle fornisce la clausola ROWNUM per le istruzioni SELECT per limitare il numero di righe restituite.

Sintassi di SQL TOP

La clausola TOP di SQL viene utilizzata per limitare il numero di righe restituite. La sua sintassi di base è:

SELECT TOP number | percent column_list FROM table_name;

qui,column_listElenca, separati da virgola, i nomi delle colonne o dei campi del database da cui ottenere i valori (ad esempioname,age,countryecc.). Vediamo come funziona.

Supponiamo di avere unemployeesTabella, che contiene i seguenti record:

+--------+--------------+------------+--------+---------+
| emp_id     | emp_name             | hire_date         | salary         | dept_id         |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|         2         | Tony     Montana    | 2002-07-15    |        6500     |                 1             |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

La seguente query restituisceImpiegato (employees)I primi tre con il reddito più alto nella tabellaImpiegato.

-- Sintassi per il database SQL Server  
SELECT TOP 3 * FROM employees
ORDER BY salary DESC;

Il set di risultati restituito sarà come segue:

+--------+--------------+------------+--------+---------+
| emp_id     | emp_name             | hire_date         | salary         | dept_id         |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|         2         | Tony     Montana    | 2002-07-15    |        6500     |                 1             |
+--------+--------------+------------+--------+---------+

Se si desidera recuperare solo la percentuale di righe invece di un numero fisso di righe, è possibile utilizzare la parola chiave PERCENT dopo il valore fisso della clausola TOP. I valori decimali vengono arrotondati al numero intero successivo (ad esempio, 1.5 arrotondato a 2).

La seguente query restituisce il 30% degli impiegati con il reddito più alto.

-- Sintassi del database SQL Server
SELECT TOP 30 PERCENT * FROM employees
ORDER BY salary DESC;

Il set di risultati della query sopra elencata sarà come segue:

+--------+--------------+------------+--------+---------+
| emp_id     | emp_name             | hire_date         | salary         | dept_id         |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+

Sintassi LIMIT di MySQL

La clausola LIMIT di MySQL ha lo stesso effetto della clausola TOP di SQL. La sua sintassi di base è:

SELECT column_list FROM table_name LIMIT number;

La seguente query restituisceImpiegato (employees)I primi tre con il reddito più alto nella tabellaImpiegato.

-- Sintassi del database MySQL
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 3;

Dopo l'esecuzione, otterrai l'output seguente:

+--------+--------------+------------+--------+---------+
| emp_id     | emp_name             | hire_date         | salary         | dept_id         |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|         2         | Tony     Montana    | 2002-07-15    |        6500     |                 1             |
+--------+--------------+------------+--------+---------+

Attenzione: Nel comando SELECT, è sempre necessarioORDER BYLa clausola deve essere utilizzata insieme alla clausola LIMIT. Altrimenti, potresti non ottenere i risultati desiderati.

Impostare l'offset di riga nella clausola LIMIT

La clausola LIMIT accetta un secondo parametro opzionale.

Quando due parametri sono specificati, il primo parametro specifica l'offset della riga iniziale da restituire, ossia il punto di partenza, mentre il secondo parametro specifica il numero massimo di righe da restituire. L'offset della riga iniziale è 0 (non 1).

Quindi, se si desidera trovare il dipendente con il terzo stipendio più alto, è possibile eseguire le seguenti operazioni:

-- Sintassi del database MySQL
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;

Dopo l'esecuzione dell'ordine sopra, il risultato della query avrà solo una registrazione:

+--------+--------------+------------+--------+---------+
| emp_id     | emp_name             | hire_date         | salary         | dept_id         |
+--------+--------------+------------+--------+---------+
|         2         | Tony     Montana    | 2002-07-15    |        6500     |                 1             |
+--------+--------------+------------+--------+---------+