You are on page 1of 8

5- Uso de sentencias avanzadas

Objetivos:

Elaborar sentencias de manejo de datos.


Recursos:

Microsoft SQL Server Management Studio
Guas prcticas.

Introduccin:

Despus de trabajar con las sentencias de agregar, modificar, editar y visualizar datos,
debemos de ver algunas sentencias y modificadores para refinar y mejorar las bsquedas
de nuestras bases de datos.

MAX y MIN

Las funciones MAX y MIN son muy similares as que las revisaremos juntas revisarlas juntas.
La funcin MAX arroja el valor ms alto para la columna especificada, y la funcin MIN
arroja el valor ms 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 mxima y cual es la mnima o mejor cuales es la mxima
y mnima.

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 instruccin, los resultados de la consulta incluirn 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. Sera mejor si los resultados de la
consulta tambin incluyeran el nombre de la ciudad. Sin embargo, SQL no soporta una
instruccin SELECT como la siguiente:

SELECT nom_ciudad,MIN(tot_ventas) AS 'VENTA MENOR' FROM vtaxciudad

Esta consulta generara un error, pues no soporta colocar una columna adicional sin un
modificador.

COUNT

Como su nombre sugiere, la funcin COUNT cuenta el nmero de filas en una tabla o el
nmero de valores en una columna, segn se especifique en la instruccin SELECT. Cuando
se utiliza la funcin COUNT, se debe especificar un nombre de columna para contar el
nmero 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:

Tabla: vtaxvendedor

Elaboraremos la siguiente consulta:

SELECT COUNT(tot_ventas)AS 'Total Registros' FROM vtaxvendedor

La cual nos dar como resultado:



Tambin puede utilizar la sentencia WHERE para contar los registros de esa condicin, 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 clusula en la instruccin SELECT es la clusula GROUP BY. La clusula GROUP
BY tiene una funcin muy diferente de la clusula WHERE. Como su nombre lo indica, la
clusula GROUP BY se utiliza para agrupar tipos de informacin con el fin de resumir datos
relacionados. La clusula GROUP BY se puede incluir en la instruccin SELECT aun si la
clusula 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

La cual nos dar el resultado siguiente:



Tambin 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 ms alto y ms bajo
de una columna, la funcin SUM agrupa valores de columna. Esto es particularmente til
cuando se necesita encontrar los totales para datos agrupados.

Para entender mejor la funcin 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 funcin SUM, al igual que cualquier otra funcin set, trata a la tabla
entera como un grupo nico si ningn dato ha sido explcitamente agrupado, si quisiera
agrupar a los vendedores y obtener el total de ventas por cada uno de ellos, realizaramos
la siguiente consulta:

SELECT vendedor AS Vendedor,SUM(tot_ventas) AS 'Total Vendido' FROM vtaxvendedor GROUP BY
vendedor

El resultado que se obtiene es el siguiente:



Si lo necesita tambin podr incorporar WHERE a su consulta.

AVG

Como se puede imaginar, la funcin AVG simplemente promedia los valores en una
columna especificada. Al igual que la funcin SUM, es ms efectiva cuando se utiliza junto
con una clusula GROUP BY, a pesar de que puede ser utilizada sin la clusula, 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 informacin puede ser bastante til, sera de mucha ms ayuda si se
estableciera una instruccin que agrupe los datos:

SELECT vendedor as Vendedor,AVG(tot_ventas) AS 'Total Vendido' FROM vtaxvendedor GROUP BY
vendedor

Si se ejecuta esta instruccin, se obtendrn los siguientes resultados de la consulta:



Esto nos dara como resultado la venta promedio de cada vendedor.

BETWEEN

Hablando estrictamente, el predicado BETWEEN no es un predicado de comparacin. 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 conjuncin con la palabra clave AND para identificar un
rango de valores que pueden ser incluidos como una condicin de bsqueda en la clusula
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 dara el siguiente resultado:



Nos mostrara las ventas por vendedor que estn entre 500 y 2000 dolares.

IN

El predicado IN permite determinar si los valores en la columna especificada de una tabla
estn 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 evala como
verdadero y la fila es arrojada en los resultados de la consulta.

La mejor forma de ilustrar ambos de estos mtodos es por medio de ejemplos. Usando
siempre la tabla de vtaxvendedor evaluaremos la primera opcin 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 hacindolo mediante una subconsulta, para lo cual nos ayudaremos con la
tabla siguiente.
Tabla: valores


Lo que haremos mdiate 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 funcin del valor de cadena SUBSTRING extrae un nmero 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 explcitamente. En
ambos casos, la cadena de caracteres pasa como un parmetro de la funcin SUBSTRING,
junto con un punto de inicio y una especificacin 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 funcin SUBSTRING incluye tres parmetros, nombre del campo, numero de posicin de
inicio y posicin final. Se puede crear una instruccin 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 gua 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)
INSERT INTO vtaxvendedor VALUES ('Carlos Olmos',450.34,5)

You might also like