Come limitare i risultati su una query SQL
Domanda
mi chiedo è possibile limitare il risultato di una richiesta SQL?
Per esempio, solo ritorno fino a 50 righe da:
SELECT * FROM <table>
Grazie.
Soluzione
Sì, questo è possibile. Ciò differisce tra i motori db.
Postgres:
SELECT * FROM <table> LIMIT 50
SQL Server:
SELECT TOP 50 * FROM <table>
...
Altri suggerimenti
Si potrebbe utilizzare il clausola TOP :
SELECT TOP 50 * FROM <table>
Se il database non supporta lo si può provare anche LIMIT
e ROWNUM
ma ancora una volta questo dipenderà dal database in uso.
Sì, naturalmente, è possibile, in MySQL:
La clausola LIMIT può essere utilizzato per limitare il numero di righe restituite dall'istruzione SELECT. LIMIT richiede uno o due argomenti numerici, che devono essere sia costanti intero non negativo (tranne con istruzioni preparate).
Con due argomenti, i primi specifica l'argomento di offset della prima fila di ritorno, e la seconda specifica il numero massimo di righe da restituire. L'offset della riga iniziale è 0 (non 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
Per recuperare tutte le righe da un offset fino alla fine del set di risultati certi, è possibile utilizzare alcuni gran numero per il secondo parametro. Questa dichiarazione recupera tutte le righe dalla fila 96 ° per l'ultimo:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
Con un argomento, il valore specifica il numero di righe da restituire a partire dall'inizio del set di risultati:
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
In altre parole, LIMIT row_count equivale a LIMIT 0, row_count.
In MySQL si dovrebbe utilizzare un LIMIT clausola
SELECT * FROM <table> LIMIT 50
SQL standard
Come ho spiegato in questo articolo , SQL: 2008 standard fornisce la seguente sintassi per limitare il set di risultati SQL:
SELECT
title
FROM
post
ORDER BY
id DESC
FETCH FIRST 50 ROWS ONLY
Lo SQL: 2008. Top-N registra clausola è supportato in Oracle dal 12c, SQL Server dal 2012, e dal momento che PostgreSQL 8.4
SQL Server
Mentre SQL Server supporta SQL: 2008 Top-N sintassi standard, è necessario fornire la clausola OFFSET così:
SELECT
title
FROM
post
ORDER BY
id DESC
OFFSET 0 ROWS
FETCH FIRST 50 ROWS ONLY
In vecchie versioni di SQL Server, è possibile utilizzare TOP:
SELECT TOP 50
title
FROM
post
ORDER BY
id DESC
Oracle 11g e le vecchie versioni
Prima della versione 12c, per andare a prendere i record Top-N, era necessario utilizzare una tabella derivata e la pseudocolonna ROWNUM:
SELECT *
FROM (
SELECT
title
FROM
post
ORDER BY
id DESC
)
WHERE ROWNUM <= 50
MySQL e PostgreSQL 8.3 o più anziani
Tradizionalmente, MySQL e PostgreSQL utilizzare la clausola LIMIT per limitare il set di risultati ai record Top-N:
SELECT
title
FROM
post
ORDER BY
id DESC
LIMIT 50