¿Hay alguna diferencia entre 'LIMIT 0, 1' y 'LIMIT 1'?

15

Recientemente me topé con códigos de ejemplo, que diferían según estas anotaciones.

SELECT * FROM table LIMIT 0, 1
SELECT * FROM table LIMIT 1

El primer argumento debe considerarse como el desplazamiento si no me equivoco, el propósito de esas dos consultas es limitar la selección a la primera fila de table

¿Hay algún efecto negativo al dejar fuera el desplazamiento / cómo es posible dejarlo fuera en primer lugar? ¿O entendí mal las consultas?

Gimu
fuente
3
No, lo entendiste bien, son equivalentes. Esta es también: LIMIT 1 OFFSET 0. Pero realmente debe incluir ORDER BYen cualquier consulta que tenga LIMIT, a menos que haya una razón específica para no hacerlo.
ypercubeᵀᴹ

Respuestas:

13

Como dice la documentación :

La  LIMIT cláusula se puede usar para restringir el número de filas devueltas por la  SELECT instrucción. LIMIT toma uno o dos argumentos numéricos, que deben ser constantes enteras no negativas (excepto cuando se usan declaraciones preparadas).

Con dos argumentos, el primer argumento especifica el desplazamiento de la primera fila para devolver, y el segundo especifica el número máximo de filas para devolver. The offset of the initial row is 0 (not 1).

La LIMITcláusula se usa en la SELECTinstrucción para restringir el número de filas en un conjunto de resultados. La LIMITcláusula acepta uno o dos argumentos. Los valores de ambos argumentos deben ser constantes enteros positivos o cero.

A continuación se ilustra la LIMITsintaxis de la cláusula con 2 argumentos:

SELECT * FROM tbl
LIMIT offset, count;

Veamos qué significan el desplazamiento y el recuento en la cláusula LIMIT:

  • El offsetespecifica el desplazamiento de la primera fila a devolver. El desplazamiento de la primera fila es 0, no 1.
  • El countespecifica el número máximo de filas para devolver.

Cuando se usa LIMITcon un argumento, este argumento se usará para especificar el número máximo de filas que se devolverán desde el comienzo del conjunto de resultados.

SELECT * FROM tbl LIMIT count;

La consulta anterior es equivalente a la siguiente consulta con la LIMITcláusula que acepta dos argumentos:

SELECT * FROM tbl LIMIT 0, count;

La LIMITcláusula de uso frecuente con ORDER BYcláusula. Primero, usa la ORDER BYcláusula para ordenar el conjunto de resultados según un determinado criterio, y luego usa la LIMITcláusula para encontrar los valores más bajos o más altos.

oNare
fuente