Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Subconsultas
y Vistas
Docente:
T/RT Gonzalo Martnez
CETP EMT Informtica
Introduccin
Esta diapositiva tratara que son las subconsultas
en SQL, y en que caso utilizarlas.
Tambien tratara que son las Vistas.
Subconsulta
Una subconsulta es una sentencia SELECT
dentro de otra sentencia SELECT.
El SELECT interno se usa para obtener datos,
que seran usados para compararse en el select
externo.
Tambien, las subconsultas, permiten hacer
operaciones equivalentes al JOIN
Subconsulta
Tenemos 4 tipos de subconsultas:
Subconsultas Monoregistro
Subconsultas Multiregistro
Subconsultas desde el FROM
Subconsultas desde el SELECT
Subconsultas Monoregistro
Son consultas que se usan con la clausula
WHERE de la consulta principal.
Devuelven un unico valor, y se usan con los
operadores de comparacion (=,<,>,<=,>=,!=)
Subconsultas Monoregistro
Ej. Obtener el salario, nombre, apellido e ID de
los empleados que cobran por debajo del
promedio de salarios
Subconsultas Monoregistro
SELECT id, nombre, apellido, salario
FROM empleados
WHERE salario < (
SELECT avg(salario)
FROM empleados
)
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)
Subconsultas Multiregistro
Obtener el nombre y apellido de los alumnos que
obtuvieron una calificacion mayor o igual a 7 en
al menos 4 asignaturas
Subconsultas Multiregistro
SELECT nombre, apellido, calificacion
FROM alumno
WHERE CI = ANY (
SELECT ci
FROM cursa
WHERE calificacion >= 7
GROUP BY ci
HAVING count(ci_alumno) > 3
)
Subconsultas Multiregistro
Obtener el ID y nombre de los libros que hayan
sido prestados
Subconsultas Multiregistro
SELECT id, nombre
FROM libros
WHERE id IN (
SELECT id_libro
FROM prestamos
)
Subconsulta vs JOIN
Es posible obtener el mismo resultado con una
subconsulta que con un JOIN.
Si bien se obtiene el mismo resultado, se tiene
mejor performance con operaciones de JOIN.
Por otra parte, si se prefiere usar subconsultas
en lugar de JOINs, dicha situacion se puede
solucionar mediante la creacion de indices (poco
ortodoxo).
Subconsulta vs JOIN
Sintaxis de JOIN:
SELECT nombre, apellido, fecha
FROM Persona p
JOIN 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
)
Vistas
Una vista es una tabla virtual que se origina con
una operacin de SELECT.
Esta formado por los mismos elementos de una
tabla: nombre, columnas y filas.
Se puede tanto leer sus filas, como manipularlas.
Vistas
Una vista esta compuesta por el resultado de una
consulta de cualquier tipo:
Vistas
Una vista esta compuesta por el resultado de una
consulta de cualquier tipo:
Vistas
Una vista esta compuesta por el resultado de una
consulta de cualquier tipo:
Vistas
Tabla Funcionarios
Vista usuarios
Vistas
Usos:
Simplificar o personalizar la percepcion que tiene
cada usuario de la base de datos.
Omitir datos sensibles o innecesarios:
Sueldos
Contraseas
N de tarjeta de credito
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 genera
mucha carga en el motor, y que a su vez es
recurrente.
Vistas
Sintaxis:
CREATE VIEW nombre [(columnas])
AS SENTENCIA_SELECT
[WITH CHECK OPTION]
Vistas
La clausula WITH CHECK OPTION implica que
solo se pueden aadir registros a la vista que
mantengan las condiciones del WHERE al
momento de crearla.
Se puede opcionalmente definir un nombre
personalizado para las columnas de la vista, en
lugar de usar el resultado del SELECT.
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.
Vistas
CREATE VIEW adscripcion
AS
SELECT Grado || Letra as Nom_Grupo, Turno,
Nombre, Apellido, Telefono FROM Grupo g
JOIN Adscripto a ON g.ci_adscripto = a.ci
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 tener
una relacion uno a uno entre las filas de la tabla
y las filas de la vista, y las columnas omitidas
deben permitir valores nulos, en el caso de
INSERT.
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 clusula FROM.
Funciones de informix
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 operaciones
o funciones de agregado, se les debe especificar
el nombre de columna en la vista, si no se uso el
operador AS en el select.
Vistas
Para eliminar una vista, usamos DROP VIEW:
DROP VIEW nombre.