Join SQL

Iniciado por Kanine25, 13 Mayo 2020, 18:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Kanine25

Hola a todos me ha surgido un problema con una sentencia en SQL.

El problema es que no entiendo muy bien que tipo de join debo usar. Si alguien pudiese explicarme los join se lo agradecería.

Espero que alguien pueda echarme una mano.
Muchas gracias y un saludo.

EdePC

No lo he probado, pero por ahí debe andar la cosa. Lo importante para resolver estos ejercicios es leer el enunciado poco a poco e ir armando consultas que satisfagan ese poco a poco para al final juntar todo:

Código (sql) [Seleccionar]
-- Tengo que hacer un select para obtener todas las ciudades del continente Africa.

-- Primero dice que quiere obtener todas las ciudades:
SELECT * FROM city

-- Luego agrega que tienen que ser solamente los del continente Africa,
-- Primero haces un select de africa para obtener todos los paises de Africa
SELECT * FROM country
WHERE continent = 'africa'

-- Entonces se combinan ambas sentencias con un JOIN simple
SELECT * FROM city
INNER JOIN country ON city.countrycode = country.code
WHERE continent = 'africa'

-- Al final afinas los campos que de verdad necesitas
SELECT city.name
FROM city INNER JOIN country ON city.countrycode = country.code
WHERE continent = 'africa'


- El INNER JOIN es el más utilizado normalmente, este solo muestra los campos que de verdad tienen relación y no estén vacíos, LEFT JOIN mostraría todos los capos de la tabla de la izquierda del LEFT JOIN donde podrían haber campos vacíos o NULL en la tabla de derecha. RIGTH JOIN hace lo mismo pero viceversa.

- Acá te dejo un ejemplo de un LEFT JOIN

Código (sql) [Seleccionar]
CREATE DATABASE banco_2;
USE banco_2;

CREATE TABLE directores (
  id        INTEGER      PRIMARY KEY,
  nombre    VARCHAR(50),
  apellidos VARCHAR(50),
  sueldo    FLOAT
);

CREATE TABLE sucursales (
  nsucursal INTEGER,
  nombre    VARCHAR(50),
  director  INTEGER      REFERENCES directores(id),
  dirección VARCHAR(100)
);

INSERT INTO directores VALUES
  ( 1, 'Alberto', 'Péres Martín' , 2500 ),
  ( 2, 'Antonio', 'López López'  , 3000 ),
  ( 3, 'Silvia' , 'Martín Martín', 2570 ),
  ( 4, 'Pedro'  , 'García Martín', 3500 );

INSERT INTO sucursales VALUES
  ( 1, 'Sucursal Centro', 1, 'Avd. del Estilo, 45' ),
  ( 2, 'Sucursal Oeste' , 2, 'Avd. Mandrágora, 4'  ),
  ( 3, 'Sucursal Este'  , 3, 'Calle Arús, 30'      );

SELECT directores.nombre
     , directores.apellidos
     , sucursales.nombre AS NOMBRE_SUCURSAL
FROM directores LEFT JOIN sucursales
ON directores.id = sucursales.director;

## RESULTADO ESPERADO ##

#+---------+---------------+-----------------+
#| nombre  | apellidos     | NOMBRE_SUCURSAL |
#+---------+---------------+-----------------+
#| Alberto | Péres Martín  | Sucursal Centro |
#| Antonio | López López   | Sucursal Oeste  |
#| Silvia  | Martín Martín | Sucursal Este   |
#| Pedro   | García Martín | NULL            |
#+---------+---------------+-----------------+