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.
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:
-- 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 JOINCREATE 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 |
#+---------+---------------+-----------------+