2009-05-17 48 views

Respuesta

42

Sería de gran ayuda si se especifica lo base de datos que apuntan a. Diferentes bases de datos tienen diferentes sintaxis y técnicas para lograr esto:

Por ejemplo en Oracle puede ahieve esto poniendo la condición de RowNum (select ... from ... where ... rownum < 11 -> daría lugar a la salida de los primeros 10 registros)

En MySQL se puede utilizar puede usar la cláusula limit.

Microsoft SQL Server =>SELECT TOP 10 column FROM table

PostgreSQL y MySQL =>SELECT column FROM table LIMIT 10

Oracle =>select * from (SELECT column FROM table) WHERE ROWNUM <= 10 (gracias a stili)

Sybase =>SET rowcount 10 SELECT column FROM table

Firebird =>SELECT FIRST 10 column FROM table

NOTA: Modern ORM herramientas como Hibernate dan API de alto nivel (consulta, restricción, interfaces de Estado) que abstraen la lógica de filas superiores n basado en el dialecto que elija.

+1

Ingres y informix (SQL 92 creo) SELECCIONE PRIMERA columna 10 DE la tabla – corlettk

+0

Yup ...SELECT FIRST 10 es el estándar, al parecer. Ref: http://www.hamslab.com/~man2/sql/SQL98/index.html#sql92 – corlettk

+1

Lo sentimos, pero la solución de Oracle no funciona. Rownum necesita SQL anidado para funcionar, de lo contrario no manejará ningún tipo de orden que no sea el ejemplo trivial sin cláusula de orden. – stili

6

Lo sé con MySQL, pero no sé si es SQL estándar: finaliza la consulta con 'límite X', X = n. de líneas que quieres obtener

Ejemplo:

SELECT NAME FROM EMPLOYEES ORDER BY SALARY DESC LIMIT 10;

+0

+1. Sospecho que LIMIT es SQL estándar. En cualquier caso, también funciona con PostgreSQL. –

+1

El límite no es estándar. MSSQL no lo tiene. –

+2

LIMIT no es estándar, aunque está bastante extendido. El estándar SQL: 2008 por alguna razón fue con el método DB2 de FETCH FIRST, aunque muy pocos otros productos lo implementan .... Ver http://troels.arvin.dk/db/rdbms/#select-limit para más detalles . – kquinn

10

Para Oracle, la solución sugerida y aceptada es incorrecta. Intenta usar una cláusula de orden y los resultados serán impredecibles. El SQL deberá estar anidado para lograr esto en Oracle.

select name, price 
    from (
    select name, price, row_number() over (order by price) r 
     from items 
) 
where r between 1 and 5; 

El ejemplo anterior fue tomado de http://www.adp-gmbh.ch/ora/sql/examples/first_rows.html que tiene una buena discusión sobre este tema.

+0

Gracias stili para señalar –

+0

Cuando necesita la primera N de acuerdo con un orden en particular, considere un índice en la columna orderby (por ejemplo, "precio" en este ejemplo) - el optimizador puede encontrar más barato leer el índice en orden de precio , dando así las primeras N filas más rápido sin escanear toda la tabla. Sin el índice, el db debe leer todas las filas de la tabla antes de que pueda decir definitivamente que se encuentran las N filas superiores. –

-1

Para Oracle, puede probar este

select /*+ FIRST_ROWS(10) */ * from table; 
Cuestiones relacionadas