Documentos de Académico
Documentos de Profesional
Documentos de Cultura
sql
//* ----------------------------------------------------------------------------------
//* Universidad Católica Nuestra Señora de la Asunción
//* Facultad de Ciencias y Tecnología
//* Departamento de Análisis de Sistemas
//* Cátedra de Informática 4
//* Prof: Ing. César Albospino
//* Guía para Clases - Parte 5
//* ----------------------------------------------------------------------------------
//*
//* INTRODUCCIÓN AL LENGUAJE SQL
//*
//* Recuperación de información (SELECT)
//*
//* Estructura Básica del SELECT
//*
/*
Select <lista de atributos>
from <tablas>
where <condiciones>
group by <lista de atributos>
having <condiciones>
order by <lista de atributos>
\
*/
//*
//*--------------------------------------------------------------------------------*
//* Ejercicio 15: Reunión Tablas (JOIN)
//
//* 15.1.a:
// Producto cartesiano de las tablas de "productos" y "depositos", tomando
// todas las columnas de ambas. La tabla "depositos" tiene 3 filas y
// "productos" tiene 9. El CR tiene 3 x 9 = 27 filas.
//
select *
from productos, depositos\
//
//* 15.1.b:
// Idem anterior, pero indicando las columnas a ser mostradas y ordenandolas
// por deposito y producto
//
select productos.producto,
productos.nombre,
depositos.deposito,
depositos.nombre
from productos, depositos
order by productos.producto, depositos.deposito\
//
//* 15.1.c:
// Idem anterior, pero utilizando un alias para cada tabla
//
select p.producto,
p.nombre,
d.deposito,
d.nombre
from productos p, depositos d
order by p.producto, d.deposito\
//
//* 15.1.d:
// Idem anterior, pero utilizando "CROSS JOIN"
// (genera un CR igual al caso 15.3 - equivale a la coma ",")
//
select p.producto,
p.nombre,
d.deposito,
d.nombre
from productos p cross join depositos d
order by p.producto, d.deposito\
//
// Obs: el producto cartesiano de dos tablas debe ser utilizado con mucho cuidado,
// pues puede generar una cantidad enorme de filas, lo cual podría "enlentecer"
// significativamente el funcionamiento general de un computador. Por ejemplo,
// si realizamos el join de dos tablas "pequeñas" de 10.000 y 1.000 filas cada una,
// el CR tendrá: 10.000 x 1.000 = 10.000.000 (diez millones de filas).
// La regla es: nunca usar un producto cartesiano, salvo alguna situación excepcional.
//
//
//* 15.1.e: reunión de tablas con un criterio (where) para filtrar filas.
// Solo muestra todos los productos que pertenecen al deposito uno (1).
//
select p.producto,
p.nombre,
d.deposito,
d.nombre
from productos p, depositos d
where d.deposito = 1
order by p.producto, d.deposito\
//
//* 15.1.f: reunión de tablas con un criterio (where) para filtrar filas.
// Muestra todos los productos vendidos, incluyendo el nombre del producto,
// para aquellas ventas donde se cumpla la condición: <p.producto = v.producto>.
// Notese que "ventas" tiene 10 filas y "productos" tiene 9 filas.
// El CR tiene 10 filas. Porque?
//
Select p.producto, p.nombre, v.venta, v.fecha, v.cantidad, v.total
from productos p, ventas v
where p.producto = v.producto
order by p.producto, v.venta\
//
//
//* 15.2: uso del JOIN
//
//* 15.2.a:
// Equivale al "15.1.f"
//
Select p.producto, p.nombre, v.venta, v.fecha, v.cantidad, v.total
from productos p join ventas v on p.producto = v.producto
order by p.producto, v.venta\
//
//* 15.2.b: uso del INNER JOIN
// Equivale al 15.2.a
//
Select p.producto, p.nombre, v.venta, v.fecha, v.cantidad, v.total
from productos p inner join ventas v on p.producto = v.producto
order by p.producto, v.venta\
//* 15.2.c: uso del KEY JOIN (reunión por clave externa)
// Equivale al 15.2.a
// Observe que ya no se escribe la condición de emparejamiento de filas
// pues, cuando existe una relación de integridad referencia (FK=foreign key)
// entre las tablas, el "key join" la reconoce automáticamente.
//
// 1ro: agreguemos una relación de integridad referencial entre "ventas" y "productos"
// haciendo:
//
alter table ventas
add foreign key producto references productos(producto)\
//
// 2do: ejecutemos la siguiente instrucción (con KEY JOIN) y obtendremos
// el mismo CR que en el caso 15.2.a
//
Select p.producto, p.nombre, v.venta, v.fecha, v.cantidad, v.total
from productos p key join ventas v
order by p.producto, v.venta\
//
// Nota: cuando existe un FK entre las tablas, también podemos
// utilizar INNER JOIN (genera un CR igual)
//
Select p.producto, p.nombre, v.venta, v.fecha, v.cantidad, v.total
from productos p inner join ventas v
order by p.producto, v.venta\
//
// 3ro: pero si eliminamos la relación de integridad referencial entre
// las tablas, el KEY JOIN produce un error!! (idem para el INNER JOIN).
//
alter table ventas
delete foreign key producto\
//*--------------------------------------------------------------------------------*
//* Ejercicio 16: UNION (unión de Tablas)
// Concatena dos (o más) conjuntos resultado (CR), generados por "select's"
// acoplados mediante la cláusula UNION o UNION ALL.
// Para que sea posible lo anterior, debe cumplirse:
// a) La cantidad de columnas de los CR debe ser igual.
// b) Los tipos de datos de cada columna de los CR deben ser iguales
// y estar dispuestos en la misma secuencia.
// Nota:los "select" que originan cada CR no pueden tener ORDER BY.
// Se puede incluir un ORDER BY, pero el actua sobre el CR resultante
// de la unión de todos los demás CR. Se lo debe ubicar al final.
//* 16.1: UNION (muestra todas las filas distintas de ambos CR)
//* 16.3: UNION ALL (idem anterior, pero mostrando tambien la filas duplicadas.