Está en la página 1de 29

Bases de Datos I

SQL – Vistas y Joins

Profesores: Ing. Larry Catarine, Ing. Kevin Vargas.


Vistas
• Las vistas se pueden definir como tablas virtuales
basadas en una o más tablas o vistas y cuyos
contenidos vienen definidos por una consulta sobre
las mismas. Esta tabla virtual o consulta se le
asigna un nombre y se almacena
permanentemente en la BD, generando al igual que
en las tablas una entrada en el diccionario de
datos.

• Las vistas permiten que diferentes usuarios vean la


BD desde diferentes perspectivas, así como
restringir el acceso a los datos de modo que
diferentes usuarios accedan sólo a ciertas filas o
columnas de una tabla.
¿Para que sirven las vistas?

- Ocultar información: permitiendo el acceso a algunos datos y manteniendo oculto el


resto de la información que no se incluye en la vista. El usuario opera con los datos de una
vista como si se tratara de una tabla, pudiendo modificar tales datos.

- Simplificar la administración de los permisos de usuario: se pueden dar al usuario


permisos para que solamente pueda acceder a los datos a través de vistas, en lugar de
concederle permisos para acceder a ciertos campos, así se protegen las tablas base de
cambios en su estructura.

- Mejorar el rendimiento: se puede evitar tipear instrucciones repetidamente almacenando


en una vista el resultado de una consulta compleja que incluya información de varias
tablas.

- Podemos crear vistas con: un subconjunto de registros y campos de una tabla; una
unión de varias tablas; una combinación de varias tablas; un resumen estadístico de una
tabla; un subconjunto de otra vista, combinación de vistas y tablas.
CREATE VIEW: Crear Vista

La cláusula CREATE VIEW permite la creación de vistas. La cláusula asigna un


nombre a la vista y permite especificar la consulta que la define. Su sintaxis es:

CREATE VIEW
NOMBREVISTA as
SELECT *
FROM Productos;
Vista de Restricción
Son las que restringen el acceso de un usuario a únicamente un conjunto de filas
de una tabla.

EJEMPLO: Si se desea que un director de departamento vea sólo las filas de la tabla empleado (nombres y
apellidos de los empleados), correspondientes a los departamentos donde su presupuesto sea mayor a 8000.
Vista de Proyección

Son aquellas que restringen el acceso de un usuario sólo a ciertas columnas de una tabla.

El departamento de procesamiento de pedidos necesita acceso únicamente el nombre de la empresa para


procesar los pedidos. Crear una vista que muestre esta información.
Vista Conjunto (Filas + Columnas) – Having / Group By

Lo más habitual es crear vistas con parte de las filas y parte de las columnas de una tabla.
Por ejemplo:

Definir una vista que contenga el código de fabricante, el nombre del fabricante y el límite de crédito de
todos los clientes asignados al vendedor Bill Adams.
Vista Compuesta
Son vistas creadas a partir de los datos de dos o más tablas. Presentan los datos como una única
tabla virtual. Al igual que las anteriores se utilizan frecuentemente para facilitar el manejo de
consultas complejas de uso frecuente en la base.
Insert y update a traves de Vistas

Fuente: https://desarrolloweb.com/articulos/2337.php
Joins
JOIN permite combinar registros de diferentes tablas. En la clausula ON debemos establecer la
condición por la cual queremos unir la tabla, que generalmente es algo que tengan ambas en
común.

Consultas en más de una tabla al mismo tiempo

SELECT Columna1, Columna2, ...


FROM NombreDeLaTablaA
JOIN NombreDeLaTablaB, ...
ON condicionDeJunta
Joins
Ejemplo:

SELECT C.SKU, C.DNI, Cli.Apellido


FROM Compras AS C
JOIN Clientes AS Cli
ON C.DNI == Cli.DNI

Compras Clientes

SKU (PK) (FK) DNI (PK)

DNI (FK) Nombre

Fecha Apellido
¿Cómo funciona el JOIN?

Al unir dos tablas usando la clausula JOIN sin especificar una condicion
en la clausula ON, SQL lo que hace es devolver una nueva tabla con
todos los registros combinados de una con todas las posibles
combinaciones de la otra (producto cartesiano)
¿Cómo funciona el JOIN?

SELECT C.SKU, C.DNI, Cli.Apellido


FROM Compras AS C
JOIN Clientes AS Cli;

SKU DNI Fecha Precio DNI Nombre Apellido

3 33.241.677 03/01/2017 70
33.241.677 Cesar Carroza

4 35.186.928 04/01/2017 40

35.186.928 Mariano Firefox


5 33.241.677 03/01/2017 50
¿Cómo funciona el JOIN?

Para eliminar las combinaciones que no queremos, ponemos la condición


por la cual queremos que quede la unión.
Esta restricción va en el ON.

ON
¿Cómo funciona el JOIN?

SELECT C.SKU, C.DNI, Cli.Apellido


FROM Compras C
JOIN Clientes Cli ON C.DNI = Cli.DNI

SKU DNI Fecha Precio DNI Nombre Apellido

3 33.241.677 03/01/2017 70
33.241.677 Cesar Carroza

4 35.186.928 04/01/2017 40

35.186.928 Mariano Firefox


5 33.241.677 03/01/2017 50
Tipos de Join
Combinando tablas

ㅡ Imaginemos que contamos con un dataset que contiene las siguientes tablas: Personas y
Logros

ㅡ Veamos el contenido de las tablas:

SELECT * FROM Personas;


SELECT * FROM Logros;
Personas

Logros
17
Tipos de Join
ㅡ Hay varios tipos de operaciones de JOIN.

○ INNER JOIN: Retorna todos los registros donde haya al menos una coincidencia en ambas tablas
○ LEFT JOIN: Retorna todos los registros de la tabla izquierda, y los registros que coincidan de la tabla
derecha
○ RIGHT JOIN: Retorna todos los registros de la tabla derecha, y los registros que coincidan de la tabla
izquierda
○ FULL OUTER JOIN: Retorna todos los registros de ambas tablas aunque no tengan correspondencia

ㅡ Es mucho más fácil entender los JOIN como operaciones


de intersección de conjuntos.

ㅡ Existe una teoría matemáticamente sólida detrás de estas


operaciones llamada Álgebra Relacional.

18
Tipos de Join
LEFT JOIN
El LEFT JOIN retorna todas las filas de la tabla izquierda (tabla1), con
las filas coincidentes en la tabla derecha (tabla2).
El resultado es NULL en el lado derecho cuando no hay coincidencia.

Sintaxis del Left Join:

SELECT nombres_columnas
FROM tabla1
LEFT JOIN tabla2
ON tabla1.columna_relacion=tabla2.columna_relacion;

Ejemplo para Personas y Logros:

SELECT Personas.Apellido, Logros.Logro


FROM Personas
LEFT JOIN Logros
ON Personas.PersonaID = Logros.PersonaID;

19
Tipos de Join
RIGHT JOIN
De forma similar, el RIGHT JOIN devuelve todas las filas de la tabla
derecha (tabla2), con las filas coincidentes en la tabla de la izquierda
(tabla1).
El resultado es NULL del lado izquierdo cuando no hay coincidencia.

Sintaxis del Right Join:

SELECT nombres_columnas
FROM tabla1
RIGHT JOIN tabla2
ON tabla1.columna_relacion=tabla2.columna_relacion;

Ejemplo para Personas y Logros:

SELECT Personas.Apellido, Logros.Logro


FROM Personas
RIGHT JOIN Logros
ON Personas.PersonaID = Logros.PersonaID;

20
Tipos de Join
FULL OUTER JOIN
El FULL OUTER JOIN retorna todas las filas de la tabla de la izquierda
(tabla1) y de la tabla de la derecha (tabla2).
El FULL OUTER JOIN combina el resultado de LEFT y RIGHT JOIN. En
este caso podemos tener valores NULL de ambos lados.

Sintaxis del FULL OUTER JOIN:

SELECT nombres_columnas
FROM tabla1
FULL OUTER JOIN tabla2
ON tabla1.columna_relacion=tabla2.columna_relacion;

Ejemplo para Personas y Logros:

SELECT Personas.Apellido, Logros.Logro


FROM Personas
FULL OUTER JOIN Logros
ON Personas.PersonaID = Logros.PersonaID;

21
Union

UNION permite combinar el resultado de varias consultas SELECT al mismo tiempo. Es decir, todas
las consultas se ejecutaran por separado y luego se concatenaran los resultados. A diferencia del
JOIN no se aplica ningun tipo de logica relacional para unir registros.

Combinar resultados de consultas SELECT

SELECT Columna1, Columna2, ...


FROM NombreDeLaTabla1
UNION
SELECT Columna1, Columna2, ...
FROM NombreDeLaTabla1
Anidamientos / Subconsultas

Una subconsulta o anidamiento, es un


comando select dentro de otro select.
SQLServer soporta todas los formatos de
subconsultas dentro del estándar SQL.

Siempre debe tener una consulta externa,


la subconsulta siempre debe ir entre
paréntesis, la misma se encuentra
anidada.
Anidamientos / Subconsultas
Manejando los resultados
 Cuando devuelve un solo registro se usan los comparadores boolelanos / lógicos
< >, < , >, =, etc.

SELECT column-names FROM table-name WHERE column-name operator


< >, < , >, =, … ETC (SELECT column-name FROM table-name)

 Cuando devuelven más de un registro se utilizan comparadores multiregistro:

 IN TRUE si se encuentra en la lista.


 ANY (y sinónimo SOME) TRUE si la condición se cumple con algún registro de la
lista devuelta por la sub-consulta.
 ALL TRUE si la condición se cumple con todos los registros de la lista devuelta
por la su consulta.
 El operador NOT puede ser utilizado con los operadores IN, ANY y ALL.

SELECT column-names FROM table-name WHERE column-name operator


ANY | ALL | IN | NOT IN … ETC (SELECT column-name FROM table-name)
Anidamientos / Subconsultas
SELECT
Fecha,
Nro,
Monto,
Tasa
FROM BasesDeDatos.Tabla

WHERE TipoPF = 110 AND Fecha = (SELECT MAX(Fecha) FROM BasesDeDatos.Tabla WHERE TipoPF = 110)

Restricciones:
Si el filtro utiliza de operador un ‘=’ el resultado debe ser un valor único, para múltiples valores a filtrar utilizamos
‘in’
No puede contener la cláusula ORDER BY
No puede ser la UNION de varias sentencias SELECT
Algunos SGBD obligan a renombrar cada expresión especial, MAX, AVG, SUM, etc.
Anidamientos / Subconsultas
SELECT
campo1,
campo2,
campo3
FROM BasesDeDatos.Tabla
WHERE Campo1 = Valor1
AND Campo2 in (SELECT Campo2 FROM BasesDeDatos.Tabla2 WHERE CampoX = Valor2)

SELECT
campo1,
campo2,
campo3
FROM BasesDeDatos.Tabla
WHERE Campo1 = Valor1
AND Campo2 in (SELECT Campo5​ FROM BasesDeDatos.Tabla2 left join BaseDeDatos.Tabla4​ WHERE CampoX =
Valor2)
Anidamientos / Subconsultas

¿Qué nos permiten las su consultas?

 Permite consultas estructuradas.


 No nos obliga a usar joins.
 Son mas fácil de leer.
 Puede retornar un escalar, una columna, un registro o
hasta una tabla.
 Puede contener cualquiera de los comandos de un
select común: DISTINCT, ORDER BY, GROUP BY,
LIMIT.
 Puede contener join, unión, comentarios, funciones,
etcétera.
Anidamientos / Subconsultas

Lo que no se puede hacer con subconsultas

 No se puede modificar una tabla y al mismo tiempo usarla


en subconsulta.

 La consulta externa debe ser con comandos solo DML no


DDL.
¡¡¡Gracias por acompañarnos!!!

También podría gustarte