Para los que necesiten generar datos ficticios en sus tablas
Generalmente a este tipo de datos se les conoce como “dummy data”
Bienvenida conceptos básicos y contexto histórico de las Bases de Datos
Bienvenida conceptos básicos y contexto histórico de las Bases de Datos
Introducción a las bases de datos relacionales
Historia de las bases de datos relacionales
Entidades y atributos
Entidades de Platzi Blog
Relaciones
Múltiples muchos
Diagrama ER
Diagrama Físico: tipos de datos y constraints
Diagrama Físico: normalización
Formas normales en Bases de Datos relacionales
Diagrama Físico: normalizando Platziblog
RDBMS (MySQL) o cómo hacer lo anterior de manera práctica
¿Qué es RDB y RDBMS?
Instalación local de un RDBMS (Windows)
Instalación local de un RDBMS (Mac)
Instalación local de un RDBMS (Ubuntu)
Clientes gráficos
Servicios administrados
SQL hasta en la sopa
Historia de SQL
DDL create
CREATE VIEW y DDL ALTER
DDL drop
DML
¿Qué tan standard es SQL?
Creando Platziblog: tablas independientes
Creando Platziblog: tablas dependientes
Creando Platziblog: tablas transitivas
Consultas a una base de datos
¿Por qué las consultas son tan importantes?
Estructura básica de un Query
SELECT
FROM
Utilizando la sentencia FROM
WHERE
Utilizando la sentencia WHERE nulo y no nulo
GROUP BY
ORDER BY y HAVING
El interminable agujero de conejo (Nested queries)
¿Cómo convertir una pregunta en un query SQL?
Preguntándole a la base de datos
Consultando PlatziBlog
Introducción a la bases de datos NO relacionales
¿Qué son y cuáles son los tipos de bases de datos no relacionales?
Servicios administrados y jerarquía de datos
Manejo de modelos de datos en bases de datos no relacionales
Top level collection con Firebase
Creando y borrando documentos en Firestore
Colecciones vs subcolecciones
Recreando Platziblog
Construyendo Platziblog en Firestore
Proyecto final: transformando tu proyecto en una db no relacional
Bases de datos en la vida real
Bases de datos en la vida real
Big Data
Data warehouse
Data mining
ETL
Business intelligence
Machine Learning
Data Science
¿Por qué aprender bases de datos hoy?
Bonus
Bases de datos relacionales vs no relacionales
Elegir una base de datos
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
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 166
Preguntas 27
Para los que necesiten generar datos ficticios en sus tablas
Generalmente a este tipo de datos se les conoce como “dummy data”
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).
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
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
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.
Este es mi primer contacto con bases de datos y para ser sincero, tenía más temor antes de comenzar. Es posible!
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'
;
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’;
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’;
🗣NULL => Representa la ausencia de valor.
👀OJO: NULL es diferente de VACIO.
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;
Usando la base de datos Sakila:
Saludos.
Increible el nivel de detalle de Platzi como para dedicarle una clase a este tema. ❤️ 😄
"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
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 🍃
Es una base de datos para una librería
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.
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’?
Muy buen curso, sencillo de entender. Muy bien explicado. Felicidades! 😃
Un valor null si es del tipo int no es igual a 0.
En este enlace hay mas informaciom
Buenos Días.
Aquí les presento una consulta que realicé.
La verdad que con el AND se pueden hacer maravillas
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.
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!
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
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
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;
Mi pregunta fue : ¿en que año fueron los posts mas antiguos y quienes fueron esos usuarios?
/*
buena explicacion!
★★★★★
No se confundan. Null no es igual a 0.
Aqui podran encontrar mas informacion
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.
 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'```
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 😃
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
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
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 ?
 = '2021' && month(fecha_vencimiento) = '10';
Que gracioso, jajaja…
SELECT *
FROM alumno as a
WHERE a_paterno = 'Zavaleta '
and nombre like ‘%Jose%’;
Las sentencias siempre deben de ser en mayuscula ?
En este caso al colocar NOT NULL, estaríamos filtrando igual que con un INNER JOIN
El valor nulo también ocupa espacio en memoria, ?
Por ejemplo cuántos entrenamientos realizó un atleta en un mes o en un año, qué ejercicios fueron los que más usó, cuántas veces llegó al fallo en los ejercicios,…
Con AND puedes encadenar varias condicionales para filtrar tuplas a tu encesidad especifica.
Podemos hacer muchas preguntas y responderlas con los datos interpretados gracias al código SQL, esto me recuerda a los filtros de Microsoft Excel
SELECT count(usuario_id),nickname from posts INNER JOIN usuarios ON usuarios.id = posts.usuario_id where posts.usuario_id = 1
SELECT * FROM students WHERE status_id = ‘active’;
<SELECT *
FROM users
WHERE phone IS NOT NULL
AND sex ='m'
AND name like 'm%'
;
>
Obtener todas las facturas cuyo importe sea mayor a 1000, aun estén abiertas (sin pagar), que sean de venta y creadas en el tercer trimestre.
SELECT *
FROM account_invoice
WHERE amount_untaxed > 1000
AND state = 'open'
AND type = 'out_invoice'
AND EXTRACT(MONTH FROM create_date) BETWEEN '07' AND '09';
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.