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 WHERE nulo y no nulo

39/67
Recursos

El valor nulo en una tabla generalmente es su valor por defecto cuando nadie le asignó algo diferente. La sintaxis para hacer búsquedas de datos nulos es IS NULL. La sintaxis para buscar datos que no son nulos es IS NOT NULL

Aportes 223

Preguntas 32

Ordenar por:

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

Si tu intensión es comparar multiples valores en una misma columna (OR anidado), lo recomendable es usar el operador IN

SELECT * FROM libros WHERE categorias IN ("Informática","Inglés","Diseño");

Si un query contiene muchas condiciones encadenadas por diferentes operadores lógicos, es importante establecer la prioridad de su evaluación mediante el uso de paréntesis

SELECT * FROM posts WHERE 
titulo like "%se%" 
AND 
(id < 60 OR estatus = 'inactivo')

es diferente que

SELECT * FROM posts WHERE 
titulo like "%se%" 
AND 
id < 60 
OR estatus = 'inactivo'

Como OR se evalúa después de AND con el uso de paréntesis indicamos que se evalúe antes.

Ahora un ejemplo con el operador lógico de negación NOT

SELECT * FROM posts WHERE
NOT estatus = 'activo'
AND
NOT id > 60
AND
NOT YEAR(fecha_publicacion) <> 2025;

NOT invierte el resultado de la condición. Todos los post cuyo estatus no sea activo (toma en cuenta inactivos), que su id no sea superior a 60 (toma todos los menores o iguales a 60) y que su año de publicación no sea diferente de 2025 (toma los de 2025).

Comparto estos archivos que contienen las sentencias para ingresar los Departamentos y Municipios de Colombia por si alguien los necesita.
.
Solo dan click en los archivos departamento.sql y municipio.sql , luego copian el codigo o lo adaptan a su necesidad.
👍
https://github.com/vafelu/departamentos-y-municipios-colombia-SQL

Un ejemplo con operador lógico O

SELECT * FROM libros WHERE
precio < 1000
OR
autor LIKE "%González%"
OR
editorial = "Anaya Multimedia"
OR
YEAR(fecha_publicacion) > 2016;

Basta con que una condición se cumpla (parte / todas) para que el registro forme parte del conjunto de resultados

OJO

El valor nulo no funciona como un valor vacío, funciona como un valor no existente.

El valor nulo significa que no hay nada en el campo mientras que el valor vacío significa que hay algo pero está vacío. Suena un poco contradictorio pero es una aclaración importante.

Apuntes:
NULL no corresponde a ningún valor en particular, sino a una “ausencia” de valor, por lo tanto un NOT NULL correspondería a que no hay una aparente ausencia, es decir, existe un valor así sea un 0. NULL no es igual a nada por lo que en SQL no se le puede asociar con el operador igual que, en vez de esto se le atribuye en un WHERE con un IS NULL. Para valores NOT NULL, también se aplica la misma sintaxis. Para agregar un criterio adicional con WHERE, se usa AND.

Dato Curioso e Innecesario

SABIAS QUE PUEDES ESCRIBIR LAS SENTENCIAS Y ATRIBUTOS DE INTERCALANDO MAYUSCULAS Y MINUSCULAS?

ALGO COMO:

SeLeCT *
fRoM post
wHeRe usuario_id Is nOt nUlL

MUY CHEVERE Y TODO PERO NO LO HAGAS
ESCRIBIR BIEN TU CODIGO DICE MUCHO DE TI
ADIOS 🍃

🗣NULL => Representa la ausencia de valor.
👀OJO: NULL es diferente de VACIO.

Este es mi primer contacto con bases de datos y para ser sincero, tenía más temor antes de comenzar. Es posible!

El valor nulo en una tabla generalmente es su valor por defecto cuando nadie le asignó algo diferente. La sintaxis para hacer búsquedas de datos nulos es IS NULL. La sintaxis para buscar datos que no son nulos es IS NOT NULL
.
Ejemplos:
.
SELECT *
FROM posts
WHERE usuario_id IS NULL;
.
El AND en el WHERE nos permite unir Criterios en nuestra busqueda
.
Ejemplo:
SELECT *
FROM posts
WHERE usuario_id IS NOT NULL
AND estatus = 'activo’
AND id < 20
AND categoria_id = 2
AND YEAR(fecha_publicacion)=‘2025’;

por si algo, con ctrl + enter se ejecutan los comandos 😃

Para saber que usuarios publicaron posts de categoria “Deportes”.

select *
from usuarios as u
inner join posts as p
on u.id = p.usuario_id

inner join categorias as c
on c.id = p.categoria_id
where c.nombre_categoria = 'Deportes'
;

No esto yseguro si esto le sirva a alguien, pero queria profundizar mas acerca de las funciones para trabajar con tiempo, encontre ese recurso que me parecio bueno:

https://database.guide/6-functions-to-get-the-day-month-and-year-from-a-date-in-sql-server/

Enjoy 😃

Es una base de datos para una librería

Que gracioso, jajaja…

Veo que el profe en algunos casos usa indentación, esto es totalmente necesario? o es la costumbre al programar también en otros lenguajes en los que es obligatorio?

SELECT *
FROM post
WHERE usuario_id IS NOT NULL
AND estatus = 'activo’
AND id < 50
AND categoria_id = 2
AND YEAR(fecha_publicacion) = ‘2025’;

Un valor null si es del tipo int no es igual a 0.
En este enlace hay mas informaciom

Usando la base de datos Sakila:

Saludos.

WHERE IS NULL y WHERE IS NOT NULL, permite filtrar por campos en una base de datos que contengan ya sea un valor nulo o no nulo, pero aparte de esto, con AND se puede filtrar como tanto se requiera a profundidad dentro de la misma, hasta llegar al dato deseado.

Pregunta, en el minuto 6:59 el profesor pone:
categoria_id = 2

Si anterior al WHERE hice un FROM, en el cual uni la tabla post con la tabla categorias ¿Podría poner poner algo cómo categoria_id=‘tecnologia’?

SELECT 
		payments.amount AS monto, 
		payments.paymentDate AS diaPago, 
		customers.customerNumber AS numeroCLiente, 
		customers.customerName AS nombreCliente
FROM payments
	INNER JOIN customers ON payments.customerNumber = customers.customerNumber
WHERE payments.paymentDate BETWEEN '2004-01-01' AND '2004-12-31'
ORDER BY payments.paymentDate;

Increible el nivel de detalle de Platzi como para dedicarle una clase a este tema. ❤️ 😄

El valor nulo en una tabla generalmente es su valor por defecto cuando nadie le asignó algo diferente. La sintaxis para hacer búsquedas de datos nulos es IS NULL. La sintaxis para buscar datos que no son nulos es IS NOT NULL

Supongo que esta es la base de las tiendas ONLINE, cuando uno determina que desea un artículo entre X y Y valor o por color, entre otras variables. ¡SUPER, SUPER!

Mi pregunta fue : ¿en que año fueron los posts mas antiguos y quienes fueron esos usuarios?

"Rule 3 : Systematic treatment of null values: The DBMS must allow each field to remain null (or empty). Specifically, it must support a representation of “missing information and inapplicable information” that is systematic, distinct from all regular values (for example, “distinct from zero or any other number”, in the case of numeric values), and independent of data type. It is also implied that such representations must be manipulated by the DBMS in a systematic way."
Codd’s Rules for RDBMS

El siguiente código lo usé para saber qué materiales tengo que estén dentro de un rango de precios y que haya existencias en bodega:

La restricción NOT NULL sirve para especificar que una columna no acepta el valor NULL, es decir, que esa columna siempre tiene que tener algún valor, no puede estar vacía.

Muy buen curso, sencillo de entender. Muy bien explicado. Felicidades! 😃

Buenos Días.
Aquí les presento una consulta que realicé.

La verdad que con el AND se pueden hacer maravillas

NULL no corresponde a ningún valor en particular, sino a una “ausencia” de valor, por lo tanto un NOT NULL correspondería a que no hay una aparente ausencia, es decir, existe un valor así sea un 0. NULL no es igual a nada por lo que en SQL no se le puede asociar con el operador igual que, en vez de esto se le atribuye en un WHERE con un IS NULL. Para valores NOT NULL, también se aplica la misma sintaxis. Para agregar un criterio adicional con WHERE, se usa AND.

Dejo estos recursos para encontrar DATA SETS PUBLICOS.

Google Research Datasets
Datos abiertos del Gobierno de Colombia
Datos de muestra de Tableau
Data World
Data .gov
World Bank
GLassdoor

En este caso quise buscar los actores con genero femenino que esten en un elenco con un director llamado Evan o similar

Lo hice de la siguiente manera

SELECT elenco_actor.id, actor.nombre, actor.genero AS genero_actor, elenco.director
FROM elenco_actor 
inner join elenco  ON elenco_actor.id_elenco=elenco.id
inner join actor ON elenco_actor.id_actor=actor.id
WHERE elenco.director LIKE '%Evan%'
AND actor.genero="F";

el resultado fue

No se confundan. Null no es igual a 0.
Aqui podran encontrar mas informacion

Este es mi proyecto hasta el día de hoy. Ha sido un ENORME reto para mí. He invertido muchísimas horas en entender como funciona y he descubierto muchísimas cosas en el camino. La más importante, la integridad de los datos a la hora de importarlos a la BD.

Por fin funcionaaaa!!! Y puedo hacer queries en ella. Por ejemplo, hice la query que me diera cuales cartas de mi BD cuestan 2 manás verdes:

Luego le dije que me trajera todos las cartas legendarias:

Está súper chido todo esto!!! Ando muy emocionado jajajaja!!! Sin embargo, aun falta muchísimo. El curso dice que dura 8 horas, yo le he invertido como 30 y apenas voy aquí.

Les dejo mi diagrama ER y mis tablas. Cualquier sugerencia se los agradeceré.

Ejemplo de query en mi base de datos de boletos para viajar en bus.

SELECT boletos.id AS "Número de boleto",boletos.pago AS "Monto",clientes.nom_cliente AS "Nombre",
	   clientes.dni,itinerarios.bus_id AS "Número de bus",itinerarios.fecha_hora_embarque AS "Fecha de embarque",itinerarios.fecha_hora_llegada AS "Fecha de llegada"
FROM boletos
INNER JOIN clientes
ON boletos.cliente_id=clientes.id
INNER JOIN itinerarios
ON boletos.itinerario_id=itinerarios.id
WHERE boletos.pago=80.5
AND YEAR(itinerarios.fecha_hora_embarque)="2020";

select *
from suministros
where presentacion = 'kit’
and estado != 'caducado’
and cantidad_stock > 50
and precio < 200

select *
from post
where categoria_id IS NOT NULL
AND status = 'activo’
and categoria_id < 2
and year(fecha_publ) ='2023’
and month(fecha_publ) = ‘12’;

Publicaciones de Usuarios activos sobre ciencia en el año 2026:

SELECT * FROM platziblog2.posts
WHERE estatus = 'activo’
AND categoria_id = '1’
AND Year(fecha_publicacion) = ‘2026’;

SELECT * FROM posts WHERE
estatus = 'inactivo'
AND 
categoria_id = 3
AND
id > 50
AND
YEAR(fecha_publicacion) = 2024;
AND
usuario_id IS NOT NULL;


/*

buena explicacion!
★★★★★

Un contador de cuantas publicaciones se hicieron en el 2025 ![](https://static.platzi.com/media/user_upload/imagen-62563d63-170e-4a73-8aee-8a57c5579337.jpg)

El siguiente curso a tomar que vale la pena:
https://platzi.com/cursos/optimizacion-sql-server/

NULL es un valor especial para indicar la ausencia de valor.
“La ausencia de evidencia de algo no es evidencia de la ausencia de algo”.

Cual es la diferencia entre UNION y AND

Null es vació. No existe. No tiene valor, así lo entendí mejor.

Encontré esta web, dónde puedes ir practicando y aprendiendo a hacer consultas: https://www.sql-easy.com/

Para mi fue bastante útil!!

CONSULTA CLASE

ALGUNAS CONSULTA DEL PROYECTO

Recordemos que en WHERE el AND funciona igual que en programación: para que sea válido todas las sentencias deben cumplirse (true).

Hola 😄
Les voy a ser sincero, iba a publicar una pregunta sobre como hacer filtros con las etiquetas y antes de publicarla se me ocurrió una idea y no sé si alguien tenía la misma duda pero aquí esta el resultado 🚀

SELECT *
FROM posts
INNER JOIN posts_etiquetas ON posts.id = posts_etiquetas.post_id
INNER JOIN etiquetas ON etiquetas.id = posts_etiquetas.etiqueta_id
WHERE estatus IS NOT NULL
AND etiqueta_id = 9; 

Como hice la unión de tres tablas se puede consultar directamente con el nombre de la etiqueta era necesario, no lo era bastaba con unir dos tablas posts y posts_etiquetas, pero como quería saber el nombre de la categoría decidí que para mi caso era mejor unir las tres tablas.

SELECT *
FROM posts
INNER JOIN posts_etiquetas ON posts.id = posts_etiquetas.post_id
WHERE estatus IS NOT NULL
AND etiqueta_id = 9; 

Esta es otra forma valida y bueno les dejo una imagen para que vean como quedo mi consulta final filtrada por etiquetas😼

Excelente curso, siempre se me hacia un mundo cuando veía que en los queries usaban terminos que no sabia en donde colocar, ahora con la triada “SELECT - FROM-WHERE” con su variantes puedo realizar casi la mayoria de consultas a una base de datos 💚

He practicado la consulta usando la sentencia LIKE

SELECT *
FROM posts
WHERE usuario_id IS NOT NULL
AND id<60
AND titulo LIKE 'Se%'
;

Solucionada mi pregunta de la otra clase 😃

¿Cuántos usuarios tengo con correo electrónico dentro de mi db?

¿Cuántos usuarios tengo sin correo?

HOla
mi aporte a la clase, estoy estudiando una base de datos sobre el COVID-19 en el mundo.

![](

Les dejo mis QUERYS en mi proyecto 😃

SELECT *
FROM pedido
WHERE fecha_pedido BETWEEN '2019-01-01' AND '2019-03-01';
SELECT * 
FROM marca
WHERE descripcion LIKE '%sephora%';

Mis Outputs 😃

![](

![](

Utilizando la sentencia WHERE null y not null

Sentencia

select *
from post
where iduser is null;

Muestra los datos de los posts que en el campo de iduser tienen el valor null .

select *
from post
where iduser is not null;

Muestra los datos de los posts que en el campo de iduser no tienen el valor null , es decir, muestra los que tienen un usuario.

select *
from post
where iduser is not null
	and status = 'activo'
  and idpost < 50
  and idcategory = 2
;

Muestra los datos según condiciones que se unen mediante la palabra and para conseguir los datos mas exactos según la necesidad.

Tengo una pregunta: hice este SELECT como el del ejemplo solo que hice un LEFT JOIN entre post y categoria, pero hay informacion redundante como lo es el id de la categoria. Como podria en este ejemplo que coloco en la foto quitar esa columna?

la pregunta qu me hice fue ventas de sudaderas durante los meses de enero a abril y nombre de empleados que han hecho esas ventas.

select nombre_producto, unidades, total, fecha, nombres
from empleados
inner join ventas on empleados.id = ventas.empleados_id
where month (fecha) between 01 and 04
and nombre_producto like ‘%sudadera%’;

Vamos, vamos aprendiendo:

Aca selecciono todas las viviendas, uno la tabla que las contiene con la de subtipos de viviendas y con la de ciudades (donde estan las viviendas). Filtro aquellas que tienen mas de 100 metros cuadrados de superficie y un valor mayor a 3000 por metro cuadrado. Finalmente las ordeno por precio.
En el SELECT indico que campos mostrar.

SELECT subtipos_publicacion.nombre AS subtipo, ciudades.nombre AS ciudad, superficie, cantidadAmbientes, precio
FROM viviendas
INNER JOIN subtipos_publicacion ON subtipos_publicacion.id = viviendas.id_subtipo
INNER JOIN ciudades ON viviendas.id_ciudad = ciudades.id
WHERE superficie > 100
AND precio/superficie > 3000
ORDER BY precio

Muy bien, ahora conocemos lo forma adecuada de filtrar datos tanto NULL como NOT NULL solo debemos recordar usar el IS para esta búsqueda.

Con respecto a las búsquedas de mi proyecto, acá tengo una y es mostrar las ventas realizadas para diciembre y que los artículos vendidos tengan un valor mayor a 20.000, este es el código:

SELECT * FROM pedidos AS tbPedi
INNER JOIN solicitudes AS tbSoli ON tbSoli.Id_solicitud = tbPedi.Id_solicitud
INNER JOIN articulos AS tbArti ON tbArti.Id_articulo = tbSoli.Id_articulo
WHERE MONTH(tbPedi.Fecha) = '12' 
AND tbPedi.Id_estado = 3
AND tbArti.Valor_articulo > 20000

Algo como “retornar la información de equipos, su puntaje por enfrentamiento, la id del enfrentamiento, y el nombre del videojuego, solo para el juego Smash Bros. Ultimate y los equipos que hayan marcado 4 puntos o más”

SELECT equipos.nombre AS equipo, puntajes.puntaje, enfrentamientos.enfrentamiento_id AS "enfrentamiento_no.", videojuegos.nombre AS videojuego
FROM equipos
INNER JOIN puntajes ON equipos.equipo_id = puntajes.equipo_id
INNER JOIN enfrentamientos ON enfrentamientos.enfrentamiento_id = puntajes.enfrentamiento_id
INNER JOIN videojuegos ON enfrentamientos.videojuego_id = videojuegos.videojuego_id
WHERE videojuegos.nombre = "Smash Bros. Ultimate"
AND puntajes.puntaje >= 4;

Un ejemplo utilizados valores numéricos y texto como filtros en el where:

SELECT * FROM dbpractica.alumnos
where ciudad_alu like '%Glasgow%'
and codigo_alu > 4
and upper(direccion_alu) like ‘%BOX%’;

SELECT DISTINCT column1, column2, …
FROM table_name;
SELECT * FROM Customers
WHERE NOT Country=‘Germany’

NULL: Es un valor por defecto que se coloca cuando un campo no contiene ningun tipo de valor esto mismo lo podemos ver aplicado a lenguajes de programacion como Python que existen asignaciones de valores nulos pero con su palabra clave ‘None’

select * from consolas where year(ano_lanzamiento) = 2002;

select id_juego,nombre from juegos left join conso_juego on id_juego = conso_juego.id_juego
where conso_juego.id_consola = 4;

select * from ediciones_juego where version like ‘%coll%’;
select * from juegos right join desarrollador on juegos.id_desarrolla = desarrollador.id_desarrolla
where nombre = ‘sony santamonica’;

SELECT count(*)
FROM posts 
WHERE year(fecha_publicacion) = '2023'
AND estatus = 'ACTIVO'```

De mi proyecto personal (Paises, datos de este y sus comidas típicas) la pregunte que me hice fue ¿Quiero conocer todos los paises de américa que su comida típica sea el choripán, el código quedo así:

SELECT c.name as Pais, co.name as Continente, l.name as Idioma, tf.name
FROM countries as c
LEFT JOIN continent as co 
    ON c.continent_id = co.id
LEFT JOIN language as l
	ON c.language_id = l.language
LEFT JOIN countries_food as cf
	ON cf.countries_id = c.countries_id
LEFT JOIN typical_food as tf
	ON tf.id = cf.typical_food_id
WHERE co.id = 1
AND tf.name = "Choripán";

Y el resultado:

¿ERROR AL INSERTAR EL POST QUE SE QUEDO HUÉRFANO?
La única manera que encontré para poder insertar el dato con id 64 de la tabla posts que viene en el archivo Estructura_Query.sql, fue alterar los valores “usuario_id” y “categoria_id” desmarcando los valores NN de la tabla posts.

practica

SELECT *
FROM posts
WHERE usuario_id IS NOT NULL
AND estatus = "activo"
AND usuario_id BETWEEN 2 AND 6
AND categoria_id > 1
AND titulo LIKE "%e%"
AND YEAR(fecha_publicacion) = “2025”
;

SELECT	*
FROM usuarios
left join posts  
ON usuarios.id = posts.usuario_id
where titulo is not null
and estatus = 'activo'
and posts.id < 50
;

Aquí está mi ejemplo utilizando INNER JOIN y WHERE en mi proyecto

Mi resultado en platziblog, Vamos bien!!!

Excelente video 😃

Excelente explicación!

Muy poderoso se vuelve con los AND.

buenas tardes. La pregunta que me hice es: cuanto vendió la bicicleteria 1 ?
![](

SELECT*
FROM juego_jugador
WHERE jugador IS NOT NULL
AND juego_id = 1

Valor NULL para buscar donde falta informacion relevante, ejemplo en la maquila revisar horas de la checada, puede que el empleado si cheko pero el systema no registro la informacion de entrada y si de salida
Algo muy curioso que me ocurrió cuando tuve mi primera experiencia como practicante de datos es que si bien es cierto no es correcto hacer: select \* from posts where usuario\_id = null A la hora de querer updatear uno o más registros, sí es correcto lo siguiente: update posts set usuario\_id = null where id =4
esta fue mi consulta: select usuarios.id, usuarios.login, posts.id, posts.titulo, posts.categoria\_id from usuarios inner join posts on usuarios.id = posts.usuario\_id where usuarios.id = 1 and posts.categoria\_id = 2;
* Generalmente el valor nulo `NULL` en una tabla es el valor por defecto ```js SELECT * FROM posts WHERE usuario_id IS NULL; ``` * Con la sentencia anterior traemos las filas o información que en la columna ‘usuario\_id’ no tiene un valor o es un valor `NULL` * Para dejar fuera los valores nulos vamos a usar `IS NOT NULL` ```js SELECT * FROM posts WHERE usuario_id IS NOT NULL AND estatus = 'activo' AND id < 50 AND categoria_id = 2; ``` * La sentencia `AND` une criterios de búsqueda que filtra hasta que se cumplan todos los criterios solicitados 📌 **RESUMEN: Con la sentencia** `WHERE` **podemos buscar los valores nulos o los que no sean nulos con** `IS NULL` **y con** `IS NOT NULL` **además con** `AND` **dentro de** `WHERE` **podemos agregar más criterios en diferentes columnas**

Hola, comparto mi resumen

Considero que la necesidad de obtener información puntual surge de los datos que un usuario(cliente) nos puede otorgar, ya que como creador de tus propios datos te ves limitado a las ideas de lo que tu como usuario único podrías necesitar.

SUPER... ![](https://static.platzi.com/media/user_upload/image-5af5ff89-3a74-4b6d-82ee-6ad898524674.jpg)
Una BD paquetes de una empresa de transporte de cargas SELECT \* FROM paquetes WHERE peso\_paquete >= ‘20kg’ AND estado\_paquete != ‘entregado’ AND id\_cliente = ‘12345’;
Una BD acerca de discos de vinilo SELECT \* FROM vinilos WHERE pressingYear = ‘2022’ AND vinylWeight = ‘180g’ AND vinylDiameter = ‘12’ AND artist = ‘Kendrick Lamar’ AND format = ‘2 LP’;
SELECT *
FROM Clientes
WHERE ID_Contacto IS NULL;
--
SELECT *
FROM Productos
WHERE Descripcion_Producto IS NULL;
--
SELECT *
FROM Pedidos
WHERE Fecha_Hora_Pedido IS NOT NULL;

--
SELECT *
FROM Categorias
WHERE Descripcion_Categoria IS NULL;

WHERE predicado AND predicado AND predicado

and so on…

<
select count(email) as gmail_users
from usuarios
where email like "%@platziblog%"
and id>2;
> 

He encontrado una pagina super cool en la cual se pueden generar datos y es extremadamente personalizable:

https://www.mockaroo.com/

IMPORTANTE:
Si quiere poner el insert sin copiar y pegar cada línea, lo que yo hice es ir VSCODE y seleccionar desde el segundo INSERT INTO hasta el próximo paréntesis. De ahí pulsé CTRL + D para seleccionar todo los que hay (Excepto el primero) y lo reemplacé por una coma " , "

Hacemos lo mismo con los punto y coma " ; " solamente dejando el ultimo.

Por ultimo copiamos y pegamos todo en WorkBench.

Así debería queda el código:

Comparto mi proyecto, probando los joins con varias tablas

Aca dejo al menos dos preguntas sobre mi proyecto:

-- Los kikis del 2022
SELECT nombre, tematica, fecha
FROM ballroom.kikis
WHERE YEAR(fecha) = '2022'
;

-- Los kikis realizados en Casino Caracas
SELECT nombre, tematica, fecha
FROM ballroom.kikis
WHERE direccion LIKE '%casino caracas%' 
;