Subconsultas y Vistas

Embed Size (px)

Citation preview

  • 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.