5- Uso de sentencias avanzadas
Objetivos:
Elaborar sentencias de manejo de datos.
Recursos:
Microsoft SQL Server Management Studio Guías prácticas.
Introducción:
Después de trabajar con las sentencias de agregar, modificar, editar y visualizar datos, debemos de ver algunas sentencias y modificadores para refinar y mejorar las búsquedas de nuestras bases de datos.
MAX y MIN
Las funciones MAX y MIN son muy similares así que las revisaremos juntas 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 tenemos una tabla de las ventas por ciudad de una empresa, y necesitamos saber cual es la venta máxima y cual es la mínima o mejor cuales es la máxima y mínima.
Tabla: vtaxciudad
Puedo obtener los resultados ejecutanmos las siguientes consultas: SELECT MAX(tot_ventas)AS 'VENTA MAYOR' FROM vtaxciudad
SELECT MIN(tot_ventas)AS 'VENTA MENOR' FROM vtaxciudad
SELECT MAX(tot_ventas)AS 'VENTA MAYOR',MIN(tot_ventas)AS 'VENTA MENOR' FROM vtaxciudad
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:
Este resultado, por sí mismo, no resulta de mucha ayuda. Sería mejor si los resultados de la consulta también incluyeran el nombre de la ciudad. Sin embargo, SQL no soporta una instrucción SELECT como la siguiente:
SELECT nom_ciudad,MIN(tot_ventas) AS 'VENTA MENOR' FROM vtaxciudad
Esta consulta generaría un error, pues no soporta colocar una columna adicional sin un modificador.
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 total de registros de la siguiente tabla:
Elaboraremos la siguiente consulta:
SELECT COUNT(tot_ventas)AS 'Total Registros' FROM vtaxvendedor
La cual nos dará como resultado:
También puede utilizar la sentencia WHERE para contar los registros de esa condición, por ejemplo:
SELECT COUNT(tot_ventas)AS 'Total Registros' FROM vtaxvendedor WHERE vendedor = 'Karla Alas' Esto nos dara como resultado la cantidad de dos, que son la cantidad de registros que tiene el vendedor seleccionado.
GROUP BY
La siguiente cláusula en la instrucción SELECT es la cláusula GROUP BY. La cláusula GROUP BY tiene una función muy diferente de la cláusula WHERE. Como su nombre lo indica, la cláusula GROUP BY se utiliza para agrupar tipos de información con el fin de resumir datos relacionados. La cláusula GROUP BY se puede incluir en la instrucción SELECT aun si la cláusula WHERE se utiliza o no.
Si utilizamos la tabla de vtaxvendedor y queremos agrupar y saber cuantas ventas tengo por vendedor, ejecutaremos la siguiente consulta:
SELECT vendedor AS Vendedor,SUM(tot_ventas) AS 'Total Vendido' FROM vtaxvendedor GROUP BY vendedor
También puedo usar WHERE para solo ver el resultado de un vendedor, por ejemplo: SELECT vendedor AS Vendedor,SUM(tot_ventas) AS 'Total Ventas' FROM vtaxvendedor WHERE vendedor = 'Karla Alas' GROUP BY vendedor
Esto nos dará el siguiente resultado:
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.
Para entender mejor la función SUM, tomemos la tabla vtaxvendedor de ventas por vendedor. Y pro usamos la siguiente consulta:
SELECT SUM(tot_ventas) AS TOTAL_VENDIDOS FROM vtaxvendedor
Esta nos da como resultado la siguiente pantalla.
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, si quisiera agrupar a los vendedores y obtener el total de ventas por cada uno de ellos, realizaríamos la siguiente consulta:
SELECT vendedor AS Vendedor,SUM(tot_ventas) AS 'Total Vendido' FROM vtaxvendedor GROUP BY vendedor
Si lo necesita también podrá incorporar WHERE a su consulta.
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(tot_ventas) AS 'Total Vendido' FROM vtaxvendedor
Lo cual nos da por resultado el siguiente:
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 vendedor as Vendedor,AVG(tot_ventas) AS 'Total Vendido' FROM vtaxvendedor GROUP BY vendedor
Si se ejecuta esta instrucción, se obtendrán los siguientes resultados de la consulta:
Esto nos daría como resultado la venta promedio de cada vendedor.
BETWEEN
Hablando estrictamente, el predicado BETWEEN no es un predicado de comparación. Sin embargo, es lo suficientemente similar en funciones al operador Mayor que o Igual a y a los operadores Menor que o Igual a, que vale la pena analizar aquí.
El predicado BETWEEN se utiliza en conjunción con la palabra clave AND para identificar un rango de valores que pueden ser incluidos como una condición de búsqueda en la cláusula WHERE. Los valores en la columna identificada deben entrar en ese rango para poder
evaluarse, utilizando la tabla vtaxvendedor, podemos hacer la siguiente consulta:
SELECT vendedor AS Vendedor, tot_ventas AS Ventas FROM vtaxvendedor WHERE tot_ventas between 500 and 2000
Lo cual nos daría el siguiente resultado:
Nos mostraría las ventas por vendedor que estén entre 500 y 2000 dolares.
IN
El predicado IN permite determinar si los valores en la columna especificada de una tabla están contenidos en una lista definida o contenidos dentro de otra tabla. En el primer caso, se debe especificar el nombre de la columna, la palabra clave IN y una lista de valores que son comparados a los valores en la columna especificada. En el segundo caso, se debe especificar el nombre de la columna, la palabra clave IN y una subconsulta, que hace referencia a la segunda tabla. En cada caso, si el valor de la columna coincide con uno de los valores en la lista o en los resultados de la subconsulta, el predicado se evalúa como verdadero y la fila es arrojada en los resultados de la consulta.
La mejor forma de ilustrar ambos de estos métodos es por medio de ejemplos. Usando siempre la tabla de vtaxvendedor evaluaremos la primera opción con la siguiente consulta. SELECT * FROM vtaxvendedor WHERE tot_ventas IN (600,700,800,900)
Esta nos dará como resultado el siguiente:
De la lista solo un registro concuerda con la lista en la clausula IN.
Otra forma es haciéndolo mediante una subconsulta, para lo cual nos ayudaremos con la tabla siguiente.
Tabla: valores
Lo que haremos médiate la siguiente consulta es ver cuantos datos de la tabla valores concuerdan con los datos de la tabla vtaxvendedor, la consulta es la siguiente:
SELECT * FROM vtaxvendedor WHERE tot_ventas IN (SELECT * FROM valores)
Dicha consulta logra coincidir con dos registros de la tabla y presenta los siguientes resultados.
SUBSTRING
La función del valor de cadena SUBSTRING extrae un número definido de caracteres de una cadena de caracteres identificada para crear una nueva cadena. Esa cadena de caracteres original puede ser derivada de una columna o puede ser declarada explícitamente. En ambos casos, la cadena de caracteres pasa como un parámetro de la función SUBSTRING, junto con un punto de inicio y una especificación de longitud. Por ejemplo, supongamos que se quieren arrojar solamente los primeros 5 caracteres de los valores en la columna vendedor de la tabla vtaxvendedor.
La función SUBSTRING incluye tres parámetros, nombre del campo, numero de posición de inicio y posición final. Se puede crear una instrucción SELECT similar a la siguiente:
SELECT SUBSTRING(vendedor,1,5) AS Abreviado FROM vtaxvendedor
Es resultado esta consulta es que tomara los primeros 5 caracteres de la columna vendedor y los mostrara de la siguiente forma.:
Ejercicios:
Pruebe la sentencia vista en esta clase con la base de datos de la guía pasada. Realice combinaciones de varios operadores y sentencias.
Datos ejemplo:
CREATE DATABASE prueba2
GO
USE prueba2
GO
CREATE TABLE vtaxciudad (
nom_ciudad varchar(25), tot_ventas smallmoney
)
INSERT INTO vtaxciudad VALUES ('Soyapango',3456.99)
INSERT INTO vtaxciudad VALUES ('Santa Ana',12456.23)
INSERT INTO vtaxciudad VALUES ('Ciudad Barrios',6356.99)
INSERT INTO vtaxciudad VALUES ('Apopa',956.00)
INSERT INTO vtaxciudad VALUES ('San Bartolo',13756.45)
CREATE TABLE vtaxvendedor (
vendedor varchar(25), tot_ventas smallmoney, sucursal int
)
INSERT INTO vtaxvendedor VALUES ('Efrain Burgos',345.56,1)
INSERT INTO vtaxvendedor VALUES ('Carlos Olmos',2345.00,1)
INSERT INTO vtaxvendedor VALUES ('Efrain Burgos',509.87,2)
INSERT INTO vtaxvendedor VALUES ('Karla Alas',3123.05,3)
INSERT INTO vtaxvendedor VALUES ('Carlos Olmos',323.76,3)
INSERT INTO vtaxvendedor VALUES ('Efrain Burgos',800.00,2)
INSERT INTO vtaxvendedor VALUES ('Carlos Olmos',654.43,2)
INSERT INTO vtaxvendedor VALUES ('Karla Alas',123.34,4)