clase auxiliar 2 - U

Anuncio
Universidad de Chile.
Facultad de Cs. Fı́sicas y Matemáticas.
Departamento de Ingenierı́a Industrial
Curso: Aplicaciones de Bases de Datos para la Empresa y Minerı́a de Datos.
Profesor: Richard Weber
Profesor Auxiliar: Gastón L’Huillier
Semestre: Otoño 2008
AUXILIAR 2
Consultas SQL
1.
Structured Query Language (SQL)
La sintaxis básica de consulta es la siguiente:
SELECT [DISTINCT | ALL]
{* | [column_expression [AS new_name]] [,...] }
FROM table_name [alias] [, ...]
[WHERE condition]
[GROUP BY column_list]
[ HAVING condition]
[ORDER BY column_list]
Donde,
SELECT: Especifica las columnas (atributos) que se proyectarán en la consulta.
FROM: Especifica las tablas que se usaran para la consulta.
WHERE: Establece los filtros básicos sobre las tuplas.
GROUP BY: Permite agrupar los datos sobre una columna. Esta columna debe estar
incluı́da en el “SELECT”.
HAVING: Permite generar filtros sobre los grupos de datos. (similar al WHERE)
ORDER BY: Especifica el orden de los datos.
1
1.1.
Otros comandos
Además de los comandos presentados anteriormente, para el caso de MySQL se presenta un
listado de comandos utilizados de manera frecuente.
RLIKE: Permite comparar expresiones regulares entre dos variables.
SUM: Función de agregación que permite calcular la suma de un conjunto de elementos
numéricos.
AVG: Función de agregación que permite calcular la promedio de un conjunto de elementos
numéricos.
COUNT: Función de agregación que permite contar un conjunto de elementos numéricos.
CONCAT(A,B) : Función que concatena A con B, retornando la variable de tipo varchar AB.
IF(condicion,then,else): Función lógica que permite evaluar una condición lógica, entregando como resultado then en caso de ser verdadera, o else en caso de ser falsa.
YEAR(date): Función que retorna el año asociado a una determinada variable de tipo
date.
MONTH(date): Función que retorna el mes asociado a una determinada variable de tipo
date.
numero 1 <> numero 2 : Operador de desigualdad entre el numero 1 y el numero
2.
2.
Problemas
Las siguiente consultas fueron realizadas en base a la base de datos bd ctp1 in60e.sql
disponible en material docente.
1. Una lista con las empresas, el nombre de contacto, el cargo y el teléfono de
aquellos clientes cuyos contactos sean propietarios o gerentes.
SELECT
clientes.NombreCompania,
clientes.NombreContacto,
2
clientes.CargoContacto,
clientes.Telefono
FROM clientes
WHERE clientes.CargoContacto RLIKE ’propietario’
OR clientes.CargoContacto RLIKE ’gerente’
2. Una lista con los destinatarios y el monto de sus pedidos para el año 1996.
SELECT pedidos.Destinatario AS Destinatario,
SUM(detalles_de_pedidos.PrecioUnidad*
detalles_de_pedidos.Cantidad*
(1-detalles_de_pedidos.Descuento)) AS SUMA
FROM pedidos, detalles_de_pedidos
WHERE detalles_de_pedidos.IdPedido = pedidos.IdPedido
AND YEAR(pedidos.FechaPedido) = 1996
GROUP BY pedidos.Destinatario;
3. El promedio sobre todos los pedidos de los destinatarios para el año 1996.
SELECT CONCAT(’a~
no’,ventas.year) as A~
no,
AVG(ventas.SUMA) as Media
FROM (SELECT pedidos.Destinatario AS Destinatario,
YEAR(pedidos.FechaPedido) as year,
SUM(detalles_de_pedidos.PrecioUnidad*
detalles_de_pedidos.Cantidad*
(1-detalles_de_pedidos.Descuento)) AS SUMA
FROM pedidos, detalles_de_pedidos
WHERE detalles_de_pedidos.IdPedido = pedidos.IdPedido
AND YEAR(pedidos.FechaPedido) = 1996
GROUP BY pedidos.Destinatario) as ventas
GROUP BY ventas.year;
4. Una lista con los nombres de los destinatarios, su dirección y ciudad, que
posean en cada semestre del año 1997 un monto del pedido inferior al pedido en el
año 1996.
SELECT pedidos.Destinatario AS Destinatario,
pedidos.DireccionDestinatario AS Direccion,
pedidos.CiudadDestinatario AS Ciudad,
3
tabla_1996.SUMA_96 AS Monto_96,
tabla_97_01.SUMA_97_01 AS Monto_97_01,
tabla_97_02.SUMA_97_02 AS Monto97_02
FROM pedidos,
(SELECT pedidos.Destinatario AS Destinatario,
SUM(detalles_de_pedidos.PrecioUnidad*
detalles_de_pedidos.Cantidad*
(1-detalles_de_pedidos.Descuento)) AS SUMA_96
FROM pedidos, detalles_de_pedidos
WHERE detalles_de_pedidos.IdPedido = pedidos.IdPedido
AND YEAR(pedidos.FechaPedido) = 1996
GROUP BY pedidos.Destinatario) AS tabla_1996,
(SELECT pedidos.Destinatario AS Destinatario,
SUM(detalles_de_pedidos.PrecioUnidad*
detalles_de_pedidos.Cantidad*
(1-detalles_de_pedidos.Descuento)) AS SUMA_97_01
FROM pedidos, detalles_de_pedidos
WHERE detalles_de_pedidos.IdPedido = pedidos.IdPedido
AND YEAR(pedidos.FechaPedido) = 1997
AND MONTH(pedidos.FechaPedido) <=6
GROUP BY pedidos.Destinatario) AS tabla_97_01,
(SELECT pedidos.Destinatario AS Destinatario,
SUM(detalles_de_pedidos.PrecioUnidad*
detalles_de_pedidos.Cantidad*
(1-detalles_de_pedidos.Descuento)) AS SUMA_97_02
FROM pedidos, detalles_de_pedidos
WHERE detalles_de_pedidos.IdPedido = pedidos.IdPedido
AND YEAR(pedidos.FechaPedido) = 1997
AND MONTH(pedidos.FechaPedido) > 6
GROUP BY pedidos.Destinatario) AS tabla_97_02
WHERE pedidos.Destinatario
LIKE tabla_1996.Destinatario
AND tabla_1996.Destinatario
LIKE tabla_97_01.Destinatario
AND tabla_97_01.Destinatario
LIKE tabla_97_02.Destinatario
AND tabla_1996.SUMA_96 > tabla_97_01.SUMA_97_01
AND tabla_1996.SUMA_96 > tabla_97_02.SUMA_97_02
GROUP BY pedidos.Destinatario,
pedidos.DireccionDestinatario,
pedidos.CiudadDestinatario;
4
Descargar