Cláusula superior en SQL Server con ejemplos

La mayoría de las veces en la vida real, tratamos de encontrar los tres mejores puntajes en una clase, los cinco mejores corredores en una maratón o los 10 objetivos principales del mes. El servidor SQL tiene una característica para seleccionar los registros TOP n de una tabla.

Podemos recuperar los registros TOP n de una tabla sin usar una cláusula WHERE. TOP también se puede utilizar con sentencias DML como Actualizar y Eliminar. La mayoría de las veces, TOP se usa con una cláusula Order by para ordenar los resultados primero en orden ascendente o descendente y luego para obtener los registros TOP n. Una orden por cláusula con TOP se asegura de que hemos ordenado los datos de una tabla.

TOP se usa como limitador de filas en el servidor SQL al igual que LIMIT en Mysql.

Veamos un ejemplo de TOP utilizado en una tabla.

Crear tabla SSCResults (Id. IDENTIDAD INT (1,1) TECLA PRINCIPAL, nombre VARCHAR (100), puntuación NUMÉRICA (18,2)); INSERTE EN SSCResults VALUES ('Shailesh A', 98.0); INSERTE EN SSCResults VALUES ('Atul K', 90.0); INSERTE EN SSCResults VALUES ('Vishal P', 89.0); INSERTE EN SSCResults VALUES ('Naryan N', 88.0); INSERTE EN SSCResults VALUES ('Rohit G', 88.0); INSERTAR EN SSCResults VALUES ('Varsha K', 85.0); INSERTAR EN SSCResults VALUES ('Sangram K', 83.0); Insertar en SSCResults VALUES ('Vish K', 79.0); SELECT * FROM SSCResults;


Ejemplo 1 - Selección de registros TOP n en SQL Server: encuentre los tres mejores puntajes en una tabla SSCResults

Una forma rápida de encontrar esto es ordenar la columna de Puntuación en orden descendente y seleccionar los tres primeros registros.

SELECCIONE EL TOP 3 * DE SSCResults PEDIDO POR Score DESC


La consulta anterior clasificó primero el campo Puntuación desde la puntuación más alta a la puntuación más baja, y luego seleccionó las tres mejores puntuaciones. SELECT * indica que queremos recuperar todas las columnas de la tabla SSCResults.

Ejemplo 2 - Top con empates: Tratar con valores empatados

Cuando consultamos la tabla SSCResults, vemos que Id = 4 y Id = 5 tienen la misma puntuación. En este caso, si obtengo los cuatro registros principales de la tabla de resultados de SSCR según la columna Puntuación, Id = 5 no aparecerá en la lista porque la condición de los 4 registros principales no está configurada para manejar un escenario de empate.

Vamos a consultar los cuatro primeros registros de la tabla SSCResults.

SELECCIONAR TOP 4 * DE SSCResults


No vimos que Id = 5 tiene la misma puntuación que Id = 4 en los resultados anteriores porque no manejamos un escenario de empate. Para obtener el registro Id = 5, necesitamos usar TOP con TIES.

SELECCIONE LOS 4 MEJORES PUNTOS * DESDE SSCResults PEDIDO POR Score DESC


Cláusula superior con estados de actualización y eliminación

Ejemplo 3: Actualización de los 3 registros principales en una tabla: actualice los tres registros principales en una tabla

Vamos a actualizar la puntuación de los 3 mejores anotadores en un 0,5 por ciento.

No podemos usar Order by directamente con una declaración de actualización. Necesitamos usar una subconsulta para seleccionar los tres registros principales y luego actualizar.

actualice SSCResults set Score = Score + 0.5 donde ID en (seleccione ID superior 3 de SSCResults ordenar por puntuación desc);


La consulta anterior ejecutará la subconsulta primero para seleccionar los tres identificadores principales (los tres mejores anotadores), y luego actualizará sus puntajes agregando 0.5 por ciento.

seleccione * de SSCResults order by score desc


Podemos ver que los porcentajes de los tres mejores puntajes se han actualizado en un 0,5 por ciento.

Ejemplo 4: eliminar los 3 registros principales de una tabla: elimine las tres puntuaciones más bajas de la tabla

ELIMINAR DE SSCResultados donde ID en (seleccione ID superior 3 de SSCResults orden por puntuación ASC);


Primero, la subconsulta obtendrá las puntuaciones más bajas de la tabla SSCResults, y una consulta externa eliminará estos registros en función de la ID producida por la subconsulta.