Capítulo 7 CLASE 7
En este capítulo se dará un vistazo más cercano a muchos de estos valores y expresiones, centrándose en aquellos que más probablemente pueda utilizar un programador principiante de SQL. En esta sección se analizan cinco funciones set: COUNT, MAX, MIN, SUM y AVG
7.1 COUNT
La primera función set que veremos será la función COUNT. Como su nombre sugiere, la función COUNT cuenta el número de filas en una tabla o el número de valores en una columna, según se especifique en la instrucción SELECT. Cuando se utiliza la función COUNT, se debe especificar un nombre de columna para contar el número de valores que no sean nulos en una columna, o un asterisco para contar todas las filas en una tabla independientemente de los valores nulos. Por ejemplo, si se quiere saber el número total de filas en la tabla CDS_ARTISTA, se puede utilizar la siguiente instrucción SELECT:
SELECT COUNT(*) AS FILAS_TOTALES FROM CDS_ARTISTA;
En esta instrucción, la función COUNT es utilizada con un asterisco (en paréntesis) para contar cada fila en la tabla CDS_ARTISTA y arrojar la cuenta total. El valor arrojado se enlista en la columna FILAS_TOTALES, que es el nombre dado a la columna arrojada en los resultados de la consulta, como se muestra en los siguientes resultados:
AS_TOTALES |
---|
10 |
Al igual que con cualquier otra clase de instrucción SELECT, se pueden cualificar los resultados de la consulta agregando a la instrucción las cláusulas necesarias. Por ejemplo, supongamos que se quiere averiguar cuántas filas incluye un valor VENDIDOS mayor a 20. Se puede modificar la instrucción SELECT para incluir una cláusula WHERE:
SELECT COUNT(*) AS FILAS_TOTALES
FROM CDS_ARTISTA
WHERE VENDIDOS > 20;
El valor arrojado ahora será 7 en lugar de 10, debido a que solamente siete filas cumplen con la condición de búsqueda especificada en la cláusula WHERE.
7.2 MAX y MIN
Las funciones MAX y MIN son tan similares que resulta ideal revisarlas juntas. La función MAX arroja el valor más alto para la columna especificada, y la función MIN arroja el valor más bajo. Ambas funciones requieren que se especifique un nombre de columna. Por ejemplo, supongamos que se quiere arrojar el valor más alto de la columna VENDIDOS en la tabla CDS_ARTISTA. La instrucción SELECT quedaría de la manera siguiente:
SELECT MAX(VENDIDOS) AS MAX_VENDIDOS FROM CDS_ARTISTA;
Cuando se ejecuta esta instrucción, los resultados de la consulta incluirán solamente un valor (una fila y una columna), como se muestra en los siguientes resultados:
7.3 MAX_VENDIDOS
54
7.4 SUM
A diferencia de las funciones MIN y MAX, que seleccionan los valores más alto y más bajo de una columna, la función SUM agrupa valores de columna. Esto es particularmente útil cuando se necesita encontrar los totales para datos agrupados (a pesar de que la función SUM, al igual que cualquier otra función set, trata a la tabla entera como un grupo único si ningún dato ha sido explícitamente agrupado). Para entender mejor la función SUM, tomemos el último ejemplo que vimos y hagámosle algunas modificaciones:
SELECT NOMBRE_ARTISTA, SUM(VENDIDOS) AS TOTAL_VENDIDOS FROM CDS_ARTISTA WHERE VENDIDOS > 30 GROUP BY NOMBRE_ARTISTA;
Como se vio anteriormente, la cláusula WHERE arroja solamente aquellas filas con un valor VENDIDOS mayor a 30. Luego estas filas son agrupadas de acuerdo con los valores de NOMBRE_ARTISTA. Una vez agrupadas, las cantidades totales de cada grupo ARTIST son arrojadas en los resultados de la consulta:
7.5 NOMBRE_ARTISTA TOTAL_VENDIDOS
Bing Crosby 34 Joni Mitchell 79 Patsy Cline 54
7.6 AVG
Como se puede imaginar, la función AVG simplemente promedia los valores en una columna especificada. Al igual que la función SUM, es más efectiva cuando se utiliza junto con una cláusula GROUP BY, a pesar de que puede ser utilizada sin la cláusula, como se muestra en el siguiente ejemplo:
SELECT AVG(VENDIDOS) AS PROM_VENDIDOS
FROM CDS_ARTISTA;
Esta instrucción arroja un valor de 29, que está basado en los valores VENDIDOS en la tabla CDS_ARTISTA. Esto significa que, para todos los CD enlistados en la tabla, se ha vendido un promedio de 29 de cada uno. A pesar de que esta información puede ser bastante útil, sería de mucha más ayuda si se estableciera una instrucción que agrupe los datos:
SELECT NOMBRE_ARTISTA, AVG(VENDIDOS) AS PROM_VENDIDOS
FROM CDS_ARTISTA
WHERE VENDIDOS > 30
GROUP BY NOMBRE_ARTISTA;
Si se ejecuta esta instrucción, se obtendrán los siguientes resultados de la consulta:
7.7 NOMBRE_ARTISTA PROM_VENDIDO
Bing Crosby 34 Joni Mitchell 39 Patsy Cline 54
7.8 PASO A PASO: Funciones en SQL
Abra la aplicación cliente para su RDBMS y conéctese con la base de datos INVENTARIO.
En la primera instrucción se determinará el número de valores NOMBRE_ARTISTA únicos en la tabla ARTISTAS. Ingrese y ejecute la siguiente instrucción SQL:
SELECT COUNT(DISTINCT NOMBRE_ARTISTA) AS ARTISTAS
FROM ARTISTAS;
La consulta deberá arrojar una cuenta de 18.
- En la siguiente instrucción se determinará el número mínimo de CD en existencia, como se enlistan en la tabla DISCOS_COMPACTOS. Se nombra la columna en los resultados de la consulta MIN_EXISTENCIA. Ingrese y ejecute la siguiente instrucción SQL:
SELECT MIN(EN_EXISTENCIA) AS MIN_EXISTENCIA
FROM DISCOS_COMPACTOS;
Los resultados de la consulta deberán incluir solamente una columna y una fila, y mostrar un valor de 5. Esto significa que 5 es el número menor de CD que se tienen en existencia para cualquier CD.
Ahora se determinará el número total de CD en existencia. Sin embargo, esta vez se agruparán estos totales de acuerdo con los valores ID_DISQUERA. Ingrese y ejecute la siguiente instrucción SQL:
SELECT ID_DISQUERA, SUM(EN_EXISTENCIA) AS TOTAL
FROM DISCOS_COMPACTOS
GROUP BY ID_DISQUERA;
La consulta arrojará 10 filas una por cada valor ID_DISQUERA. El valor TOTAL para cada fila representa el número total de CD para ese grupo particular ID_DISQUERA.
- En los pasos anteriores se utilizaron funciones set al consultar datos desde la base de datos INVENTARIO. Ahora se practicarán un par de funciones de valor. La primera de éstas es SUBSTRING. En la instrucción SELECT se extraerán los datos desde la columna LUGAR_DE_NACIMIENTO en la tabla ARTISTAS. Se necesita extraer ocho caracteres, empezando por el primer carácter en la cadena. Ingrese y ejecute la siguiente instrucción SQL:
SELECT NOMBRE_ARTISTA,
SUBSTRING(LUGAR_DE_NACIMIENTO FROM 1 FOR 8) AS LUGAR_NACIMIENTO
FROM ARTISTAS;
Los resultados de la consulta deberán arrojar 18 filas e incluir dos columnas: NOMBRE_ARTISTA y LUGAR_NACIMIENTO. La columna LUGAR_NACIMIENTO contiene los valores extraídos, los cuales están basados en la columna LUGAR_DE_NACIMIENTO de la tabla.
- La siguiente función de valor que se ejercitará es la función UPPER. En esta instrucción SELECT, los nombres de todos los CD se convertirán a mayúsculas. Ingrese y ejecute la siguiente instrucción SQL:
SELECT UPPER(TITULO_CD) AS NOMBRE_CD
FROM DISCOS_COMPACTOS;
Esta instrucción deberá arrojar 15 filas con una sola columna que enlista el nombre de los CD en la tabla DISCOS_COMPACTOS. Todos los títulos de los CD deberán estar en mayúsculas.
- Ahora nos moveremos a las expresiones de valor numéricas. La siguiente instrucción que se utilizará crea dos columnas en los resultados de la consulta que duplican y triplican los valores en la columna EN_EXISTENCIA de la tabla DISCOS_COMPACTOS. Sin embargo, la instrucción arroja valores solamente para aquellas filas con un valor EN_EXISTENCIA menor a 25. Ingrese y ejecute la siguiente instrucción SQL:
SELECT TITULO_CD, EN_EXISTENCIA,
(EN_EXISTENCIA * 2) AS DOBLE, (EN_EXISTENCIA * 3) AS TRIPLE
FROM DISCOS_COMPACTOS
WHERE EN_EXISTENCIA < 25;
La instrucción SELECT deberá arrojar nueve filas, y cada una deberá incluir valores EN_EXISTENCIA que han sido multiplicados por 2 y por 3.
La siguiente expresión de valor será la expresión CASE. Esta instrucción proporcionará valores EN_EXISTENCIA actualizados a la columna EN_PEDIDO de los resultados de la consulta. Para los valores EN_EXISTENCIA menores a 10, los valores serán duplicados. Para los valores EN_EXISTENCIA que caigan dentro del rango entre 10 y 15, será sumado un 3. Todos los demás valores EN_EXISTENCIA permanecerán iguales. La instrucción opera solamente en aquellas filas cuyo valor EN_EXISTENCIA original sea menor a 20. Ingrese y ejecute la siguiente instrucción SQL:
SELECT TITULO_CD, EN_EXISTENCIA, EN_PEDIDO =
CASE
WHEN EN_EXISTENCIA < 10 THEN EN_EXISTENCIA * 2
WHEN EN_EXISTENCIA BETWEEN 10 AND 15 THEN EN_EXISTENCIA + 3
ELSE EN_EXISTENCIA
END FROM DISCOS_COMPACTOS WHERE EN_EXISTENCIA < 20;
Los resultados de la consulta deberán incluir solamente siete filas, y la columna EN_PEDIDO de los resultados de la consulta deberá contener los valores actualizados.
- Ahora se ejercitará la expresión de valor CAST. Se consultará la tabla TIPOS_MUSICA, pero se convertirá el tipo de datos de la columna NOMBRE_TIPO en los resultados de la consulta. Ingrese y ejecute la siguiente instrucción SQL:
SELECT ID_TIPO, CAST(NOMBRE_TIPO AS CHAR(20)) AS CHAR_TIPO
FROM TIPOS_MUSICA;
Los resultados de la consulta deberán arrojar 11 filas. Los resultados deberán incluir una columna CHAR_TIPO que contenga los valores convertidos.
INSERT INTO DISQUERAS_CD
VALUES ( 837, 'DRG Records' );
- Cierre la aplicación de cliente.
Al momento de terminar el ejercicio, la base de datos INVENTARIO deberá contener lo mismo que cuando se empezó el ejercicio.