Download - Subconsultas y Vistas
-
8/18/2019 Subconsultas y Vistas
1/37
Sistemas de Bases de Datos IISubconsultas y Vistas
Docente:T/RT Gonzalo Martínez
CETP – EMT Informática
-
8/18/2019 Subconsultas y Vistas
2/37
Introducción
• Esta diapositiva tratara que son las subconsultasen SQL, y en que caso utilizarlas.
• Tambien tratara que son las Vistas.
-
8/18/2019 Subconsultas y Vistas
3/37
Subconsulta
• Una subconsulta es una sentencia SELECTdentro de otra sentencia SELECT.
• El SELECT interno se usa para obtener datos,que seran usados para compararse en el selectexterno.
• Tambien, las subconsultas, permiten haceroperaciones equivalentes al JOIN
-
8/18/2019 Subconsultas y Vistas
4/37
Subconsulta
• Tenemos 4 tipos de subconsultas:
! Subconsultas Monoregistro! Subconsultas Multiregistro
! Subconsultas desde el FROM
! Subconsultas desde el SELECT
-
8/18/2019 Subconsultas y Vistas
5/37
Subconsultas Monoregistro
• Son consultas que se usan con la clausula WHERE de la consulta principal.
• Devuelven un unico valor, y se usan con losoperadores de comparacion (=,,=,!=)
-
8/18/2019 Subconsultas y Vistas
6/37
Subconsultas Monoregistro
• Ej. Obtener el salario, nombre, apellido e ID delos empleados que cobran por debajo del
promedio de salarios
-
8/18/2019 Subconsultas y Vistas
7/37
Subconsultas Monoregistro! SELECT id, nombre, apellido, salario
FROM empleados
WHERE salario < (SELECT avg(salario)FROM empleados
)
-
8/18/2019 Subconsultas y Vistas
8/37
Subconsultas Multiregistro
• Son consultas que se usan con la clausula WHERE de la consulta principal.
• Devuelven mas de un registro.
• Se utiliza con los comparadores de comparacion,
en conjunto con los operadores IN, ANY y ALL(se pueden negar con NOT)
-
8/18/2019 Subconsultas y Vistas
9/37
Subconsultas Multiregistro
• Obtener el nombre y apellido de los alumnos queobtuvieron una calificacion mayor o igual a 7 en
al menos 4 asignaturas
-
8/18/2019 Subconsultas y Vistas
10/37
Subconsultas Multiregistro! SELECT nombre, apellido, calificacion
FROM alumno
WHERE CI = ANY (SELECT ciFROM cursa
WHERE calificacion >= 7GROUP BY ci
HAVING count(ci_alumno) > 3)
-
8/18/2019 Subconsultas y Vistas
11/37
Subconsultas Multiregistro
• Obtener el ID y nombre de los libros que hayansido prestados
-
8/18/2019 Subconsultas y Vistas
12/37
Subconsultas Multiregistro! SELECT id, nombre
FROM libros
WHERE id IN (SELECT id_libroFROM prestamos
)
-
8/18/2019 Subconsultas y Vistas
13/37
Subconsultas desde SELECT• Son consultas que se usan para determinar que valor mostrar en la columna.
• Se muestra en la columna un valor que cumplauna condicion
• Dichas columnas temporales deben llevar unnombre.
-
8/18/2019 Subconsultas y Vistas
14/37
Subconsultas desde SELECT• Sintaxis:
! SELECT col1, col2 (SELECT col FROM tabla
WHERE…) AS col3 FROM Tabla
-
8/18/2019 Subconsultas y Vistas
15/37
Subconsultas desde SELECT• Ej.
• Cliente(CI, Nombre, Apellido, Direccion)• Compra(CI_Cli, ID_Prod, Fecha)
• Obtener la CI, Nombre, Apellido y cantidad de
productos comprados de cada cliente.
-
8/18/2019 Subconsultas y Vistas
16/37
Subconsultas desde SELECT! SELECT ci, Nombre, Apellido, (SELECT
COUNT(ci_cli) FROM compra WHERE cli_ci =
ci) as CantidadFROM Cliente
-
8/18/2019 Subconsultas y Vistas
17/37
Subconsultas desde FROM• Son consultas que se usan para reemplazar una
tabla a consultar en el FROM.
• En lugar de extraer datos de una tabla, seextraen de una consulta, que genera una tablatemporal.
• Dichas tablas temporales deben llevar unnombre.
-
8/18/2019 Subconsultas y Vistas
18/37
Subconsultas desde FROM• Sintaxis:
! SELECT * from (SELECT * from tabla1) as nombre
! SELECT * from tabla1
JOIN (SELECT * FROM tabla2) as nombre
ON nombre.id = tabla1.id
-
8/18/2019 Subconsultas y Vistas
19/37
Subconsultas desde FROM• Ej.
• Obtener el id de los productos que se hayan vendido mas de 30 veces
-
8/18/2019 Subconsultas y Vistas
20/37
Subconsultas desde FROM! SELECT id FROM (
SELECT id, count(*) as cantidad
FROM producto pJOIN compra c ON c.id_prod = p.idGROUP BY id) as cantidad_compras
WHERE cantidad_compras.cantidad > 30
-
8/18/2019 Subconsultas y Vistas
21/37
Subconsulta vs JOIN• Es posible obtener el mismo resultado con una
subconsulta que con un JOIN.
• Si bien se obtiene el mismo resultado, se tienemejor performance con operaciones de JOIN.
• Por otra parte, si se prefiere usar subconsultas
en lugar de JOINs, dicha situacion se puedesolucionar mediante la creacion de indices (pocoortodoxo).
-
8/18/2019 Subconsultas y Vistas
22/37
Subconsulta vs JOIN• Sintaxis de JOIN:
! SELECT nombre, apellido, fechaFROM Persona pJOIN compra c ON p.ci = p.ci_per
• Sintaxis de subconsulta:! SELECT nombre, apellido, fecha
FROM persona WHERE p.ci IN (SELECT ci_per FROM compra
)
-
8/18/2019 Subconsultas y Vistas
23/37
Vistas• Una vista es una tabla virtual que se origina con
una operación de SELECT.
• Esta formado por los mismos elementos de unatabla: nombre, columnas y filas.
• Se puede tanto leer sus filas, como manipularlas.
-
8/18/2019 Subconsultas y Vistas
24/37
Vistas• Una vista esta compuesta por el resultado de una
consulta de cualquier tipo:
! Columnas de una o varias tablas
! Funciones agregadas
! Valores constantes
!
Resultado de calculos
-
8/18/2019 Subconsultas y Vistas
25/37
Vistas• Una vista esta compuesta por el resultado de una
consulta de cualquier tipo:
!
Columnas de una o varias tablas! Funciones agregadas
! Valores constantes
! Resultado de calculos
-
8/18/2019 Subconsultas y Vistas
26/37
Vistas• Una vista esta compuesta por el resultado de una
consulta de cualquier tipo:
!
Columnas de una o varias tablas! Funciones agregadas
! Valores constantes
! Resultado de calculos
-
8/18/2019 Subconsultas y Vistas
27/37
Vistas
Tabla Funcionarios
Vista usuarios
-
8/18/2019 Subconsultas y Vistas
28/37
Vistas• Usos:
! Simplificar o personalizar la percepcion que tiene
cada usuario de la base de datos.
! Omitir datos sensibles o innecesarios:
! Sueldos
! Contraseñas
! Nº de tarjeta de credito
-
8/18/2019 Subconsultas y Vistas
29/37
Vistas• Usos:
! Seguridad:
!
Permitir solo acceso a las vistas! No permitir acceso a las tablas involucradas
! Performance:
! Crear una vista de una consulta compleja que generamucha carga en el motor, y que a su vez esrecurrente.
-
8/18/2019 Subconsultas y Vistas
30/37
Vistas• Sintaxis:
! CREATE VIEW nombre [(columnas])
AS SENTENCIA_SELECT[WITH CHECK OPTION]
-
8/18/2019 Subconsultas y Vistas
31/37
Vistas• La clausula WITH CHECK OPTION implica que
solo se pueden añadir registros a la vista que
mantengan las condiciones del WHERE almomento de crearla.
• Se puede opcionalmente definir un nombre
personalizado para las columnas de la vista, enlugar de usar el resultado del SELECT.
-
8/18/2019 Subconsultas y Vistas
32/37
Vistas• Ej.
• Grupo(ID, Grado,Letra, Turno, CI_Adscripto)• Adscripto(CI, Nombre, Apellido, Telefono, Mail)
• Crear una vista que indique el grupo, turno,
nombre completo y telefono de los adscriptos.
-
8/18/2019 Subconsultas y Vistas
33/37
Vistas! CREATE VIEW adscripcion
AS
SELECT Grado || Letra as Nom_Grupo, Turno,Nombre, Apellido, Telefono FROM Grupo gJOIN Adscripto a ON g.ci_adscripto = a.ci
! El operador || concatena valores en uno solo
-
8/18/2019 Subconsultas y Vistas
34/37
Vistas• Al modificar el contenido de una vista (INSERT,
UPDATE, DELETE), se modifica el contenido de
la tabla original.
• Para que una vista sea actualizable se debe teneruna relacion uno a uno entre las filas de la tabla
y las filas de la vista, y las columnas omitidasdeben permitir valores nulos, en el caso deINSERT.
-
8/18/2019 Subconsultas y Vistas
35/37
Vistas• Una vista no es modificable si contiene:
! Funciones agregadas (SUM, MIN, MAX, COUNT,etc.)
! DISTINCT
! GROUP BY y/o HAVING! Una subconsulta en la lista de columnas del
SELECT
!
Join! Una vista no actualizable en la cláusula FROM.! Funciones de informix
-
8/18/2019 Subconsultas y Vistas
36/37
Vistas• Los nombres de las columnas de las vistas
pueden coincidir con los nombres de las
columnas de las tablas referenciadas.
• Las columnas que son resultado de operacioneso funciones de agregado, se les debe especificar
el nombre de columna en la vista, si no se uso eloperador “AS” en el select.
-
8/18/2019 Subconsultas y Vistas
37/37
Vistas• Para eliminar una vista, usamos DROP VIEW:
!
DROP VIEW nombre.
• El usuario debe tener permiso de RESOURCEpara poder eliminar una vista.