Está en la página 1de 8

Conferencia # 3:

CONSULTAS SIMPLES (II)

INTRODUCCIÓN

Recordar los aspectos más importantes de la clase anterior:


- Consultas sencillas: donde participa una sola tabla.
- Uso de la sentencia SELECT y sus cláusulas SELECT, FROM, WHERE.

DESARROLLO

Ordenación de los resultados de una consulta

Al igual que las filas de una tabla en la BD, las filas de los resultados de una
consulta no están dispuestos en ningún orden particular. Se puede pedir a SQL que
ordene los resultados de una consulta incluyendo la cláusula ORDER BY en la
sentencia SELECT.
La cláusula ORDER BY posee la siguiente sintaxis:

ORDER BY nombre de columna

número de columna ASC

DESC
,
Observar que en el ordenamiento solamente se pueden especificar las columnas de
la cláusula SELECT.

Mostrar las ventas de cada oficina, ordenadas en orden alfabético por ciudad.

SELECT ciudad, ventas


FROM oficinas
ORDER BY ciudad

Como se observa en la sintaxis en un mismo ORDER BY pueden haber varios


criterios de ordenamiento.

Mostrar las ventas de cada oficina, ordenadas en orden alfabético por región y
dentro de cada región por ciudad.

SELECT ciudad, region, ventas


FROM oficinas
ORDER BY region, ciudad
Utilizando la cláusula ORDER BY se puede solicitar la ordenación en secuencia
ascendente o descendente, y se puede ordenar con respecto a cualquier elemento en
la lista de selección de la consulta.

Por omisión, SQL ordena los datos en secuencia ascendente. Para solicitar en
secuencia descendente, se incluye la palabra clave DESC en la especificación de
ordenación, como en el siguiente ejemplo:

Listar las oficinas, clasificadas en orden descendente de ventas, de modo que las
oficinas con mayores ventas aparezcan en primer lugar.

SELECT ciudad, region, ventas


FROM oficinas
ORDER BY ventas DESC

Se puede utilizar la palabra clave ASC para especificar el orden ascendente, pero
puesto que este es el orden por omisión, la palabra clave se suele omitir.

Si la columna de resultados de la consulta utilizada para ordenar es una columna


calculada, entonces se utiliza en lugar de un nombre el número que ocupa dentro de
la cláusula SELECT.

Ejemplo:

Listar las oficinas, clasificadas en orden descendente de rendimiento de ventas, el


rendimiento de ventas es las ventas menos el objetivo.

SELECT ciudad, region, (ventas-objetivo)


FROM oficinas
ORDER BY 3 DESC

Observar que los resultados estarán ordenados por la tercera columna, que es una
columna calculada.

Resumen parcial del modo de realizar una consulta:

1. Comenzar con la tabla designada en la cláusula FROM.


2. Si hay cláusula WHERE, aplicar su condición de búsqueda a cada fila de la
tabla, reteniendo aquellas filas para las cuales la condición de búsqueda es
TRUE, y descartando aquellas para las cuales es FALSE o NULL.
3. Para cada fila retenida, calcular el valor de cada elemento en la lista de selección
para producir una única fila de resultados.
4. Si se especifica SELECT DISTINCT, eliminar las filas duplicadas de los
resultados que se hubieran producido.
5. Si hay una cláusula ORDER BY, ordenar los resultados de la consulta según se
especifiquen.
Combinación de los resultados de una consulta

Ocasionalmente, es conveniente combinar los resultados de dos o más consultas en


una única tabla de resultados totales. SQL permite esta capacidad gracias a la
característica UNION.
UNION es un operador que toma el resultado de dos consultas y los une en un único
resultado (actúa de forma similar a la unión entre conjuntos).

Ejemplo:

Listar todos los productos en donde el precio del producto exceda de 2000 ó donde
más de 30000 del producto hayan sido incluidos en un solo pedido.

Dividiremos esta consulta en dos partes:

Listar todo los productos cuyo precio exceda de 2000.

SELECT id_fab, id_producto


FROM productos
WHERE precio > 2000

Listar los productos para los cuales más de 30000 del producto hayan sido
incluidos en un solo pedido.

SELECT DISTINCT fab, producto


FROM pedido
WHERE importe > 30000

Como queremos los productos que satisfacen estos dos requerimientos, debemos
tomar los resultados de las dos consultas:

SELECT id_fab, id_producto


FROM productos
WHERE precio > 2000
UNION
SELECT DISTINCT fab, producto
FROM pedido
WHERE importe > 30000

Hay varias restricciones sobre las tablas que pueden combinarse con una operación
UNION:
a) Ambas tablas deben contener el mismo número de columnas.
b) El tipo de datos de cada columna en la primera tabla debe ser el mismo que el
tipo de datos de la columna correspondiente en la segunda tabla.
c) Ninguna de las dos tablas puede estar ordenada con la cláusula ORDER BY. Sin
embargo, los resultados combinados pueden ser ordenados, según se describe
después.
Ya que la operación UNION combina filas de dos conjuntos de resultados, pudiera
suceder que los resultados tuvieran filas iguales. (Un caso es el ejemplo anterior, ver
los resultados). Por omisión, la operación UNION elimina las filas duplicadas como
parte de su procesamiento. Si se desea obtener las filas duplicadas en una operación
UNION, se puede especificar la palabra clave ALL inmediatamente de la palabra
UNION.

La cláusula ORDER BY no puede ser especificada en ninguna de las dos sentencias


SELECT que combina una UNION. Sin embargo el conjunto combinado de
resultados de la consulta producidos por la operación UNION puede ser ordenado
especificando una cláusula ORDER BY después de la segunda sentencia SELECT.
Ya que las columnas producidas por la operación UNION no tienen nombres, la
cláusula ORDER BY debe especificar las columnas por número.

Listar todos los productos en donde el precio del producto exceda de 2000 ó donde
más de 30000 del producto hayan sido incluidos en un solo pedido, clasificados por
fabricante y el identificador del producto..

SELECT id_fab, id_producto


FROM productos
WHERE precio > 2000
UNION
SELECT DISTINCT fab, producto
FROM pedido
WHERE importe > 30000
ORDER BY 1,2

La operación UNION puede ser utilizada repetidamente para combinar tres o más
conjuntos de resultados, tal como se muestra en la figura siguiente:
Tabla A
Bill Resultados
Tabla B
Mary Bill
Bill
George Mary
Sue
Fred George
Julia UNION
Fred
Harry
Bill Sue
Tabla C UNION Sue Julia
Mary Julia Harry
George Harry
Bill Mary
Harry George
La consulta se escribiría de la siguiente forma:

SELECT *
FROM a
UNION ( SELECT *
FROM b
UNION
SELECT *
FROM c )

Los paréntesis indican el orden en que deben ser realizadas las uniones. En este caso
como todas las uniones eliminan duplicados no importa el orden. Hay que tener
mucho cuidado con el orden cuando una de las operaciones UNION tiene el ALL.

Funciones de Columna

SQL permite resumir datos de la BD mediante un conjunto de funciones de


columnas. Una función de columna acepta una columna entera de datos como
argumento y produce un único dato que resume la columna. Por ejemplo, la función
AVG( ) acepta una columnas de datos y calcula su promedio.

¿Cuál es la cuota promedio y las ventas promedio de los vendedores?

SELECT AVG(cuota), AVG(ventas)


FROM vendedores

SQL ofrece seis funciones de columna diferentes, tal como se muestra en el


siguiente diagrama sintáctico. Las funciones de columna ofrecen estos valores:
- SUM ( ) calcula la suma total de una columna.
- AVG( ) calcula el valor promedio de una columna.
- MAX( ) calcula el valor más grande de la columna.
- MIN( ) calcula el valor más pequeño de la columna.
- COUNT( ) cuenta el número de valores de una columna.
- COUNT(*) cuenta las filas de una consulta.
SUM ( expresión )
DISTINCT nombre columna

AVG ( expresión )
DISTINCT nombre columna

MIN ( expresión )

MAX ( expresión )

COUNT ( nombre de columna )


DISTINCT
COUNT ( * )

El argumento de una función columna, como se pude apreciar en el diagrama


sintáctico puede ser una expresión SQL.

¿Cuál es el promedio del por ciento de cumplimiento de los vendedores?

SELECT AVG(100*(ventas/cuota))
FROM vendedores

Para procesar esta consulta SQL construye una columna temporal que contiene el
valor de la expresión por cada fila de la tabla, luego calcula el promedio de la
columna temporal.

Ejemplos:

¿Cuáles son las cuotas y ventas totales para todos los vendedores?

SELECT SUM(cuota), SUM(ventas)


FROM vendedores

¿Cuál es el precio promedio de los productos del fabricante ACI?

SELECT AVG(precio)
FROM productos
WHERE id_fab=´ACI´
¿Cuáles son las cuotas mínima y máxima asignadas a los vendedores?

SELECT MIN(cuota), MAX(cuota)


FROM vendedores

¿Cuántos vendedores superan su cuota?

SELECT COUNT(nombre)
FROM vendedores
WHERE ventas>cuotas

SELECT COUNT(*)
FROM vendedores
WHERE ventas>cuotas

Con la segunda consulta se cuentan filas en lugar de nombres como en la primera, lo


que parece más natural.

Valores nulos y funciones de columna

En las funciones de columna SUM( ), AVG( ), MIN( ), MAX( ) y COUNT( ) los


valores nulos son ignorados.

La siguiente consulta:

SELECT COUNT(*), COUNT(ventas), COUNT(cuota)


FROM vendedores

arrojará los valores 10, 10 y 9, porque hay un vendedor con cuota nula.

Ignorar los nulos tiene poca importancia en las funciones MAX y MIN, pero puede
producir algunas sutilezas en las funciones SUM y AVG. Por ejemplo la consulta:

SELECT SUM(ventas)-SUM(cuota), SUM(ventas-cuota)


FROM vendedores

Parece que debe dar dos valores similares, sin embargo en nuestro ejemplo produce
resultados diferentes pues hay un vendedor que tiene un valor nulo en su cuota, por
lo tanto es ignorado en SUM(cuota) y en SUM(ventas-cuota), no así el valor
correspondiente de sus ventas que no es nulo.

Eliminación de filas duplicadas

Al igual que se eliminaban las filas duplicadas en una consulta se pueden eliminar
los valores duplicados de una columna antes de aplicarle una función de columna.
Para ello se utiliza la palabra clave DISTINCT en el argumento de la función como
se indica en el diagrama sintáctico.
¿Cuántos títulos diferentes tienen los vendedores?

SELECT COUNT(DISTINCT titulo)


FROM vendedores

CONCLUSIONES

Insisitir en los aspectos estudiados en la clase:


- ordenamiento de los resultados,
- combinación de los resultados de dos o más consultas,
- consultas sumarias a partir de las funciones de columna.

Bibliografía

Del texto. Capítulo 6 página 112 - 122.


Capítulo 8 página 163 – 174.

Ejercicios:

1. Listar los productos ordenados por su precio.


2. Listar los productos ordenador por su fabricante y dentro de estos por su código.
3. Listar los vendedores en orden decreciente de su edad, dentro de la edad ordenarlos
por el nombre.
4. Listar los productos ordenados por el valor de su inventario.
5. Listar los vendedores que atienden a algún cliente o que han tomado algún pedido.
6. ¿Cuál es el total de los pedidos aceptados por el vendedor 107?
7. ¿Cuál es la fecha de pedido más antigua en la base de datos?
8. ¿Cuál es el mejor promedio de ventas entre todos los vendedores?
9. ¿Cuántos clientes hay?
10. ¿Cuántos pedidos de más de 25000 hay en los registros?
11. ¿Cuántas oficinas de ventas tienen vendedores que superan sus cuotas?
12. ¿Cuál es el promedio de los objetivos de las oficinas del Este?
13. ¿Cuál es el límite de crédito más pequeño entre los clientes?
14. ¿Cuál es el total de ventas de los vendedores que son Dir Ventas?
15. ¿Cuántos vendedores han tomado algún pedido?

También podría gustarte