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 |
#+---------+---------------+-----------------+