Bienvenida conceptos básicos y contexto histórico de las Bases de Datos

1

Bienvenida conceptos básicos y contexto histórico de las Bases de Datos

2

Playground: tu primera consulta en bases de datos

Introducción a las bases de datos relacionales

3

Historia de las bases de datos relacionales

4

Qué son entidades y atributos

5

Entidades de Platzi Blog

6

Relaciones

7

Múltiples muchos

8

Diagrama ER

9

Diagrama Físico: tipos de datos y constraints

10

Diagrama Físico: normalización

11

Formas normales en Bases de Datos relacionales

12

Diagrama Físico: normalizando Platziblog

RDBMS (MySQL) o cómo hacer lo anterior de manera práctica

13

¿Qué es RDB y RDBMS?

14

Instalación local de un RDBMS (Windows)

15

Instalación local de un RDBMS (Mac)

16

Instalación local de un RDBMS (Ubuntu)

17

Clientes gráficos

18

Servicios administrados

SQL hasta en la sopa

19

Historia de SQL

20

DDL create

21

Playground: CREATE TABLE

22

CREATE VIEW y DDL ALTER

23

DDL drop

24

Playground: VIEW, ALTER y DROP en SQL

25

DML

26

Playground: CRUD con SQL

27

¿Qué tan standard es SQL?

28

Creando Platziblog: tablas independientes

29

Creando Platziblog: tablas dependientes

30

Creando Platziblog: tablas transitivas

Consultas a una base de datos

31

¿Por qué las consultas son tan importantes?

32

Estructura básica de un Query

33

SELECT

34

Playground: SELECT en SQL

35

FROM y SQL JOINs

36

Utilizando la sentencia FROM

37

Playground: FROM y LEFT JOIN en SQL

38

WHERE

39

Utilizando la sentencia WHERE nulo y no nulo

40

Playground: Filtrando Datos con WHERE

41

GROUP BY

42

ORDER BY y HAVING

43

Playground: Agrupamiento y Ordenamiento de Datos

44

El interminable agujero de conejo (Nested queries)

45

¿Cómo convertir una pregunta en un query SQL?

46

Preguntándole a la base de datos

47

Consultando PlatziBlog

48

Playground: Prueba Final con PlatziBlog

Introducción a la bases de datos NO relacionales

49

¿Qué son y cuáles son los tipos de bases de datos no relacionales?

50

Servicios administrados y jerarquía de datos

Manejo de modelos de datos en bases de datos no relacionales

51

Top level collection con Firebase

52

Creando y borrando documentos en Firestore

53

Colecciones vs subcolecciones

54

Recreando Platziblog

55

Construyendo Platziblog en Firestore

56

Proyecto final: transformando tu proyecto en una db no relacional

Bases de datos en la vida real

57

Bases de datos en la vida real

58

Big Data

59

Data warehouse

60

Data mining

61

ETL

62

Business intelligence

63

Machine Learning

64

Data Science

65

¿Por qué aprender bases de datos hoy?

Bonus

66

Bases de datos relacionales vs no relacionales

67

Elegir una base de datos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Playground: FROM y LEFT JOIN en SQL

37/67

Aportes 98

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me gustan estos retos, pero lo que mas me cuesta es entender el objetivo. En este caso a mi parecer el reto debería decir algo como:

  • Genera una consulta donde se presente el id del curso, el nombre del curso, el id del profesor y el nombre del profesor.
  • Re nombra los campos de cursos como: id y name; renombra los campos de teachers como: teacher_id y teacher_name.
  • Selecciona solo los campos de cursos donde se tiene un id de teacher relacionado.

Importante: En consola solo debes dejar el código que se pide para la prueba. Elimina los ejemplos pre escritos.

  • Dos soluciones validas para el reto:

  • Solución 1:

SELECT 
courses.id AS id, 
courses.name AS name, 
teachers.id AS teacher_id,
teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers
ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT null;
  • Solución 2:
SELECT 
courses.id AS id, 
courses.name AS name, 
teachers.id AS teacher_id,
teachers.name AS teacher_name
FROM courses
INNER JOIN teachers
ON courses.teacher_id = teachers.id; 

Che, tengo un poco de problema tratando de entender los enunciados de la guía. No es por excusarme, debo mejorar en eso, pero creo que no son tan claros

Mi solucion, por si puede ayudar a alguien 😉

SELECT 
	courses.id as id, 
	courses.name as name, 
	teacher_id, 
teachers.name as teacher_name
FROM courses 
  LEFT JOIN teachers on teachers.course_id = courses.id
where teacher_id is not null;

Por cierto, me encanta esta nueva implementacion de playgrounds con sql 😄

Este es mi solucion
.
.
.
.
.
.

SELECT 
  courses.id as id,
  courses.name as name,
  teachers.id as teacher_id,
  teachers.name as teacher_name
FROM teachers
INNER JOIN courses
ON teachers.id = courses.teacher_id;

Quise probar ponerle un ‘alias’ a cada tabla para hacer más corto el comando y funcionó perfectamente, esa idea la encontré en este video 💚

Acá pueden probar el código:

-- Tu código aquí 👇
SELECT c.id AS id, c.name AS name, t.id AS teacher_id, t.name AS teacher_name
FROM teachers AS t
  INNER JOIN courses AS c
  ON c.teacher_id = t.id;

Esta fue mi solución

SELECT courses.id AS id,
  courses.name AS name,
  teacher_id,
  teachers.name AS teacher_name
FROM courses
  LEFT JOIN teachers ON courses.id = teachers.course_id
WHERE teacher_id is NOT NULL;
# 🤯 ¿Por qué `LEFT JOIN` y no `INNER JOIN`? Para quienes estén teniendo problemas para entender la respuesta, así como yo los tuve: ![](https://static.platzi.com/media/user_upload/image-e6dd7bb9-f68d-406f-88d5-121cc6d8aa4c.jpg)Resulta que un `LEFT JOIN `con un `WHERE … IS NOT NULL `equivale a un `INNER JOIN`. Al escoger `NOT NULL` estamos escogiendo justo la parte **dentro de la intersección**.

Solución… 😄
.

.
.
.
.
.
.

SELECT c.id, c.name, t.id AS teacher_id, t.name AS teacher_name
FROM courses AS c
INNER JOIN teachers AS t ON c.teacher_id = t.id;

Antes de hundir en Correr Pruebas, elimina las 2 sentencias SQL que vienen por defecto en el playground, de lo contrario marca error…

La guía no es muy clara, toma más esfuerzo entender lo que pide que armar el query. Tampoco los mensajes de error dan mucho detalle, solo dice que lo intentes de nuevo.

Para resolver este desafío, utilizaremos un `INNER JOIN` porque queremos encontrar cursos que tengan un profesor asociado. La tabla `courses` tendrá una columna `teacher_id` que usaremos para unirnos con la tabla `teachers`. La consulta sería la siguiente: SELECT courses.id AS course\_id, courses.name AS course\_name, teachers.id AS teacher\_id, teachers.name AS teacher\_name FROM courses INNER JOIN teachers ON courses.teacher\_id = teachers.id WHERE courses.teacher\_id IS NOT NULL; En esta consulta: * Seleccionamos el `id` y `name` de la tabla `courses` y los renombramos a `course_id` y `course_name` respectivamente, utilizando `AS` para clarificar que se refieren al curso. * Hacemos lo mismo con `id` y `name` de la tabla `teachers`, renombrándolos a `teacher_id` y `teacher_name`. * Usamos `INNER JOIN` para unir las tablas `courses` y `teachers` basándonos en la coincidencia de `courses.teacher_id` y `teachers.id`. * Filtramos con `WHERE` para asegurarnos de seleccionar solo aquellos cursos que tienen un `teacher_id` asignado (no nulo). Esta consulta devolverá una lista de todos los cursos que tienen un profesor asociado, junto con la identificación y el nombre del profesor correspondiente.

Les paso mi solución al reto. Como a muchas personas, también me costó un poquitín entender la guía, así que me tardé bastante en lograrlo, además tuve que leer mis notas una y otra vez para entender mejor lo de JOIN. Leyendo los comentarios vi que existen varias formas de solucionar esto, así que si tienen una diferente a la mía, pásenla para revisarla! 😃

SELECT courses.id AS id, 
courses.name AS name, 
teachers.id AS teacher_id, 
teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers
ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;
SELECT 
  courses.id AS id,
  courses.name AS name,
  courses.teacher_id AS teacher_id,
  teachers.name AS teacher_name
  
FROM courses 
INNER JOIN teachers ON courses.teacher_id = teachers.id;

Completed, mas dificil que los demás!

Playground FROM y LEFT JOIN en SQL.JPG pero se logro !!

select * from courses
join teachers on courses.id = teachers.course_id
where teacher_id is NOT NULL;
Mi consejo es que primero Ejecuten el código para verificar y luego corran las pruebas para no perder corazones jaja.SELECT courses.id, courses.name, teachers.id AS teacher\_id, teachers.name AS teacher\_nameFROM courses INNER JOIN teachers ON courses.teacher\_id = teachers.id; Mi solución fue esta: ```txt SELECT courses.id, courses.name, teachers.id AS teacher_id, teachers.name AS teacher_name FROM courses INNER JOIN teachers ON courses.teacher_id = teachers.id; ```
La redacción de las guías no es muy buena, resulta complejo entender que es lo que se pide en los ejercicios.
Como costo entender la descripción del problema, pero aquí está la mi solución: SELECT courses.id AS id, courses.name AS name, teachers.id AS teacher\_id, teachers.name AS teacher\_name FROM courses LEFT JOIN teachers ON teachers.course\_id = courses.id WHERE teacher\_id IS NOT NULL;
![](https://static.platzi.com/media/user_upload/image-334a6480-4142-4d6a-a3f1-f5eb7d18575c.jpg)
Los ejercicios excelentes, pero me cuesta entender que solicitan,
![](https://static.platzi.com/media/user_upload/image-ec56d8ec-6f12-4037-8fd6-8250f9f3e552.jpg)
![](https://static.platzi.com/media/user_upload/image-fe08ff9c-a4fc-46e0-b75a-4eca6cdadee0.jpg)
![](https://static.platzi.com/media/user_upload/image-ef6758fc-35cd-4687-974c-5785a8fab507.jpg)
Primera vez que recuerde que me queda bien con las 3 vidas sin gastar jajajajaja ![](https://static.platzi.com/media/user_upload/image-0bbd0842-c66b-448a-813e-e29d285a469e.jpg)
reto realizado ```js -- Tu código aquí 👇 SELECT courses.id, courses.name, teachers.id AS teacher_id, teachers.name AS teacher_name FROM courses INNER JOIN teachers ON courses.teacher_id = teachers.id; ```
reto realizado -- Tu código aquí 👇 SELECT   courses.id,  courses.name,  teachers.id AS teacher\_id,  teachers.name AS teacher\_nameFROM coursesINNER JOIN teachers ON courses.teacher\_id = teachers.id;```js -- Tu código aquí 👇 SELECT courses.id, courses.name, teachers.id AS teacher_id, teachers.name AS teacher_name FROM courses INNER JOIN teachers ON courses.teacher_id = teachers.id; ```
![](https://static.platzi.com/media/user_upload/image-c0d4a049-ee8f-4adf-844c-01ad516a88ed.jpg)
consejos: 1.borar los SELECT que la prueba te da 2:no se preocupe si en la consola le sale algo en rojo ![](https://static.platzi.com/media/user_upload/image-0a476a65-19e9-4a1e-ab43-c66c3a647c48.jpg)
![](https://static.platzi.com/media/user_upload/image-7bf44abd-44a5-468a-a691-6e4a1ae12438.jpg)Caso flayo jjaajaja en el ultimo intento en consola se ve asi ![](https://static.platzi.com/media/user_upload/image-b498368a-bdf3-4e00-a1ed-b5cc2f0a6a62.jpg)
Deberian cambiar un poco la guia, y aclararlo un poco mejor, me pase corrigiendo para que solo sea, que las consultas de ejemplo no iban 🫠
Mi sol. con INNER JOIN ```js SELECT courses.id AS id, courses.name AS name, courses.teacher_id AS teacher_id, teachers.name AS teacher_name FROM courses INNER JOIN teachers ON courses.teacher_id = teachers.id; ```
![](https://static.platzi.com/media/user_upload/image-37163a14-db65-40de-92cf-fd006ae73219.jpg)
```js SELECT courses.id AS id, courses.name AS name, courses.teacher_id AS teacher_id, teachers.name AS teacher_name FROM courses INNER JOIN teachers ON courses.teacher_id = teachers.id; ```
![](https://static.platzi.com/media/user_upload/image-307e345c-07e6-484c-98f5-7d89a7745b46.jpg)
Es muy util usar aliases para hacer nuestro codigo más limpio y entendible para nosotros mismos
select a.id,a.name, a.teacher\_id,b.name as teacher\_name FROM courses AS ALEFT JOIN teachers AS BON a.teacher\_id = b.idwhere b.name is not null
creo haber entendido, pero al llegar aqui, ni siquiera me hace sentido lo que preguntan....
# 💡 Es decir que ¿Un `LEFT JOIN` con un `WHERE … IS NOT NULL;` equivale a un `INNER JOIN`? Enfasis en **NOT** NULL Tarde 30 min dandole vuelta a esa sentencia que dan como solución del reto. Es un poco anti intuitiva.
```css SELECT courses.id AS id, courses.name AS name, courses.teacher_id AS teacher_id, teachers.name AS teacher_name FROM courses LEFT JOIN teachers ON courses.teacher_id = teachers.id WHERE courses.teacher_id IS NOT NULL; ```SELECT  courses.id AS id,  courses.name AS name,  courses.teacher\_id AS teacher\_id,  teachers.name AS teacher\_nameFROM coursesLEFT JOIN teachers ON courses.teacher\_id = teachers.idWHERE courses.teacher\_id IS NOT NULL;
Lo hice por la unión de la derecha: SELECT courses.id AS id, courses.name AS name, teachers.id AS teacher\_id, teachers.name AS teacher\_name FROM courses RIGHT JOIN teachers ON courses.id = teachers.course\_id WHERE courses.teacher\_id IS NOT NULL;
![](https://static.platzi.com/media/user_upload/image-c2736512-c7bd-4a2a-9981-d98486f24a79.jpg)logrado :P
Perdimos una vida en el camino pero lo logramos!! 🦾 ![](https://static.platzi.com/media/user_upload/image-1eda623b-8302-49b8-b932-5ab9a8927713.jpg)
MI respuesta: `SELECT ` ` courses.id AS id, ` ` courses.name AS name,  ` `courses.teacher_id AS teacher_id,  teachers.name AS teacher_name` `FROM courses` `LEFT JOIN teachers ON courses.teacher_id = teachers.id` `WHERE courses.teacher_id IS NOT NULL;`
SOLUCION PARA VALIDAR EL RETO: ```js SELECT courses.id AS id, courses.name AS name, courses.teacher_id AS teacher_id, teachers.name AS teacher_name FROM courses LEFT JOIN teachers ON courses.teacher_id = teachers.id WHERE courses.teacher_id IS NOT NULL; ```
SELECT
  c.id AS id,
  c.name AS name,
  c.teacher_id AS teacher_id,
  t.name AS teacher_name
FROM courses AS c
	LEFT JOIN teachers AS t
	ON c.teacher_id = t.id
WHERE c.teacher_id IS NOT NULL;

Les propongo una alternativa por si no les gusta mucho escribir tanto “courses” y “teacher”

SELECT c.id, c.name, c.teacher_id, t.name AS teacher_name
FROM courses AS c
LEFT JOIN teachers AS t ON c.teacher_id = t.id
WHERE c.teacher_id IS NOT NULL;
En esta ocasión no pude completar el reto, no entendí bien como estaban conformadas las tablas (que título tenía cada columna). Luego vi la solución de otros y no funcionó, igual y ya cambiaron el Playground Voy a tener que seguir practicando para que me queden claros los conceptos
Falta aplicar Alias (renombrado del nombre de la tabla para acortar la consulta: SELECT courses.id as id, courses.name as name, teachers.id as teacher\_id, teachers.name as teacher\_name from courses inner join teachers on courses.teacher\_id = teachers.id; \=)
Algo enredado el enunciado, me faltó renombrar la salida, cúal será la diferencia entre:SELECT \* FROM courses INNER JOIN teachers ON courses.id = teachers.course\_idWHERE teacher\_id IS NOT NULL;SELECT  courses.id AS id,  courses.name AS name,  courses.teacher\_id AS teacher\_id,  teachers.name AS teacher\_nameFROM coursesLEFT JOIN teachers ON courses.teacher\_id = teachers.idWHERE courses.teacher\_id IS NOT NULL; ```js SELECT * FROM courses INNER JOIN teachers ON courses.id = teachers.course_id WHERE teacher_id IS NOT NULL; ```Y: ```js SELECT courses.id AS id, courses.name AS name, courses.teacher_id AS teacher_id, teachers.name AS teacher_name FROM courses LEFT JOIN teachers ON courses.teacher_id = teachers.id WHERE courses.teacher_id IS NOT NULL; ```Sin tener en cuenta el renombramiento... Obtengo la misma información.
![](https://static.platzi.com/media/user_upload/image-b08df2c1-c572-4fe4-9482-d653c82d1592.jpg)
![](https://static.platzi.com/media/user_upload/image-dc221b72-e287-44fa-a93b-cc5845e48086.jpg)
SELECT courses.id, courses.name, teacher_id, teachers.name AS teacher_name
FROM courses
  LEFT JOIN teachers ON courses.teacher_id = teachers.id
WHERE teacher_id IS NOT NULL;
![](https://static.platzi.com/media/user_upload/image-df4c3a0c-f934-4289-9770-c0bb198b7547.jpg)
SELECT courses.id AS id, courses.name AS name, courses.teacher\_id AS teacher\_id, teachers.name AS teacher\_name FROM courses INNER JOIN teachers ON courses.teacher\_id = teachers.id WHERE courses.teacher\_id IS NOT NULL;
![](https://static.platzi.com/media/user_upload/image-31911430-e146-4623-aee2-3e008715d01d.jpg) Los 2 selects que cargan por default devuelven error, me di cuenta luego de fallar. Pensé que mi query estaba mal.
![](https://static.platzi.com/media/user_upload/image-4fb8671e-49c2-43b7-8bf7-30f6196e775d.jpg)
Dejo mi consulta por si a alguien puede ayudar. ![](https://static.platzi.com/media/user_upload/image-d1085c9f-b6f3-454d-b14c-eb85a22637b7.jpg)![]()![]()
-- Tu código aquí 👇
SELECT
  courses.id AS id,
  courses.name AS name,
  courses.teacher_id AS teacher_id,
  teachers.name AS teacher_name
FROM
  courses
INNER JOIN
  teachers
ON
  courses.teacher_id = teachers.id
WHERE
  courses.teacher_id IS NOT NULL
```;
```js SELECT courses.id, courses.name, teacher_id,teachers.name AS teacher_name FROM courses LEFT JOIN teachers ON courses.id = teachers.course_id WHERE courses.teacher_id is not null; ```Yo lo hice asi
Completado ![](https://static.platzi.com/media/user_upload/imagen-ac37597d-934a-4490-854b-f494779f82a7.jpg)renombra los from a solo sus iniciales para mayor legibilidad

Es complicado de entender la guía, hay que leerla detenidamente y frase a frase comprenderlo y aplicarlo en consulta. Con la oración: ‘No tengas en cuenta si el profesor tiene curso asociado, únicamente si el curso tiene profesor asociado’

Entiendo que están solicitando INNER JOIN en lugar de buscar una condición, puesto que a estas alturas del curso aún no se nos ha dado detalle del WHERE.

En cuanto a AS, solo es necesario teacher_name para no confundir name (curso) name (profesor), para el resto de información por defecto el descriptivo de la tabla es único. Espero les sea de utilidad.

-- Tu código aquí 👇
select courses.id,
courses.name,
courses.teacher_id, 
teachers.name as teacher_name
FROM courses 
inner join teachers 
on courses.teacher_id = teachers.id;
SELECT
courses.id AS "ID Curso",
courses.name AS "Nombre curso",
courses.teacher_id AS "Teacher ID",
teachers.name AS "Nombre Profe"
FROM courses
LEFT JOIN teachers ON courses.teacher_id=teachers.id
WHERE courses.teacher_id IS NOT NULL;

Otra solución:

select courses.id as id_curso, courses.name as nombre_curso , teachers.id as id_profesor , teachers.name as nombre_profesor from courses LEFT JOIN teachers on courses.teacher_id = teachers.id where teachers.id = 8 or teachers.id = 16 or teachers.id = 30 or teachers.id = 1  group by courses.name;

Mi solución

select *
from teachers
INNER JOIN courses on teachers.id=courses.teacher_id;

select 
c.id as id.profesor
c.name as nombre_profesor
from courses c
left join teachers  t on c.id=t.course_id
WHERE teacher_id is NOT NULL;

Mi solucion, por si puede ayudar a alguien ✨

SELECT courses.id AS id, courses.name AS name, 
teachers.id AS teacher_id  , teachers.name AS teacher_name
FROM teachers 
	  JOIN courses
    ON teachers.course_id = courses.id AND 
    courses.teacher_id = teachers.id ;

Dificil de entender el enunciado… Está un poco enredado

Mi solución fue esta, aunque me la marca mal, tiene el mismo resultado.

SELECT c.id, c.name, c.teacher_id, t.name
FROM courses as c
INNER JOIN teachers as t
ON c.teacher_id = t.id;

Mi solución 😊

SELECT courses.id, 
courses.name, 
teachers.id AS teacher_id, 
teachers.name AS teacher_name 
FROM courses
INNER JOIN teachers 
ON courses.teacher_id = teachers.id;

Select
courses .id AS CodCurso,
courses .name AS NombreCurso,
teachers .id AS IdProfe,
teachers .name AS NombreProfe
from courses
left join teachers ON
courses. teacher_id = teachers. id
WHERE courses. teacher_id IS NOT null;

Hice el ejercicio con INNER JOIN en vez de LEFT JOIN y me da el mismo resultado, sólo que si utilizo INNER JOIN no pasa la prueba

.
.
.
.
.
.
.
.
.

SELECT courses.id AS id, 
       courses.name AS name,
       courses.teacher_id AS teacher_id,
       teachers.name AS teacher_name
FROM courses
JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;

Mi solucion

SELECT courses.id as id,
courses.name as name,
teachers.id as teacher_id,
teachers.name as teacher_name
FROM teachers 
LEFT JOIN courses
ON teachers.id = courses.teacher_id
WHERE teacher_id IS NOT NULL;

Hice una cosa bien extraña, pero funcionó jajajaj

SELECT 
  courses.id AS id,
  courses.name AS name,
  teachers.id AS teacher_id,
  teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL
UNION
SELECT 
  courses.id AS id,
  courses.name AS name,
  teachers.id AS teacher_id,
  teachers.name AS teacher_name
FROM courses
RIGHT JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;

La verdad está tan confusa la guia que prefiero aprender más y ya intentar mis querys con mis propios proyectos xd

37. Playground: FROM y LEFT JOIN en SQL

-- Tu código aquí 👇
SELECT courses.id AS id, courses.name AS name, courses.teacher_id AS teacher_id, teachers.name AS teacher_name
FROM courses
INNER JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;

Prueba superada

– Mi solución 👇

SELECT courses.id AS id,
courses.name AS name,
teachers.id AS teacher_id,
teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers 
ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;

Reutlizando alias teacher_id en la sentencia ON y WHERE.

SELECT
  courses.id,
  courses.name,
  courses.teacher_id AS teacher_id,
  teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers 
ON teacher_id = teachers.id
WHERE teacher_id IS NOT NULL;

Adjunto comparto solucion:
.
Ejecutando comandos:
.

.
Corriendo pruebas:
.

Esta fue mi solucion, con la menor cantidad de lineas
.
.
.
.
.
.
.
.

SELECT courses.id, courses.name, courses.teacher_id,  teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers ON courses.id = teachers.course_id
WHERE courses.teacher_id IS NOT NULL;

Mando solución👇
*
*
*
*
*
*
*
*
*
*
*
*
*
*

SELECT
  courses.id AS id,
  courses.name AS name,
  courses.teacher_id AS teacher_id,
  teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;

Hola, adjunto el desarrollo de la actividad.

Comparto mi codigo

SELECT c.id,c.name,c.teacher_id,t.name AS teacher_name
    FROM courses AS c
    LEFT JOIN teachers AS t ON c.id = t.course_id
    WHERE c.teacher_id IS NOT NULL;

Playground FROM y LEFT JOIN en SQL:

Mi solución:

.
.
.
.

SELECT 
courses.id, courses.name, courses.teacher_id, teachers.name as teacher_name  from courses
LEFT JOIN teachers ON teachers.id = courses.teacher_id
WHERE teacher_id is NOT NULL;

Mi solución
.
.
.
.
.

.
.

.

[<SELECT
  courses.id AS id,
  courses.name AS name,
  courses.teacher_id AS teacher_id,
  teachers.name AS teacher_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL;
> 

Solucion!

SELECT 
c.id as id,
c.name as name,
t.id as teacher_id,
t.name as teacher_name
FROM teachers t
JOIN courses c ON t.id = c.teacher_id;

Mi solución 😃

SELECT courses.id,
courses.name, 
teachers.id AS teacher_id,
teachers.name AS teacher_name 
FROM courses 
INNER JOIN teachers 
ON 
courses.teacher_id = teachers.id;

![](

SELECT
  courses.id AS id,
  courses.name AS name,
  teachers.id AS teacher_id,
  teachers.name AS teacher_name
FROM courses
INNER JOIN teachers
ON courses.teacher_id = teachers.id;
undefined