Funciones y cláusulas de la instrucción SELECT en SQL: Guía completa

Continuando con nuestra serie de artículos sobre los conceptos básicos del estándar SQL, en esta segunda parte hablaremos sobre funciones y cláusulas adicionales que puedes utilizar en tus consultas de datos SELECT.

Índice de Contenido
  1. Utiliza ORDER BY para ordenar los resultados
  2. DISTINCT devuelve resultados únicos
  3. Las funciones aplican lógica
    1. COUNT
    2. AVG
    3. SUM
    4. MIN
    5. MAX
  4. GROUP BY ayuda a que las funciones sean más útiles
  5. Limitando consultas que usan GROUP BY
  6. En resumen

Utiliza ORDER BY para ordenar los resultados

La cláusula ORDER BY te permite ordenar los resultados de tu consulta de forma automática, sin necesidad de realizar esta operación manualmente en tu código de aplicación. La cláusula ORDER BY debe colocarse al final de la sentencia de consulta.

El uso básico es el siguiente:
SELECT * FROM Contactos ORDER BY Nombre;

Puedes utilizar ORDER BY con cualquier sentencia SELECT que pueda devolver múltiples filas. También puedes combinarlo con otras cláusulas:
SELECT Nombre, Apellido FROM Contactos WHERE Nombre BETWEEN 'a' AND 'k' ORDER BY Apellido;

Puedes especificar múltiples columnas para ordenar. La precedencia se da de izquierda a derecha, por lo que el orden en que listes las columnas es importante.
SELECT * FROM Contactos ORDER BY Compañía, Apellido, Nombre;

Por defecto, los resultados se muestran en orden ascendente, ya sea numérico o alfabético. Puedes cambiar este comportamiento incluyendo la palabra clave DESC después del nombre de cualquier columna en la cláusula ORDER BY. En el siguiente ejemplo, el net_amount más alto se mostrará primero (en orden descendente). Si dos o más filas contienen el mismo valor de net_amount, se mostrarán primero las entradas con el valor de last_name que aparece antes en orden alfabético, ya que la columna last_name aún se ordena en orden ascendente.
SELECT * FROM Ventas ORDER BY net_amount DESC, last_name, nombre;

Cómo utilizar las herramientas de transformación de datos en Microsoft SQL Server 2000Cómo utilizar las herramientas de transformación de datos en Microsoft SQL Server 2000

Después de agotar los nombres de columna definidos para ordenar, la mayoría de las bases de datos ordenarán por la primera columna de la tabla y avanzarán hacia la derecha. Sin embargo, la implementación en este área puede variar, por lo que si el orden de clasificación es importante, debes definir explícitamente las columnas a utilizar.

Otra cosa útil a tener en cuenta es que, al igual que con la cláusula WHERE, las columnas que estás utilizando para ordenar los resultados no tienen que formar parte del conjunto de resultados devuelto. El siguiente ejemplo es perfectamente válido, siempre y cuando todas las columnas referenciadas existan en la tabla:
SELECT Compañía, Nombre, net_amount FROM Ventas ORDER BY fecha_inicio, last_name;

DISTINCT devuelve resultados únicos

La palabra clave DISTINCT devuelve solo filas únicas dentro de un conjunto de resultados. Tal vez necesites saber, por ejemplo, qué compañías están representadas en tu tabla de Ventas, pero no quieres ver todas las entradas. Puedes usar DISTINCT para devolver una fila por cada nombre de compañía único:
SELECT DISTINCT Compañía FROM Ventas;

Cuando utilizas DISTINCT, se aplica a todas las columnas solicitadas. Si deseas una lista de todos los vendedores en tu tabla y las compañías que representan, pero no todas las entradas de ventas, puedes usar la siguiente consulta. Ten en cuenta que esto puede devolver varias entradas de la misma compañía, etc. DISTINCT se aplica al conjunto de resultados completo solicitado.
SELECT DISTINCT Compañía, Apellido, Nombre FROM Ventas;

Aún puedes utilizar DISTINCT al limitar y ordenar tus resultados, al igual que con cualquier sentencia SELECT. Para determinar lo que se muestra, la base de datos primero verifica si la solicitud refinada coincide con una fila y luego aplica la función DISTINCT. La cláusula ORDER BY siempre se procesa después de determinar el conjunto de resultados completo. En el siguiente ejemplo, solo se devolverán las filas en las que el net_amount sea mayor que 100. Dado que DISTINCT mantiene la primera fila encontrada que coincide con el conjunto de resultados de la consulta y descarta el resto, la columna net_amount referenciada en la cláusula ORDER BY puede parecer que produce resultados ordenados de forma aleatoria.
SELECT DISTINCT Compañía, Apellido, Nombre FROM Ventas WHERE net_amount > 100 ORDER BY Compañía, net_amount;

Las funciones aplican lógica

Las funciones que devuelven un solo valor se denominan funciones de agregado. Cuando accedes a los resultados de una de las siguientes funciones de agregado desde tu aplicación, el "nombre del campo" que contiene los resultados será la función que utilizaste. Por ejemplo, al analizar los resultados de tu base de datos, la clave en tu matriz de resultados puede verse de la siguiente manera:
$nombreclave = "COUNT(*)";
$resultadoclave = "AVG(net_amount)";

Cómo utilizar subselects en SQL para optimizar tus consultas

COUNT

La función COUNT te indica cuántas filas hay en un conjunto de resultados. Al igual que con todas las funciones, acepta un parámetro. Este ejemplo básico te dirá cuántas filas hay en tu tabla:
SELECT COUNT(*) FROM Ventas;

También puedes utilizarlo para contar el número de filas en cualquier conjunto de resultados.
SELECT COUNT(*) FROM Ventas WHERE net_amount > 100;

Si deseas ver cuántas filas contienen valores no nulos para una columna específica, puedes utilizar COUNT en esa columna. Ten en cuenta que esto devolverá el número total de filas a menos que la base de datos esté configurada para que el valor predeterminado sea NULL cuando un campo esté vacío para la columna en cuestión. Además, listar más de un nombre de columna provocará un error.
SELECT COUNT(Compañía) FROM Ventas;

También se puede aplicar COUNT para contar el número de filas en un conjunto de resultados DISTINCT.
SELECT COUNT(DISTINCT Compañía, Apellido) FROM Ventas;

La sentencia COUNT se utiliza con frecuencia para determinar el número de iteraciones que se utilizarán en un bucle FOR en tu código.

AVG

AVG devuelve el promedio de todos los valores en una columna con un tipo de datos numérico. Acepta un nombre de columna como parámetro y devolverá "0" si se utiliza en una columna no numérica.
SELECT AVG(net_amount) FROM Ventas;

El poder y la importancia del lenguaje SQL en el desarrollo de software

Puedes limitar el alcance de esta función con cláusulas adicionales.
SELECT AVG(net_amount) FROM Ventas WHERE Compañía LIKE '%ABCD Co%';

Al igual que todas las funciones de agregado, la cláusula ORDER BY se omitirá.

SUM

SUM funciona de la misma forma que AVG, excepto que devuelve la suma de los valores en todos los campos del conjunto de resultados.
SELECT SUM(net_amount) FROM Ventas WHERE net_amount > 100;

Las funciones AVG, SUM, MIN y MAX devolverán un error si no especificas una columna, por lo que no puedes utilizar el comodín '*'.

MIN

MIN devuelve el valor más bajo que no sea nulo en la columna especificada. Si la columna es de tipo numérico, el resultado será el número más bajo. Si es un tipo de dato de cadena, se devolverá el valor que aparezca primero en orden alfabético.
SELECT MIN(net_amount) FROM Ventas WHERE Apellido = "Smith";
SELECT MIN(Apellido) FROM Ventas;

MAX

MAX funciona de la misma forma que MIN, solo que devuelve el valor más alto que no sea nulo. También se puede utilizar en cadenas o números.
SELECT MAX(net_amount) FROM Ventas;
SELECT MAX(Compañía) FROM Ventas WHERE net_amount > 100;

Tipos de datos datetime e intervalo en SQL92: descripción y uso

La función MAX se utiliza a veces en columnas que contienen un campo de clave de incremento automático para determinar cuál será el siguiente ID de clave de entrada. A menos que estés utilizando una base de datos no pública, ten cuidado al utilizar esta información para insertar la siguiente entrada, ya que otro usuario puede adelantarse.

GROUP BY ayuda a que las funciones sean más útiles

Aunque todas estas funciones proporcionan información útil, la cláusula GROUP BY te permite aplicar esas funciones a un subconjunto de campos en una columna. En lugar de ejecutar una consulta que contenga la función MAX una vez para cada compañía en tu tabla Ventas, puedes ejecutar una sola consulta con la cláusula GROUP BY para obtener los mismos resultados:
SELECT Compañía, MAX(net_amount) FROM Ventas GROUP BY Compañía;

Esto te da el net_amount más alto para cada compañía. También puedes utilizar esta consulta al seleccionar varios nombres de columna y utilizar varias columnas para agrupar los resultados de la función.

Los siguientes ejemplos ilustran las diversas formas en que esto producirá resultados. Primero, incluir la cláusula GROUP BY te permite especificar columnas adicionales para mostrar. Sin embargo, ten en cuenta que este ejemplo devolverá el primer valor de last_name encontrado en el grupo; el SUM(net_amount) mostrado será para toda la compañía y no solo para las filas que coinciden con el apellido. Esto se debe a que solo utilizamos el campo company para definir nuestro grupo.
SELECT Compañía, Apellido, SUM(net_amount) FROM Ventas GROUP BY Compañía;

En el ejemplo anterior, la columna de last_name proporciona información bastante inútil, pero puedes solicitarla en tu consulta debido a la funcionalidad en el siguiente ejemplo. Puedes crear grupos definidos por múltiples columnas. Esto producirá resultados de función para filas únicas en el conjunto de resultados creado por la combinación de todas las columnas especificadas en GROUP BY:
SELECT Compañía, AVG(net_amount), Apellido FROM Ventas GROUP BY Compañía, Apellido;

El ejemplo anterior proporciona el net_amount promedio para cada apellido único en cada compañía. El orden en que enumeras las columnas de GROUP BY controla el orden de clasificación de los resultados, aunque los resultados reales de los valores de función serán los mismos.

Cuál es el mejor motor de base de datos para MySQL

Otro ejemplo muestra cómo puedes agrupar resultados sin mostrar las columnas agrupadas. Esto es útil, por ejemplo, si quieres mostrar el número de ventas por persona, pero mantener los nombres anónimos:
SELECT Compañía, COUNT(id_venta) FROM Ventas GROUP BY Compañía, Apellido;

Limitando consultas que usan GROUP BY

Como viste anteriormente, puedes limitar el alcance de las consultas que utilizan estos conceptos con la cláusula WHERE. La cláusula WHERE se evaluará primero y luego se aplicará la función. Esto se mantiene también al utilizar grupos.
SELECT Compañía, AVG(net_amount) FROM Ventas WHERE net_amount > 100 GROUP BY Compañía;

El ejemplo anterior aplicará la función AVG solo a las filas que califiquen bajo la restricción WHERE. Ten en cuenta que la cláusula WHERE debe preceder a la cláusula GROUP BY. También puedes limitar el conjunto de resultados devueltos después de que se evalúen los grupos con la instrucción HAVING.
SELECT Compañía, AVG(net_amount) FROM Ventas WHERE last_name BETWEEN 'a' AND 'm' GROUP BY Compañía HAVING AVG(net_amount) > 500;

La declaración anterior calcula el net_amount promedio para cada compañía, evaluando solo los valores para personas cuyo apellido cumple con los criterios y mostrando solo los resultados que son mayores que 500.

En resumen

Si has llegado hasta aquí, ¡felicidades! Has sobrevivido a la segunda parte de nuestra serie sobre los conceptos básicos de SQL. Has aprendido muchos de los conceptos básicos utilizados con las sentencias SELECT al consultar una sola tabla, incluyendo cómo ordenar resultados y obtener información útil con la palabra clave DISTINCT y funciones de agregado. Al igual que en el segmento anterior, si encontraste esto útil o tienes preguntas, envíanos un correo electrónico y responderemos con futuros artículos.

Fundamentos del diseño de bases de datos relacionales: tipos de relaciones y cómo establecerlas

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Funciones y cláusulas de la instrucción SELECT en SQL: Guía completa , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.