ACTIVIDAD JOINS
ELECTIVA - GESTIÓN Y SEGURIDAD EN BASES DE DATOS
Estudiante: María Isabel Andrade Prado
Programa: Ingeniería Informática
9° Semestre
1. Consultar que son los Join y cuáles son sus tipos
La instrucción de Join, como su nombre indica, se usa para enlazar los datos de dos tablas
relacionadas a través de algún campo en común (típicamente una “foreign key” o clave
foránea) y así dar como resultado filas que mezclan datos provenientes de las dos (o más)
tablas sobre las que hemos hecho el Join.
1. Inner Join. El Join de “toda la vida”. El join per defecto que se aplica cuando no
indicamos otra cosa al hacer la consulta. Devuelve sólo aquellas filas donde haya
un “match”, es decir, las filas donde el valor del campo de la tabla A que se utiliza
para hacer el Join coincida con el valor del campo correspondiente en la tabla B.
Ejemplo: devolver todos los productos para los que haya como mínimo un pedido
en los últimos días (el inner join enlazará el campo producto en la tabla Pedido con
la clave primária de ese producto en la tabla Producto).
2. Left outer Join. Cuando quieres todas las filas para las que haya match pero
también aquellas de la Tabla A que no hagan match. Siguiendo el ejemplo anterior,
si quieres listar todos los productos con datos de sus pedidos, pero mostrando
también aquellos productos para lo que no tengas todavía un pedido, la solución
sería hacer una Left Outer join entre Producto y Pedido.
3. Right outer Join. Exactamente lo mismo, pero a la inversa, cuando quieres listar
las filas de la tabla B aunque no estén relacionadas con ninguna fila de la tabla A.
Es un operador un poco redundante ya que se podría cambiar simplemente el
orden de las tablas en el Join y utilizar un left outer para conseguir el mismo
efecto. No obstante, y como parte de Joins múltiples, es útil tener los dos para una
mejor comprensión de la consulta
4. Full outer join. Es como la suma de las dos anteriores. Queremos tanto las filas de
la A como las de B, tanto si hay match como si no (evidentemente cuando haya
match la consulta devolverá todos los campos de A y B que hayamos indicado,
cuando no, la consulta devolverá sólo los campos de A o B).
2. Cuál es la sentencia para crear un:
-Natural Join:
SELECT *
FROM table1
NATURAL JOIN table2;
-Equi Join:
SELECT *
FROM table1
JOIN table2
[ON (join_condition)]
-Outer Join:
SELECT *
FROM empleados
LEFT JOIN vhc
ON empleado.vhc_id = vhc.vhc_id;
SELECT *
FROM empleados
RIGHT JOIN vhc
ON empleado.vhc_id = vhc.vhc_id;
SELECT *
FROM empleados
FULL JOIN vhc ON empleados.vhc_id = vhc.vhc_id;
En todas estas combinaciones externas el uso de la palabra OUTER es opcional. Si
utilizamos LEFT, RIGHT o FULL y la combinación de columnas, el sistema sobreentiende
que estamos haciendo una combinación externa.
FROM Tabla1
[LEFT/RIGHT/FULL] [OUTER]
JOIN Tabla2 ON Condiciones_Vinculos_Tablas
3. En el ejercicio propuesto en Clase listar: (también se puede visualizar en el script).
--1. listar programas por facultad
select programas.nomprograma, facultades.nomfacultad
from programas
join facultades on programas.facultad=facultades.codfacultad;
--2. listar estudiantes por programa
select estudiantes.nomestudiante, programas.nomprograma
from estudiantes
join programas on estudiantes.programa=programas.codprograma;
--3. listar estudiante por programa y facultad
select estudiantes.nomestudiante, programas.nomprograma, facultades.nomfacultad
from estudiantes
join programas on estudiantes.programa=programas.codprograma
join facultades on programas.facultad=facultades.codfacultad;
-- 4. listar registro de notas de cada estudiante
select estudiantes.nomestudiante, regnotas.parcial1, regnotas.parcial2,
regnotas.efinal, regnotas.nfinal, regnotas.estado
from regnotas
join estudiantes on regnotas.estudiante=estudiantes.codestudiante;
--5. listar registro de notas de cada estudiante indicando el nombre del
estudiante, ciudad y barrio
select estudiantes.nomestudiante, regnotas.parcial1, regnotas.parcial2,
regnotas.efinal, regnotas.nfinal, regnotas.estado, ciudades.nomciudad,
barrios.nombarrio
from regnotas
join estudiantes on regnotas.estudiante=estudiantes.codestudiante
join ciudades on estudiantes.ciudad=ciudades.codciudad
join barrios on estudiantes.barrio=barrios.codbarrio;
4. Crear la tabla pastusos a partir de las otras tablas, donde se indique el código del
estudiante, el nombre del estudiante, la edad del estudiante el sexo de estudiante,
barrio, ciudad, y programa. (también se puede visualizar en el script).
create table pastusos
as select estudiantes.codestudiante, estudiantes.nomestudiante,
estudiantes.edaestudiante, estudiantes.sexestudiante, barrios.nombarrio,
ciudades.nomciudad, programas.nomprograma
from estudiantes
join ciudades on estudiantes.ciudad=ciudades.codciudad
join barrios on estudiantes.barrio=barrios.codbarrio
join programas on estudiantes.programa=programas.codprograma
where ciudades.nomciudad='Pasto';
select * from pastusos;
5. Consultar como hacer copias de seguridad en postgres y su restauración (interfaz y
consola)
Backup por consola
# pg_dump basededatos > fichero.sql
Backup por interfaz
Restauracion por consola
# psql basededatos < fichero.sql
Restauración por interfaz
6. Investigar como crear usuarios de la base de datos, crear un usuario para la base
universidad llamado aprendiz y darle los permisos únicamente de lectura, crear otro
usuario llamado estudiante y darle permisos de super usuario.
CREATE USER 'aprendiz'@'localhost' identified by '1234';
GRANT SELECT ON universidades.* TO 'aprendiz'@'localhost’;
FLUSH PRIVILEGES;
CREATE USER 'estudiante'@'localhost' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON universidades. * TO 'estudiante'@'localhost';
FLUSH PRIVILEGES;