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

Utilizando la sentencia FROM

36/67
Recursos

Aportes 377

Preguntas 70

Ordenar por:

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

comparto scrips que pueden servir.

use platziblog;

-- todos los usuarios tengan o no  un post relacionado
 select*
 from usuarios as u
 left join posts as p
 on u.id = p.usuario_id;
 
-- todos los usuarios que no han hecho post
 select*
 from usuarios as u
 left join posts as p
 on u.id = p.usuario_id
 where p.usuario_id IS NULL;

-- todos los post esten o no asociados con un usuario
 select*
 from usuarios as u
 right join posts as p
 on u.id = p.usuario_id;
 
 -- los post que no estan asociados con un usuario
 select*
 from usuarios as u
 right join posts as p
 on u.id = p.usuario_id
 where u.id is null;
 
 -- todos los usuarios que sí hayan hecho posts, con su respectivo post
  select*
 from usuarios as u
 inner join posts as p
 on u.id = p.usuario_id;
 
 -- conjunto universo UNION
  select*
 from usuarios as u
 left join posts as p
 on u.id = p.usuario_id
 UNION
  select*
 from usuarios as u
 right join posts as p
 on u.id = p.usuario_id;
 
 -- los usuarios que no hayan hecho un post, junto con los post que no tiene usuario
   select*
 from usuarios as u
 left join posts as p
 on u.id = p.usuario_id
 where p.usuario_id is NULL
 UNION
  select*
 from usuarios as u
 right join posts as p
 on u.id = p.usuario_id
 where p.usuario_id is NULL;
 

La sentencia UNION elimina las filas repetidas.
La sentencia UNION ALL une completamente las 2 tablas.

Un código propio que hace un join entre usuarios, posts y categorias, mostrando justamente el nombre del usuario que escribió tal post y que categoría tiene ese mismos post 😊

select login, titulo, nombre_categoria from usuarios join posts on usuarios.id = posts.usuario_id join categorias on posts.categoria_id = categorias.id;

Debo admitir que me costo entender este tema de los join, me revolvia mucho, pero no hay nada que unos repasos y repeticiones de videos no lo solucionen xd y practicando claro

este profe es de lo mejor que vi en Platzi!

Recuerden que el post huérfano no nos va a aparecer en ningún ejercicio que hagamos aquí con el profe porque cuando confugramos la base de datos de hecho la configuramos para que no puediera existir un post sin usuario por eso a la hora de hacer el INSERT y llenar la base de datos sale un error! y por ende no lo tenemos!!!

Ahora si quieren saber como hice para saltar el hueco de la clase 28 déjenme saber acá abajo en las respuestas a este aporte

Perez Oso

De otro curso de platzi, Alberto Alcocer “Beco” escribio este articulo del tema joins corto y conciso.

https://platzi.com/clases/1272-sql-mysql/11100-tipos-de-join/

Acá les dejo ejemplos de todos los tipos de JOIN para MySQL incluyendo la forma de algunos que no existen en MySQL pero que pueden hacerse de otra manera como el FULL OTER JOIN. Los ejemplos son con las mismas tablas del ejercicio por lo que les debe funcionar con copiar y pegar:

--JOINS
-- INNER JOIN: Muestra todos los registros de la tabla usuario y posts únicamente que tengan relación.

SELECT *
FROM usuarios AS u
INNER JOIN posts AS p
ON u.id = p.usuario_id;

--LEFT JOIN: Muestra todos los registros de la tabla usuario sin importar que no tengan --registros en la tabla posts.

SELECT *
FROM usuarios AS u
LEFT JOIN posts AS p
ON u.id = p.usuario_id;

--LEFT OUTER JOIN: Muestra unicamente los registros que de la tabla usuarios que no tienen --relación o registros en la tabla posts.

SELECT *
FROM usuarios AS u
LEFT JOIN posts AS p
ON u.id = p.usuario_id
WHERE p.id IS NULL;

--LEFT JOIN con Subquery: Muestra todos los registros de la tabla resultante de “SELECT * --FROM usuarios WHERE id = 1” (que es todos los registros de la tabla usuarios de id = 1) --tengan o no tengan relación registros en la tabla posts.

SELECT *
FROM (SELECT * FROM usuarios WHERE id = 1) AS u
LEFT JOIN posts AS p
ON u.id = p.usuario_id;



--RIGHT JOIN: Muestra todos los registros de la tabla posts, sin importar que no tengan --registros en la tabla usuarios.

SELECT *
FROM usuarios AS u
RIGHT JOIN posts AS p
ON u.id = p.usuario_id;

--RIGHT OUTER JOIN: Muestra unicamente los registros de la tabla posts, que no tengan --relación o registros en la tabla usuarios.

SELECT *
FROM usuarios AS u
LEFT JOIN posts AS p
ON u.id = p.usuario_id
WHERE p.id IS NULL;

--FULL JOIN: Funciona como un FULL JOIN en MYSQL y muestra todos los resultados de --ambas tablas usuarios y posts tengan o no tengan registros entre sí.

SELECT *
FROM usuarios AS u
LEFT JOIN posts AS p
ON u.id = p.usuario_id

UNION

SELECT *
FROM usuarios AS u
RIGHT JOIN posts AS p
ON u.id = p.usuario_id;

--Verdadera versión de FULL JOIN en oracle y postgreSQL:

SELECT *
FROM usuarios AS u
FULL JOIN posts AS p
ON u.id = p.usuario_id;

--FULL OUTER JOIN: Funciona como un FULL OUTER JOIN y muestra todos los resultados --de ambas tablas usuarios y posts que no tengan registros entre sí.

SELECT *
FROM usuarios AS u
LEFT JOIN posts AS p
ON u.id = p.usuario_id
WHERE p.id IS NULL

UNION

SELECT *
FROM usuarios AS u
RIGHT JOIN posts AS p
ON u.id = p.usuario_id
WHERE u.id IS NULL;

--Verdadera versión de FULL OUTER JOIN en oracle y postgreSQL:

SELECT *
FROM usuarios AS u
FULL OUTER JOIN posts AS p
ON u.id = p.usuario_id
WHERE u.id IS NULL or p.usuario_id IS NULL;

Para mi base de datos uni tres tablas, las personas veganas, con los alimentos que consumen y ejercicios que práctican, así:

Hola buenas tardes !!! Dejo la captura de mi BD sobre una tienda de bicicletas y ejecutando algunas sentencias.

Excelente clase profe!!
Me ha quedado claro el tema de los JOINS

Si quieren entender mejor todo esto chequen el tema teoría de conjuntos del curso de Pensamiento Lógico. Ahí se explica más todo eso de los conjuntos en diagramas de Venn. 😄

Esta clase me despejo varias dudas de como funcionaba los join o como tenia que entenderlos.

Este es un select de mi proyecto personal el cual consiste en crear una BD de Paises, datos de este y su comida típica, para unir varias tablas como en mi caso que uní 4 basta con repetir la sentencia left y on y los alias también son muy útiles, y en el select le podemos decir que campos queremos ver y con que nombre.

Obtener los tipos de instrumentos de cada pieza musical.

SELECT nombre AS NOMBRE_PIEZA, nombre_tipo AS TIPO_INSTRUMENTO
FROM PIEZAS_INSTRUMENTOS
JOIN PIEZAS ON piezas_instrumentos.pieza_id = PIEZAS.ID
JOIN instrumentos ON PIEZAS_INSTRUMENTOS.INSTRUMENTO_ID = INSTRUMENTOS.ID
JOIN tiposinstrumento ON instrumentos.tipo_id = tiposinstrumento.ID;

Para que la BD quede predeterminada o por defecto se hace lo siguiente.

  • Click derecho en la BD.

  • Click en la opción Set as Default Schema.

Se inicia un nivel complejo de consultas pero con la explicación gráfica de la clase anterior y la explicación con scripts en ésta clase quedo muy claro el tema. Gracias.

  • Para la unión hay un tipo de JOIN que tienen algunos manejadores y otros no.
  • MySQL no maneja FULL OUTER JOIN que es el que trae la unión, por lo tanto, para traer los datos de ambos lados se hace un JOIN compuesto: LEFT JOIN + UNION + RIGHT JOIN

Las consultas utlizadas:

SELECT *
FROM alumnos a
INNER JOIN asignatura b on a.codigo_alu = b.codigo_alu;

SELECT *
FROM alumnos a
LEFT JOIN asignatura b on a.codigo_alu = b.codigo_alu;

SELECT *
FROM alumnos a
RIGHT JOIN asignatura b on a.codigo_alu = b.codigo_alu;

Creo que falto explicar el NATURAL JOIN. Igual, excelent explicacion. Mucho mejor que en la universidad!

lo conseguiii…

@10:27
la consulta con UNION
Solo me funciona en windows después de agregar paréntesis

(SELECT * 
FROM usuarios
	LEFT JOIN posts on usuarios.id = posts.usuario_id)
UNION
(SELECT * 
FROM usuarios
	RIGHT JOIN posts ON usuarios.id = posts.usuario_id);

venga los Windows haters! quiero a Windows como quiero a mi padre abusivo

Buenos días Comparto alguno de los Querys realizados, en el proyecto personal del curso.

Reto completado.

SELECT posts.titulo,usuarios.login,categorias.categoria 
FROM posts 
INNER JOIN usuarios ON posts.usuarios_id = usuarios.id 
INNER JOIN categorias ON posts.categorias_id = categorias.id;

Seleccione los posts que tienen asignado algun usuario y su respectiva categoria.

Excelente, ahora sabemos las distintas formas para utilizar los Join, pensaba que la forma para traer los datos sin tomar la intersección era escribiendo algo adicional al Join, pero resulta que tocaba combinarlo con el where para lograr el efecto deseado.

Con respecto a una de las consultas de mi base datos dejo la siguiente:

SELECT *
FROM articulos AS tbArti
INNER JOIN solicitudes AS tbSoli ON tbArti.Id_articulo = tbSoli.Id_articulo

Esta permite ver los artículos que se encuentran en las solicitudes y también le da un apodo a cada tabla para usarlas más fácilmente en futuras consultas.

	SELECT U.NickName, P.Titulo, count(C.Cometarios_Id) 'No.Comentarios'
	 FROM Usuarios U
	  LEFT JOIN Posts P
	   ON U.Usuarios_iD = P.Usuarios_Id
	  LEFT JOIN Cometarios C
	   ON C.posts_Id = P.posts_Id
	GROUP BY U.NickName, P.Titulo

Si solo usas JOIN para hacer consultas de bases de datos con cardinalidad de muchos a muchos ya que hay una tabla que une a otras dos.
/*

/*

SELECT	usuario_id AS id, nickname, fecha_publicacion AS fecha, estatus, nombre_categoria AS Categoria
FROM usuarios
INNER JOIN posts ON usuarios.id=posts.usuario_id
INNER JOIN categorias ON posts.categoria_id=categorias.id
WHERE	estatus = 'Activo'  AND categoria_id = 2;

![](

Yo hice esta sentencia para poder ver el autor, categoría y etiquetas de cada post:

SELECT usuarios.nickname as Autor, posts.titulo AS Título, categorias.nombre_categoria AS Categoría, etiquetas.nombre_etiqueta As Etiqueta
FROM	usuarios
	JOIN posts ON usuarios.id = posts.usuario_id
    JOIN categorias ON posts.categoria_id = categorias.id
	JOIN posts_etiquetas ON posts.id = posts_etiquetas.post_id
    JOIN etiquetas ON posts_etiquetas.etiqueta_id = etiquetas.id

Y resulta esto:

La sentencia UNION en MySQL se utiliza para combinar los resultados de varias sentencias SELECT en un único conjunto de resultados.

Me costó un poco entender los JOIN, pero una vez lo logré, se sintió una satisfacción tan grande ♥

Full Outer Join fue mi favorito!!!
SELECT * FROM usuarios
LEFT JOIN posts ON usuarios.id= posts.usuario_id
WHERE posts.usuario_id IS NULL
UNION
SELECT * FROM usuarios
RIGHT JOIN posts ON usuarios.id= posts.usuario_id
WHERE posts.usuario_id IS NULL;

Mi petición era obtener los posts con el nickname de los usuarios que habían escrito el post y la categoría a que pertenece este post y mi código mi quedo así

SELECT nickname, titulo, categoria
FROM usuarios
	INNER JOIN 
(SELECT usuario_id, titulo, nombre as categoria
FROM posts
	RIGHT JOIN categorias ON posts.categoria_id = categorias.id) AS post ON usuarios.id = post.usuario_id
;

Algunos resultados 😉:

nickname titulo categoria
‘Lau’ ‘Ganador del premio Nobel por trabajo en genética’ ‘Ciencia’
‘Moni’ ‘Se descubre nueva partícula del modelo estandar’ ‘Ciencia’
‘Moni’ ‘Químicos descubren nanomaterial’ ‘Ciencia’
‘Lau’ ‘Se descubre la unión entre astrofísica y fisica cuántica’ ‘Ciencia’
‘Israel’ ‘Se presenta el nuevo teléfono móvil en evento’ ‘Tecnología’
‘Moni’ ‘Tenemos un nuevo auto inteligente’ ‘Tecnología’
‘Israel’ ‘Se mejora la conducción autónoma de vehículos’ ‘Tecnología’
‘Israel’ ‘Fuccia OS sacude al mundo’ ‘Tecnología’

.
.
.

Voy en la mitad de un curso de fundamentos de BD y siento que me explota la cabeza con lo que he aprendido hasta ahora… mucho más de lo que aprendí en la universidad y emocionado por lo que queda

FROM: Es una sentencia que nos permite ver la información separada en diferentes tablas y nos permite traerla y unirla nuevamente para presentarla como si fuera una sola tabla. Dentro del from tenemos distintas opciones para mostrar cual es la prioridad, si la tabla a o la b, o solo las que tengan en común.

SELECT *
FROM futbolistas
INNER JOIN equipos ON futbolistas.id_equipo = equipos.id_equipos
INNER JOIN nacionalidad ON futbolistas.id_nacionalidad = nacionalidad.id_nacionalidad

Con esto uní los datos de las 3 tablas.

SELECT *
FROM usuarios
LEFT JOIN post ON usuarios.id = post.usuario_id
WHERE post.usuario_id IS NULL
UNION
SELECT *
FROM usuarios
RIGHT JOIN post ON usuarios.id = post.usuario_id
WHERE post.usuario_id IS NULL;

Comparto el código de la Query que une la tabla posts con la tabla etiqueta a través de la tabla posts_etiquetas

select posts.id, posts.titulo, posts.fecha_publicacion, etiquetas.nombre_etiqueta
from posts
	left join posts_etiquetas on posts.id = posts_etiquetas.post_id
    left join etiquetas on etiquetas.id = posts_etiquetas.etiqueta_id;```

Aquí está mi proyecto haciendo un JOIN LEFT con 3 tablas y usando el SELECT para mostrar la información más relevante.

Un dato curioso es que si se utiliza la sentencia where en la tabla opuesta a la que apunta el left join o right join, se convierte automáticamente se en un inner join

Ejemplo:

	SELECT P.Titulo, C.Cometarios_Id
	 FROM Posts P	   
	  LEFT JOIN Cometarios C
	   ON C.posts_Id = P.posts_Id
	WHERE C.Cometarios_Id is not null

USE SkySolutionsCRM
SELECT invoiceRouteId AS RUTA
,[invoiceDate] AS FECHA_FACTURACION
,[invoiceID] AS FACTURA
,invoiceTotalToPayCalculated AS TOTAL_FACTURA
, [custName] AS NAME
FROM [SkySolutionsCRM].[dbo].[tblInvoices]
right JOIN customer_discount ON tblInvoices.custID=customer_discount.custID
WHERE invoiceDate='2020-01-06’
order by invoiceRouteId,[custName]

SELECT *
FROM TABLA_LEFT
	RIGHT/LEFT JOIN TABLA_RIGHT 
	ON TABLA_LEFT.PRIMARY_KEY = TABLA_RIGHT.FOREIGN_KEY
WHERE
CONDICION;

Comparto mi consulta para saber de que categoría son es cada post

SELECT post.titulo,post.categoria_id  ,categorias.nombre_categoria,categorias.id
FROM categorias
INNER JOIN post ON  categorias.id = post.categoria_id 
;```

![Captura.PNG](https://static.platzi.com/media/user_upload/Captura-6eb68bc6-8af9-44f7-870c-cfec99527ab4.jpg)

Un comentario
en el join de diferencia simetrica se usa el posts.usuario_id dentro de la condicion where. Pero que pasa si el usuario_id tiene un valor que no existe en la tabla usuario? por ejemplo usuario_id = 400, tendria que cambiar el campo a validar dentro de la condicion where no??
seria where usuario.id is null

Left Join: Seleccione todos los registros de la Tabla A, junto con los registros de la Tabla B para los cuales se cumple la condición de unión (si es que se cumple).

Este link podría ser útil para el ejercicio que nos propone el profesor, basado en ese blogpost hice lo siguiente, traje el título de cada post y el nombre de su etiqueta, puede sonar fácil, pero como sabemos posts y etiquetas están unidos por una tabla intermedia, entonces hay que unir tres tablas, acá el código:

SELECT 
	posts.titulo as 'Título', etiquetas.nombre as 'Tag'
FROM posts
JOIN posts_etiquetas 
	ON posts.id = posts_etiquetas.post_id
JOIN etiquetas
	ON etiquetas.id = posts_etiquetas.etiqueta_id;

Primero se hace el JOIN de posts con posts_etiquetas, para obtener el id del post que está relacionado con una etiqueta, luego, se hace el siguiente JOIN con la tabla etiquetas para que las etiquetas conectadas con la tabla intermedia puedan ser mostradas.

Espero haber sido claro y también que esto sea de ayuda para alguien 😄

LEFT JOIN usuarios y posts

USE platzi blog;

SELECT *
FROM  usuarios
	LEFT JOIN posts ON usuarios.id = posts.usuario_id;

left join intersección

USE platziblog;

SELECT *
FROM  usuarios
	LEFT JOIN posts ON usuarios.id = posts.usuario_id
    WHERE posts.usuario_id IS NULL;

Rigth join

USE platziblog;

SELECT *
FROM  usuarios
	RIGHT JOIN posts ON usuarios.id = posts.usuario_id;

raigth join intersección

USE platziblog;

SELECT *
FROM  usuarios
	RIGHT JOIN posts ON usuarios.id = posts.usuario_id
    WHERE posts.usuario_id IS NULL;

interseccion

USE platziblog;

SELECT *
FROM  usuarios
	INNER JOIN posts ON usuarios.id = posts.usuario_id;

unión

USE platziblog;

SELECT *
FROM  usuarios
	LEFT JOIN posts ON usuarios.id = posts.usuario_id
    UNION
    select *
    FROM usuarios
    RIGHT JOIN posts ON usuarios.id = posts.usuario_id;

diferencia simetrica

USE platziblog;

SELECT *
FROM  usuarios
	LEFT JOIN posts ON usuarios.id = posts.usuario_id
    WHERE posts.usuario_id IS NULL
    UNION
    select *
    FROM usuarios
    RIGHT JOIN posts ON usuarios.id = posts.usuario_id
    WHERE posts.usuario_id IS NULL;

gran explicacion! aclaro algunas dudas y ayudara a aprovechar mejor la logica de negocio de las aplicaciones!

por si les sirve

algunos ejemplos

Esto es verdaderamente útil, es el pan de cada día de los programadores

Muestro otra de mis consultas, siguiendo este tutorial…

UNION: Une todas las tuplas distintas.
UNION ALL: Une todas las tuplas sin distinción.

muy bueno el curso me ha encantando, para practicar scripts con mysql encontré este video y asi podemos seguir practicando. <https://youtu.be/ichTBBcLLPg?si=CxXCTayu0_ZRP0Ad>

Hola compañeros!

Les comparto mis apuntes sobre este tema

Increíble que hace 5 meses abandoné este curso

Quiza a alguien le sirva pero no me funcionó la consulta de la intersección

SELECT	*
FROM	usuarios
	LEFT JOIN posts ON usuarios.id = posts.usuario_id
WHERE posts.usuario_id IS NULL
UNION
SELECT	*
FROM	usuarios
	RIGHT JOIN posts ON usuarios.id = posts.usuario_id
WHERE usuarios.id IS NULL;

Sin estan tomando el curso con versiones nuevas de SQL y la sintaxis no sirve, puede corregirla por medio de la siguiente pag
https://www.eversql.com/sql-syntax-check-validator/, seleccionando la versión y el motor BD

Este es un CheatSheet bien completo para el uso de los JOINS 😃
Descargar CheatSheet

Select -> Determines which columns to include in the query’s result set
From -> Identifies the tables from which to retrieve data and how the tables should be joined
Where - > Filters out unwanted data
Group by -> Used to group rows together by common column values
Having -> Filters out unwanted groups
Order by -> Sorts the rows of the final result set by one or more columns

— Mi aporte, selección de diferentes columnas de tres diferentes tablas
— Me guíe de unos comentarios de otros estudiantes.
– Mi proyecto es es una base de datos de la formula 1 - 2022.

<code> 
select * from formula1.`conductores`
left join `equipos` ON `conductores`.equipo_id = `equipos`.id
union 
select * from formula1.`conductores`
right join `equipos` ON `conductores`.equipo_id = `equipos`.id
;

select equipos.id, nombre_equipo, nombre, apellido, nombre_monoplaza
from formula1.`equipos` 
join `conductores` on `equipos`.id = `conductores`.equipo_id
join `monoplazas` on `conductores`.monoplaza_id = `monoplazas`.id;
;

select conductores.id, nombre, apellido, nombre_monoplaza
from `conductores`
join `monoplazas`on `conductores`.monoplaza_id = `monoplazas`.id;

select nombre, apellido, nombre_monoplaza, nombre_equipo, nacionalidad
from `conductores`
join `monoplazas` on `conductores`.monoplaza_id = `monoplazas`.id
join `equipos` on `monoplazas`.equipo_id = `equipos`.id;

Debo decir que esta fue una de mis clases favoritas, como siempre el profesor lo explico de manera muy comprensible 😃
Estuve practicando con todas las sentencias.

les dejo este link , esuna manera mas visual de ver los resultados de los Joins

https://github.com/gerzahim/-fundaments-BD/blob/main/SQL_joins.sql

Quiero dejar este aportee! tal vez alguien lo conozca, tal ves no… Pero asi como le asignamos alias a las columnas, lo mismo podemos hacer con las tablas, tal cual la imagen, a usuarios lo llamo u y posts p y trae la misma info

Creo que esta imagen resumen mucho la clase de FROM

Estos son una consultas que hecho en mi proyecto.

- consulta de empleo por periodo
SELECT	fecha_reporte
		,num_admin_temp
        ,num_de_admin_permt
        ,num_temp_por_empresa
        ,num_aprendiz
FROM periodos
LEFT JOIN admin_temporal ON periodos.id = admin_temporal.id_periodo
LEFT JOIN admin_permanente ON periodos.id = admin_permanente.id_periodo
LEFT JOIN admin_temp_por_empresa ON periodos.id = admin_temp_por_empresa.id_periodo
LEFT JOIN admin_aprendiz ON periodos.id = admin_aprendiz.id_periodo;

-- seleccion de empresas con cero produccion por cada periodo
SELECT *
FROM periodos 
LEFT JOIN produccion ON periodos.id = produccion.id_perido
WHERE produccion.produccion = 0 ;

Se me ocurre esta para hacer un reporte de cuanto demoraron en promedio los envios de las ordenes.

Select date_shipped, date_arrival FROM ecommerce.shipments
INNER JOIN ecommerce.orders ON shipments.order_id=orders.id
WHERE ecommerce.orders.id = 'Done';

Lectura del primer comando de la clase:

Selecciona todos los datos (SELECT *) de la tabla usuarios (FROM) y en la parte izquierda de la consulta añade la tabla post (LEFT JOIN) y la unimos con el iD de la tabla usuario (ON usuarios id) para que se relacione con el ID de la tabla post (= posts usuario_id).

El resultado de la sentencia son los usuarios que tienen o no post publicados.

Ejemplo de SELECT con la base de datos del profe:

FROM permite saber la información de diferentes tablas, trayéndola y uniéndola en una sola tabla. Haciendo uso de LEFT, RIGHT, INNER o diferencia, para filtrar la información según la necesidad final.

Buenas noches,
Para que nos retorne resultado al buscar el post o"huerfano" se de hacer un alter a la tabla posts permitiendo que los camposusuario_id,categoria_id sean NULL y así obtener el resultado que el profe expresa en la clase. Saludos

Recordemos que en ocasiones los datos que cargamos a partir de lo compartido por el profesor no siempre van a cargar.
La razón es simple: Cuando creamos nuestras tablas pusimos algunos constraints, si alguno de esos era not null, no podrá crearse un post sin ningún usuario asociado y saltará un error.

FUN FACT 😎

  1. escribe con minúculas aunque pueda parecer mala practica también funciona!

https://sql-playground.com/#
para hacer ejercicios

Mi ejemplo usando tres LEFT JOIN para traer datos de una tercera tabla y unirla a una 2da tabla.
Y todo con mi base datos de One Piece 🤠🏴‍☠️

select personajes.id, nombre as "Nombre" , nombre_fruta as "Fruta del Diablo", tipos_frutas.tipo as "Tipo de Fruta", ocupacion as "Ocupación"
from one_piece.personajes
left join one_piece.frutas on personajes.fruta_id = frutas.id
left join one_piece.tipos_frutas on frutas.tipo_fruta_id = tipos_frutas.id
left join one_piece.ocupaciones on personajes.ocupacion_id = ocupaciones.id;

Recuerden que si tenemos duplicados al unir dos tablas el UNION nos elimina los duplicados. Si queremos preservarlos podemos usar el UNION ALL

les comparto la consulta que realice la cual muestra el id, titulo, usuario, categoria, fecha de publicacion de los post que publico el usuario con nombre israel ordenados por id del post

select id_post as id, titulo, nickname as usuario, nom_categoria as categoria, fecha_publicacion
from post as p
inner join usuarios as u on p.id_usuarios = u.id_usuarios
inner join categorias as c on p.categorias_id = c.id
where u.nickname = 'israel'
order by id_post;

;

Armé una consulta uniendo 4 tablas de mi proyecto y funcionó 😄

select d.sales_id, a.first_name, a.last_name, b.razon_social, c.marca, c.modelo, c.costo_venta, c.ganancia
from sales d
join asesor a on a.asesor_id = d.asesor_id
join customer_corporate b on b.corporate_id = d.corporate_id
join product c on c.product_id = d.product_id
where sales_id= ‘1’ or sales_id=‘2’ or sales_id=‘3’

Un aporte que note que el profe no dijo, que para hacer el unión las tablas tienen que tener los mismos campo en su mismo orden y tipo de datos deben de coincidir para que se lleve a acabo.

UNION selecciona solo registros distintos, por eso es que en el ejemplo da la totalidad de los conjuntos, para aceptar duplicados se utiliza UNION ALL

Sentencia final

SELECT *
FROM platziblog.usuarios AS u
LEFT JOIN platziblog.posts AS p
ON u.id = p.usuario_id
WHERE p.usuario_id IS NULL
UNION
SELECT *
FROM platziblog.usuarios AS u
RIGHT JOIN platziblog.posts AS p
ON u.id = p.usuario_id
WHERE p.usuario_id IS NULL;

Explicar la clausula JOIN después de haber aplicado las reglas de Codd y obtener nulos o tuplas huerfánas es ambiguo, para un público nuevo violar la integridad de los datos significa un diseño que no va por buen camino!

-- get all the people with and without posts
 SELECT *
 FROM people
 LEFT JOIN posts
 ON people.id = posts_id
 
-- get all the people who does not have any post
 SELECT *
 FROM people
 LEFT JOIN posts
 on people.id = posts.person_id
 WHERE p.usuario_id IS NULL;

-- get all the post with and without user
 SELECT *
 FROM people
 RIGHT JOIN posts
 ON people.id = posts_id
 
 -- get all the posts without user
 SELECT *
 FROM people
 RIGHT JOIN posts
 on people.id = posts.person_id
 WHERE people.id is null;
 
 -- get all the user whit post or and post whit user
 -- this is the most used query
  SELECT *
 FROM people
 INNER JOIN posts
 ON people.id = posts_id
 
 -- get all the posts and users(UNION)
 -- FULL OUTER JOIN is a similar option
 -- but in MySQL is not supported
  SELECT *
 FROM people
 LEFT JOIN posts
 on people.id = posts.person_id
 UNION
  SELECT *
 FROM people
 RIGHT JOIN posts
 ON people.id = posts_id
 -- UNION deletes the deplicate rows
 -- UNION ALL joins the tables completely
 
 -- get all the users whitout posts and posts whitout user
   SELECT *
 FROM people
 LEFT JOIN posts
 on people.id = posts.person_id
 WHERE p.usuario_id is NULL
 UNION
  SELECT *
 FROM people
 RIGHT JOIN posts
 on people.id = posts.person_id
 WHERE p.usuario_id is NULL;

Mis Notas:

-- Trae a todos los usuarios tengan y no tengan posts
SELECT *
FROM usuarios
    LEFT JOIN posts ON usuarios.id_usuario = posts.id_usuario;

-- Trae a sólo los usuarios que no tengan posts
SELECT *
FROM usuarios
    LEFT JOIN posts ON usuarios.id_usuario = posts.id_usuario
WHERE posts.id_usuario IS NULL;

-- Trae a todos los post que tengan y no tengan asociado un usuario
SELECT *
FROM usuarios
    RIGHT JOIN posts ON usuarios.id_usuario = posts.id_usuario;

-- Trae a sólo los posts que no tengan usuario
SELECT *
FROM usuarios
    RIGHT JOIN posts ON usuarios.id_usuario = posts.id_usuario
WHERE posts.id_usuario IS NULL;

-- Trae a todos los posts que tengan un usuario o todos los usuarios que tengan posts (Intercepción)
SELECT *
FROM usuarios
    INNER JOIN posts ON usuarios.id_usuario = posts.id_usuario;

-- Trae a todos los usuarios tengan y no tengan posts y todos los post que tengan o no un usuario asociado (Unión)
SELECT *
FROM usuarios
    LEFT JOIN posts ON usuarios.id_usuario = posts.id_usuario
UNION
SELECT *
FROM usuarios
    RIGHT JOIN posts ON usuarios.id_usuario = posts.id_usuario

-- Trae a todos los usuarios no tengan posts y todos los post que no un usuario asociado (Diferencia Simétrica)
SELECT *
FROM usuarios
    LEFT JOIN posts ON usuarios.id_usuario = posts.id_usuario
WHERE posts.id_usuario IS NULL
UNION
SELECT *
FROM usuarios
    RIGHT JOIN posts ON usuarios.id_usuario = posts.id_usuario
WHERE posts.id_usuario IS NULL;
-- Ejemplo de FROM JOIN con tres Tablas (Todos los usuarios tengan o no posts y con o sin categorias)
SELECT login, nickname, email, titulo, estatus, nombre_categoria
FROM usuarios
    LEFT JOIN posts ON usuarios.id_usuario = posts.id_usuario
    LEFT JOIN categorias on  categorias.id_categoria = posts.id_categoria;

Vale la pena mencionar que en el código también puede colocar la condición WHERE posts.usuarios_id IS NOT NULL, en este caso estarías excluyendo los usuarios que no tiene un post, y los posts que no tienen un usuario

Asi logre juntar los usuarios con los posts y los post con los comentarios.

select usuarios.nickname as 'Username', posts.titulo as 'Encabezado',posts.fecha_publicacion as 'date', comentarios.cuerpo
from posts
inner join usuarios on usuarios.id = posts.usuario_id
inner join comentarios on posts.id=comentarios.post_id;

Este es mi consulta de varias tablas, problema: la columna id se llama igual en tres de las tablas con las que se hace el join y se inserta como un registro en vez de como una columna, me quedo esto de tarea para corregir.

SELECT * FROM 
autores 
inner join nacionalidades on autores.nacionalidad_id = nacionalidades.id
UNION
SELECT * FROM
autores
inner join profesiones on autores.profesion_id = profesiones.id
UNION
SELECT * FROM
autores
left join universidades on autores.universidad_id = universidades.id

resultado
__

– a que casa productora pertenece cada CEO (quiero nombre completo, correo y telefono y el nombre de la casa productora)?

SELECT ceo_musical_groups.name, ceo_musical_groups.last_name, ceo_musical_groups.email, ceo_musical_groups.cellphone, producer_houses.name AS producer_house_name
FROM registers_to_ph
INNER JOIN ceo_musical_groups ON ceo_musical_groups.id_ceo = registers_to_ph.id_ceo_fk
INNER JOIN producer_houses ON producer_houses.id_producer_house = registers_to_ph.id_producer_house_fk;

Pues probé a unir tres tablas con JOIN y pues aprendí a hacerlo.
Con mi proyecto sobre autos.
Logré unir las tablas: motores, fabricante_autos y vehiculos.

Query:

SELECT fabricante_autos.nombre AS Marca ,vehiculos.nombre AS Modelo, vehiculos.modelo AS Anio, motores.nombre AS Motor, motores.potencia_hp AS 'Potencia(Hp)'
FROM vehiculos
INNER JOIN fabricante_autos ON vehiculos.fabricante_auto_id = fabricante_autos.fabricante_id
INNER JOIN motores ON vehiculos.motor_id = motores.id;

Resultado:

No se si solo es persepción mia, no sabia nada de BD, y creia que era un tema compicado, pero con este curo y lo bien que enseña el profe veo que es algo sencillo y a la vez interesante.

Esta clase me ha permitido entender correctamente la diferencia que existe entre cada JOIN.
Si bien algunos de ellos no se encuentran disponibles de forma natural en algunos RDBMS, sus pollyfils los entendí a la perfección.

Debería enseñarse el método insert y también seria genial aprender a importar datos desde una tabla de excel por ejemplo

Muy Buena Lección !!!