2011-04-14 12 views
39

Una pregunta rápida. Supongamos que tengo las dos consultas siguientes:Diferencia entre la palabra clave superior y la clave de límite en SQL

SELECT TOP 2 * FROM Persons; 

y

SELECT * FROM Persons limit 2; 

Quiero saber la diferencia entre la ejecución de las 2 consultas anteriores? Básicamente, quiero saber cuándo debo usar la palabra clave limit y cuándo es apropiado usar la palabra clave top. Además, ¿cómo devuelve la base de datos los resultados basados ​​en las 2 consultas anteriores?

+3

yo sepa no hay ninguna diferencia real. TOP es la sintaxis de SQL Server y el límite es la sintaxis de MySQL. Diferente DBMS pero con el mismo propósito. –

Respuesta

43

Si está usando SQL Server, use TOP si está usando MySQL o Postgres use Limit!

AFAIK no hay ningún producto que actualmente sea compatible con ambos. Here's one lista de las implementaciones actuales y here's another (cubre más productos pero con menos detalle)

+8

SAP HANA [admite TOP y LIMIT] (http://help.sap.com/saphelp_hanaplatform/helpdata/en/20/fcf24075191014a89e9dc7b8408b26/content.htm?frameset=/en/20/fc06a7751910149892c0d09be21a38/frameset.htm¤t_toc=/ es/2e/1ef8b4f4554739959886e55d4c127b/plain.htm & node_id = 195). – rene

9

limit trabaja en MySQL y PostgreSQL, top trabaja en SQL Server, rownum trabaja en Oracle.

-5

un gran error, LÍMITE lentamente porque select devuelve completo y luego el servidor de base de datos devuelve solo datos limitados. Cuando es posible se usa para TOP.

+2

esto ciertamente no es cierto en postgresql - que no admite la sintaxis TOP de todos modos - haga un SELECCIONAR con un LÍMITE y mientras no haya una cláusula ORDER BY obtendrá una salida tan pronto como la consulta pueda terminar lógicamente con ese límite –

20

Según lo indicado en mi comentario para la respuesta anterior de Martin Smith, hay productos que apoyan ambos, LIMIT y TOP (como puedes ver here). La diferencia es que TOP solamente selecciona los primeros n registros, pero LIMIT permite la definición de un desplazamiento para recuperar un rango específico de registros:

SELECT * FROM ... LIMIT 5 OFFSET 10 

Esta sentencia selecciona los 5 primeros registros, después de saltar 10 registros y esto no es no es posible con TOP.

El ejemplo que publiqué solo se compara con el DBS que he vinculado anteriormente. No revisé un estándar SQL, por falta de tiempo.

4

No hay diferencia. Las palabras clave TOP y LIMIT funcionan de manera idéntica y devolverán lo mismo.

9

TOP & limitar tanto el trabajo en Amazon Redshift

+0

De hecho lo hacen: http://docs.aws.amazon.com/redshift/latest/dg/r_Examples_with_TOP.html –

Cuestiones relacionadas