En la lección anterior se han examinado los constructos que el lenguaje SQL pone a disposición para incluir los datos en una base de datos relacional. Vamos a ver ahora, sin embargo, las instrucciones necesarias para extraer de ella los datos que nos interesen. La instrucción SQL que se propone para dicho fin es SELECT. Desde el momento en que la interrogación es quizá la función más usada de una base de datos, las opciones de la instrucción SELECT son numerosas y a veces bastante complicadas. Por esta razón vamos a describirlas simplificadas, utilizando ejemplos para la presentación de las características más complejas, en concreto las que se refieren a la especificación de las expresiones condicionales.
La sintaxis con que la instrucción SELECT se tiene que usar es la siguiente:
SELECT [ ALL | DISTINCT ] lista_elementos_selección
FROM lista_referencias_tabla
[ WHERE expresión_condicional ]
[ GROUP BY lista_columnas ]
[ HAVING expresión_condicional ]
[ ORDER BY lista_columnas ]
La instrucción SELECT produce una tabla que se obtiene aplicando el siguiente procedimiento (por lo menos desde el punto de vista lógico, cada DBMS optimiza la ejecución de las interrogaciones según las propias estrategias):
- produce una tabla que se obtiene como producto cartesiano de las tablas especificadas en la cláusula FROM. Cada elemento de la lista_referencias_tabla sigue la siguiente sintaxis:
referencia_tabla [ [ AS ] alias_tabla ]
La referencia puede ser el nombre de una tabla o una expresión (puesta entre paréntesis) cuyo resultado es una tabla, y por lo tanto incluso otra SELECT. El alias es un nombre que sirve para indicar brevemente una referencia de tabla. En el caso en que la referencia de tabla sea una expresión, es obligatorio especificar un alias.
- de la tabla anterior elimina todas las líneas que no satisfacen la expresión condicional (es decir las líneas por las cuales la expresión condicional devuelve falso como resultado) de la cláusula WHERE.
- (si está presente la cláusula GROUP BY) las líneas de la tabla resultante del paso 2 se reagrupan según los valores presentes en las columnas especificadas en la cláusula GROUP BY. Líneas con valores iguales se unen en una única línea. Las columnas no comprendidas en la cláusula tienen que comprender expresiones con funciones de agregación (como por ejemplo AVG, que calcula la media) que, por tanto, se calculan produciendo un único valor para cada grupo.
- (si está presente la cláusula HAVING) del resultado del punto 3 se eliminan las líneas que no satisfacen la expresión condicional de la cláusula HAVING.
- Se claculan las columnas presentes en la cláusula SELECT (las de la lista_elementos_selección). En concreto, se calculan las columnas con las funciones de agregación que derivan del reagrupamiento que se ha producido en el punto 3. Cada elemento de la lista_elementos_selección sigue la siguiente sintaxis:
expresión_escalar [ [ AS ] alias_columna ]
Una expresión escalar es una expresión que produce como resultado un valor escalar. Los tipos de datos escalares del lenguaje SQL son principalmente los descritos en la lección 6 (Crear la base de datos), excepto INTERVAL, DATE, TIME y TIMESTAMP.
Las expresiones escalares de los elementos de SELECT normalmente afectan a las columnas de la tabla resultante del punto 4. En el caso en que se den ambigüedades, por la presencia de columnas con los mismos nombres en dos o más tablas incluidas en la cláusula FOR, se pueden resolver prefijando el nombre o el alias de la columna con el nombre o el alias de la tabla, separados por un punto. Por ejemplo, T.C indica la columna C de la tabla T. El alias de columna es el nombre que se le da a la columna.
Toda la lista de las columnas de una tabla puede especificarse usando el carácter '*'.
- (si está presente la opción DISTINCT) se eliminan las líneas que resultan duplicadas. En el caso en que no estén presentes ni ALL ni DISTINCT, se asume ALL.
- (si está presente la cláusula ORDER BY) las líneas de la tabla se ordenan según los valores presentes en las columnas especificadas en la cláusula. La sintaxis que hay que usar es la siguiente:
ORDER BY nombre_columna [ ASC | DESC ] [ , nombre_columna [ ASC | DESC ] ... ]
Usuarios que han visto este tema también han visto...
- Subconsultas SQL
- Optimizar consultas SQL
- EXISTS y ALL en SQL
- Funciones de cadena en SQL
- Función para el cálculo de días laborables en SQL
- Versión imprimible de este documento
- Enviar por e-mail este documento