Professional Documents
Culture Documents
OBJETIVOS:
Crear un modelo E-R y aplicar la relación Supertipo y Subtipo mediante el uso de PowerDesigner para así tener un
dominio mayor en el uso y creación de modelos E-R.
Analizar y diferenciar entre los supertipos y subtipos en un modelo E-R
MARCO TEÓRICO:
Usaremos un modelo entidad relación de una entidad bancaria para desarrollar el marco teórico.
SUBCONSULTAS ANIDADAS
SQL proporciona un mecanismo para anidar subconsultas. Las subconsultas son expresiones select-from-where que
están anidadas dentro de otra consulta. Una finalidad habitual de las subconsultas es llevar a cabo comprobaciones
de pertenencia a conjuntos, hacer comparaciones de conjuntos y determinar cardinalidades de conjuntos. Estos usos
se estudian en los apartados siguientes.
COMPARACIÓN DE CONJUNTOS
EJEMPLO:
“Determinar el nombre de todas las sucursales que poseen activos mayores que, al menos, una sucursal de
Arganzuela”.
EJEMPLO:
“Determinar el nombre de todas las sucursales que poseen activos mayores que, al menos, una sucursal de
Arganzuela”.
select nombre_sucursal
from sucursal
where activos > some (select activos
from sucursal
where ciudad_sucursal = ’Arganzuela’)
La subconsulta usada genera el conjunto de todos los valores de activos para todas las sucursales situadas en
Arganzuela.
La comparación > some de la cláusula where de la cláusula select más externa es cierta si el valor del atributo activos
de la tupla es mayor que, al menos, un miembro del conjunto de todos los valores de activos de las sucursales de
Arganzuela.
SQL también permite realizar las comparaciones < some, <= some, >= some, = some y <> some.
Además = some es idéntico a in, mientras que <> some no es lo mismo que not in.
En SQL, la palabra clave any es sinónimo de some. Las primeras versiones de SQL sólo admitían
any. Versiones posteriores añadieron la alternativa some para evitar la ambigüedad lingüística de la
palabra inglesa any en su idioma original.
IN Y NOT IN
EJEMPLO:
Determinar los clientes que son prestatarios del banco y que aparecen en la lista de titulares de cuentas obtenida en
la subconsulta anterior. Esto se consigue anidando la subconsulta en un select más externo. La consulta resultante
es:
EJEMPLO:
Encontrar todos los clientes que tienen concedido un préstamo en el banco pero no tienen abierta cuenta.
La consulta siguiente selecciona los nombres de los clientes que tienen concedido un préstamo en el banco y cuyos
nombres no son ni Santos ni Gómez.
SQL incluye la posibilidad de comprobar si las subconsultas tienen alguna tupla en su resultado. El constructor exists
devuelve el valor true si su argumento subconsulta no resulta vacía. Mediante el constructor exists se puede
formular la consulta
EJEMPLO:
select nombre_cliente
from prestatario
where exists (select *
from impositor
where impositor.nombre_cliente = prestatario.nombre_cliente);
select cliente,numero
from facturas as f
where exists
(select *from Detalles as d
where f.numero=d.numerofactura
and d.articulo='lapiz');
Mediante el constructor not exists se puede comprobar la inexistencia de tuplas en el resultado de las subconsultas.
Se puede utilizar el constructor not exists para simular la operación de continencia de conjuntos (es decir,
superconjuntos). Se puede escribir “la relación A contiene a la relación B” cómo “not exists (B except A)”.
EJEMPLO:
“Determinar todos los clientes que tienen una cuenta en todas las sucursales de Arganzuela”. Hay que comprobar
para cada cliente si el conjunto de todas las sucursales en las que dicho cliente tiene cuenta contiene al conjunto de
todas las sucursales de Arganzuela. Mediante el constructor except se puede formular la consulta del modo
siguiente:
No resulta deseable que todos los usuarios vean el modelo lógico completo. Las consideraciones de seguridad
pueden exigir que se ocultan ciertos datos a los usuarios. Considérese una persona que necesita saber el número de
préstamo y el nombre de la sucursal de un cliente, pero no necesita ver el importe de ese préstamo. Esa persona
debería ver una relación descrita (módulo renombramiento de atributos) en SQL mediante
Aparte de las consideraciones de seguridad, puede que se desee crear un conjunto personalizado de relaciones que
se adapte mejor a la intuición de un usuario determinado que el modelo lógico. Puede que a un usuario del
departamento de publicidad, por ejemplo, le guste ver una relación que consista en los clientes que tienen o bien
cuenta abierta o bien préstamo concedido en el banco y las sucursales
con las que trabajan. La relación que se crearía para ese empleado es la siguiente:
Las relaciones que no forman parte del modelo lógico, pero se hacen visibles a los usuarios como relaciones virtuales
se denominan vistas. Es posible definir un gran número de vistas de cualquier conjunto dado de relaciones reales.
DEFINICIÓN DE VISTAS
Las vistas en SQL se definen mediante la instrucción create view. Para definir una vista hay que darle un nombre e
indicar la consulta que la va a calcular. La forma de la instrucción create view es create view v as <expresión de
consulta> donde <expresión de consulta> es cualquier expresión legal de consulta. El nombre de la vista se
representa mediante v.
EJEMPLO
Considérese la vista consistente en las sucursales y sus clientes. Supóngase que se desea que esta vista se denomine
todos_los_clientes. Esta vista se define de la manera siguiente:
select nombre_cliente
from todos_los_clientes
where nombre_sucursal = ’Navacerrada’
DESARROLLO DE LA PRACTICA:
1. Consultar los nombres de clientes cuyos nombres comienzan con A y que tienen facturas por un total mayor
al cliente de nombre “xxx”
select distinct apellido from cliente, factura where apellido like 'a%' and
total > (select sum(total)from factura
where COD_CLIENTE =(select COD_CLIENTE from cliente where APELLIDO = '001b'));
2. Listar los números de facturas con totales mayores al promedio del total de todos los clientes.
select COD_FACTURA from factura where total > (select AVG(total)from factura);
3. Listar los nombres de clientes que han emitido facturas con un total mayor al promedio del total de todas
las facturas.
select APELLIDO from cliente,factura where total>(select AVG(total) from factura) and
cliente.cod_cliente=factura.cod_cliente;
4. Listar nombres de clientes que no hayan emitido ninguna factura entre dos fechas dadas.
select apellido from cliente where cod_cliente not in (select cod_cliente from factura where fecha between '2017-
11-07' and '2017-11-20' )
5. Listar nombres de clientes que no hayan emitido ninguna factura entre dos fechas dadas.
SELECT NOMBRE_PROD FROM PRODUCTO WHERE COD_PRODUCTO not in ( SELECT COD_PRODUCTO FROM
producto)
6. Listar los nombres de clientes que hayan emitido solo una factura
CONCLUSIONES Y RECOMENDACIONES:
Al usar más de una tabla en FROM se debe tener en cuenta que se produce un producto cartesiano entre las
tablas implicadas.
Al usar el constructor exists para comprobar la existencia de tuplas en una subconsulta este retorna un valor
booleano dependiendo de lo encontrado.
Se aconseja usar ; al final de cada instrucción SQL para evitar errores de lectura en momento de ejecución.
Las instrucciones en SQL tienen su semejante en Álgebra relacional, debido a que SQL es basado en este tipo
de álgebra.
La vista son una forma segura de crear tablas que no existen solo para que se pueda acceder a ellas sin
necesidad de mostrar el resto de información.
Se puede evitar lo anterior añadiendo go al final de la instrucción que cree la vista y luego escribimos las
instrucciones sql en las que usaremos esa vista.
En SQL server una vista debe estar sola en un script y para consultar de esta vista es necesario definir la
instrucción sql en otro script luego de haber creado la vista.
BIBLIOGRAFÍA:
[1] Anonimo. (Sin Registro). Bases de datos relacionales. 12/11/2017, de IBM® IBM Knowledge Center Sitio web:
https://www.ibm.com/support/knowledgecenter/es/SSEPGG_8.2.0/com.ibm.db2.udb.doc/admin/c0004099.htm
[2] Maria Hallo. (SinRegistro). CONCEPTOS DE SQL. 12/11/2017, de Escuela Politecnica Nacional Sitio web:
https://educacionvirtual.epn.edu.ec/pluginfile.php/221597/mod_resource/content/1/MANUAL_DE_SQLREV.pdf
[3] NA. (2016). ¿Qué es un proveedor?. 03/05/2017, de Reviso Sitio web: https://www.reviso.com/es/que-es-un-
proveedor
[4] Julián Pérez Porto y Ana Gardey. (2011). Orden compra. 03/05/2017, de Definicio.de Sitio web:
http://definicion.de/orden-de-compra/