Taller SQL
Taller SQL
Taller SQL
Sea el esquema:
CLIENTE(id_cliente, nombre, direccion, telefono, ciudad)
PRODUCTO(id_producto, descripcion, precio)
VENTA(id_venta, cantidad, id_producto, id_cliente)
CLIENTE
#id_cliente generador VENTA contenido PRODUCTO
*nombre de #id_venta en #id_producto
*direccion generada *cantidad de *descripcion
*telefono a *precio
*ciudad
Ejercicios
Formular en álgebra relacional, cálculo relacional y SQL una consulta que muestre:
1. Creación de tablas
Nota: Estas instrucciones fueron probadas en MySQL.
Es posible que en otros SGBD haya que hacerles cambios menores.
2. Inserción de Datos
1. Πid_cliente(σciudad=’Cali’(CLIENTE))
2. Πid_producto, descripcion(σprecio<1500(PRODUCTO))
3. Πid_cliente,nombre,cantidad,descripcion(CLIENTE ⋈ σcantidad>10(VENTA) ⋈ PRODUCTO)
4. Πid_cliente,nombre(CLIENTE ⋈ (Πid_cliente(CLIENTE) – Πid_cliente(VENTA)))
5. Πid_cliente,nombre (CLIENTE ⋈ (Πid_cliente,id_producto(VENTA) ÷ Πid_producto(Producto)))
6. Πid_cliente, nombre,total(CLIENTE ⋈ (id_clienteĢSUM(cantidad) AS total(VENTA)))
7. Πid_producto(PRODUCTO) – Πid_producto(σciudad=’Tunja’(CLIENTE) ⋈ VENTA)
8. Πid_producto (σciudad=’Medellin’(CLIENTE) ⋈ VENTA) ∩ Πid_producto(σciudad=’Bogota’(CLIENTE) ⋈ VENTA)
9. Πciudad,id_producto(CLIENTE ⋈ VENTA) ÷ Πid_producto(PRODUCTO)
1. {t | ∃c ∈ CLIENTE(t[id_cliente]=c[id_cliente] ∧ c[ciudad]=’Cali’)}
2. {t | ∃p ∈ PRODUCTO(t[id_producto]=p[id_producto] ∧ t[descripcion]=p[descripcion] ∧ p[precio]<1500 )}
3. {t | ∃c ∈ CLIENTE(t[id_cliente]=c[id_cliente] ∧ t[nombre]=c[nombre] ∧
∃v ∈ VENTA(t[cantidad]=v[cantidad] ∧ v[cantidad]>10 ∧ v[id_cliente]=c[id_cliente] ∧
∃p ∈ PRODUCTO(t[descripcion]=p[descripcion] ∧ p[id_producto]=v[id_producto])
)
)
}
4. {t | ∃c ∈ CLIENTE(t[id_cliente]=c[id_cliente] ∧t[nombre]=c[nombre] ∧
¬∃v ∈ VENTA(v[id_cliente]=c[id_cliente])
)
}
5. {t | ∃c ∈ CLIENTE(t[id_cliente]=c[id_cliente] ∧ t[nombre]=c[nombre] ∧
∀p ∈ PRODUCTO( ∃v ∈ VENTA(v[id_producto]=p[id_producto] ∧ v[id_cliente]=c[id_cliente]) )
)
}
7. {t | ∃p ∈ PRODUCTO(t[id_producto]=p[id_producto] ∧
¬∃v ∈ VENTA(p[id_producto]=v[id_producto] ∧
∃c ∈ CLIENTE(c[id_cliente]=v[id_cliente] ∧ c[ciudad]=’Tunja’)
)
BASES DE DATOS I
)
}
8. {t | ∃p ∈ PRODUCTO(t[id_producto]=p[id_producto] ∧
Comentario [W1]: Note que la
∃v1 ∈ VENTA( ∃c1 ∈ CLIENTE(c1[id_cliente]=v1[id_cliente] ∧ c1[ciudad]=’Medellin’ ∧ v1[id_producto]=p[id_producto] )) ∧ comparación
v1[id_producto]=p[id_producto]
∃v2 ∈ VENTA( ∃c2 ∈ CLIENTE(c2[id_cliente]=v2[id_cliente] ∧ c2[ciudad]=’Bogota’ ∧ v2[id_producto]=p[id_producto] )) También se puede colocar acá.
9. {t | ∃c ∈ CLIENTE(t[ciudad] = c[ciudad] ∧
Comentario [p3]: Note que la
∀p ∈ PRODUCTO (∃v ∈ VENTA( comparación
v[id_producto]=p[id_producto]
)
)
)
}
5. Solución (SQL)
Nota: Las consultas fueron probadas en MySQL. Es posible que en otros SGBD la formulación de algunas de estas consultas
se pueda simplificar un poco o que puedan requerir cambios menores para su correcto funcionamiento.
1. SELECT id_cliente
FROM cliente
WHERE ciudad = 'Cali';
2. SELECT id_producto,descripcion
FROM producto
WHERE precio < 1500;
7. SELECT id_producto
FROM producto
WHERE id_producto NOT IN (SELECT id_producto
FROM cliente NATURAL JOIN venta
BASES DE DATOS I
9. SELECT ciudad
FROM cliente NATURAL JOIN venta
GROUP BY ciudad
HAVING COUNT(DISTINCT id_producto) = (SELECT COUNT(*) FROM producto);
6. Resultados
1.
2.
3.
4.
5.
6.
BASES DE DATOS I
7.
8.
9.