SQL: determinar límite en consultas

En este texto voy a tratar de explicar la manera en que los tres gestores de bases de datos más importantes que tenemos como alternativa a la hora de desarrollar aplicaciones web (Oracle, SQL Server y MySQL) resuelven el problema de la limitación de la cantidad de registros recuperados por parte del usuario. Para ello, comienzo con una breve introducción, la cual puede ser ignorada por aquellos expertos en la materia.

Breve introducción

El lenguaje SQL (Structured Query Language o Lenguaje de Consulta Estructurado), es un conjunto de reglas creadas específicamente para trabajar e interactuar con bases de datos relacionales. Establece un modo sencillo de recuperar registros, campos o tablas enteras con sólo escribir una línea de código.

Imaginen la siguiente tabla:

Personas
Nombre Sexo Estatura
Luis H 178
Borja H 182
Almudena M 167
Alvaro H 194
María M 159
Juan H 183
Andrés H 173

Partiendo de esta tabla, si queremos recuperar el nombre de todas aquellas personas de sexo masculino de más de 180 centímetros de estatura, nos bastaría con escribir la siguiente sentencia:

SELECT nombre FROM personas WHERE sexo = ‘H’ AND estatura > 180

Dicha sentencia nos devolvería los siguientes datos:

Nombre
Borja
Alvaro
Juan

Si lo que queremos es recuperar todos los campos de todos los registros, es decir, la tabla completa de más arriba, bastaría con escribir:

SELECT * FROM personas

Estos mensajes SQL, que también pueden servir para actualizar o alterar valores de campos o borrar registros, además de otras muchas cosas, se insertan en el código de los programas, a su vez escrito en cualquier lenguaje de programación, siguiendo las reglas establecidas por éste último. Es decir, la manera de incluirlo es diferente en cada lenguaje, aunque el código a incluir sea exactamente el mismo.

Nuestro problema

SQL es el lenguaje estándar a la hora de acceder a las tablas y registros de todos los sistemas de gestión de base de datos, pero aunque es único y estándar, hay determinadas operaciones que no puede realizar o no están contempladas por motivos de muy diversa índole, por lo que son los sistemas de gestión en sí los que se encargan de añadir ciertas reglas que, sumadas a las anteriores, consiguen abarcar todos los objetivos que precisa un programador. Una de estas funcionalidades es la de limitar el número de registros recuperados por una determinada consulta.

Por ejemplo, partiendo de la tabla que creamos en la Introducción, imaginemos que queremos recuperar los nombres todas las personas de sexo masculino que midan más de 180, pero en vez de recuperarlas todas, sólo deseo obtener los dos primeros registros. Este tipo de restricciones pueden ser muy útiles a la hora de no saturar una página con cientos y cientos de registros, o a la hora de realizar una paginación.

Vamos a ver cómo realizaríamos esta operación en cada uno de los tres sistemas de gestión de bases de datos más importantes.

MySQL

Es el sistema menos potente y robusto de los tres, especialmente diseñado para pequeñas aplicaciones web desarrolladas por no profesionales y de forma gratuita. La manera que tiene de abordar el problema es sencilla, tan sólo hay que incluir una cláusula más a la consulta que le indique el primer registro a mostrar y la cantidad de ellos que queremos ver. Es la cláusula “LIMIT”.

SELECT nombre
FROM personas
WHERE sexo = ‘H’
   AND estatura > 180
LIMIT 0,2

SQL Server

Se trata del gestor de Microsoft, especialmente dedicado a aplicaciones desarrolladas en .NET. Soluciona nuestro problema de una manera aún más sencilla que la anterior, con sólo incluir la cláusula “TOP” tras la aparición de la palabra clave “SELECT”.

SELECT TOP 2 nombre
FROM personas
WHERE sexo = ‘H’
   AND estatura > 180

ORACLE

El gestor más versátil de los tres, que no el más potente, en lucha constante con el anterior, está destinado a cualquier lenguaje de programación que lo soporte, en contraposición a su rival, que sólo funciona en plataformas Microsoft (esto tiene su miga y no me voy a meter mucho más). Es el sistema que más se complica a la hora de abordar este problema.

Para ello, genera una variable, tal y como si fuera un campo más de cada registro de la tabla, llamada “rownum”, la cual se incrementa por cada registro que vamos recuperando. De esta manera, sólo tenemos que acceder a esta variable y controbar que no sobrepasa el número que nos hemos propuesto como límite.

SELECT nombre
FROM personas
WHERE sexo = ‘H’
   AND estatura > 180
AND rownum <= 2

Resultado

En cualquiera de los casos anteriores, el resultado devuelto sería:

Nombre
Borja
Alvaro

Pues esto es todo. Este tipo de textos resultarán muy útiles para aquellos que trabajen con diferentes tipos de lenguajes, de manera que el paso de uno a otro no les resulte tan difícil o tedioso, abocados a las entrañas del dios supremo de la red.

Deja un comentario