El uso adecuado del comando WHERE en SQL permite filtrar los datos almacenados en bases de datos según condiciones específicas, facilitando obtener información relevante para diversas aplicaciones. Comprender cómo se evalúan estas condiciones y sus múltiples opciones mejora significativamente la eficiencia y precisión al consultar una base de datos.
¿Qué es el comando WHERE y por qué es importante?
El comando WHERE actúa como un filtro en sentencias SQL (SELECT, UPDATE, y DELETE), permitiendo recuperar únicamente las filas que cumplen una condición específica, esto a través de expresiones que devuelven valores booleanos, true o false. Este comando es fundamental para evitar el procesamiento de datos innecesarios y optimizar resultados en la consulta de grandes tablas.
¿Cómo se utilizan operadores y funciones con WHERE?
Las expresiones en una sentencia WHERE pueden incluir distintos tipos de comparaciones y funciones:
Comparaciones numéricas y aritméticas
Puedes seleccionar productos por rango de precios o realizar operaciones aritméticas directas para filtrar resultados:
SELECT*FROM products WHERE price <100;
Comparaciones con cadenas de texto
Para consultar registros específicos basados en coincidencias parciales de texto, la función LIKE se utiliza junto con comodines:
SELECT name FROM clients WHERE name LIKE'Mr.%';
Filtrado con listas específicas
La función IN es útil cuando buscas registros cuyo valor esté explícitamente listado en una consulta:
SELECT*FROM bill_products WHERE product_id IN(825,500,1986);
Operadores para intervalos: BETWEEN
Esta opción permite recuperar datos dentro de un rango específico, útil para fechas y números:
SELECT*FROM bill_products WHERE date_added BETWEEN'2024-09-24'AND'2024-09-30';
Funciones aleatorias
La función RAND() puede ayudar a seleccionar aleatoriamente un porcentaje de datos disponible:
SELECT name FROM clients WHERE RAND()<0.01;
¿Qué hacen los conectores AND y OR dentro del WHERE?
Los operadores booleanos AND y OR permiten combinar condiciones múltiples, ofreciendo mayor control del filtrado:
AND requiere que todas las condiciones especificadas sean verdaderas.
OR acepta si al menos una condición es verdadera.
Por ejemplo:
SELECT*FROM clients WHERE name LIKE'Mr.%'AND email LIKE'%@domain.com';
¿Cómo mejora la presentación de datos con modificaciones visuales?
SQL te brinda opciones para mejorar la visualización de tus consultas, facilitando comprender resultados complejos o muy extensos con un simple ajuste en la consulta:
Finalizando con \G en vez de punto y coma, la salida se presentará en forma de filas, facilitando la lectura:
SELECT*FROM clients LIMIT1 \G
Este truco te permite visualizar claramente cada registro con sus respectivas columnas, particularmente útil cuando las filas contienen muchos datos.
Comenzar a aplicar las prácticas descritas ampliará eficazmente tus habilidades para consultar bases de datos con precisión y eficiencia. Comparte tus experiencias o dudas en los comentarios para seguir aprendiendo juntos.
Para montar las otras tablas:
- Descarga los zips y los descomprimes en la misma raiz del proyecto:
bill_products.sql
bills.sql
products.sql
clients.sql
shema.sql
- Eliminé las tablas para crearlas de nuevo según el nuevo esquema:
mysql> drop table if exists bill_products;
mysql> drop table if exists bills;
mysql> drop table if exists clients;
mysql> drop table if exists products;
- Creo de nuevo las tablas una por una (como en el archivo shema.sql):
create table if not exists clients ( client_id integer primary key auto_increment, name varchar(100) not null, email varchar(100) not null unique, phone_number varchar(15), created_at timestamp not null default CURRENT_TIMESTAMP, updated_at timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);
- Insertar los datos desde la consola (1 por cada tabla):
➜ mysql -u root -p -D curso_sql -p < clients.sql
- Al final verifiqué la cantidad de datos:
bill_products = 1000
bills = 20
clients = 98023
Products = 2358
En este link encontraras ya los archivos limpios y organizados solo para descargar e insertar
✅ nota el doc de bill_products.sql y bill_products02.sql se ha divido en dos grupos por sus variables
📍opcional
comandos que te serviran para limpiar en visual studio code
✅🚀para filtrar datos en visual studio code ✅
📍Ctrl + Shift + P → escribí "Sort Lines Ascending" y presioná Enter. # esto ordenara las lineas a organizar
✅Abrí la búsqueda global con Ctrl + H
para elimiar masivamente o para remplazar caracteres
Muchas gracias. Por alguna razón durante varios dias mi navegador no me mostraba los archivos de la clase y tuve que usar tu link para poder seguir esta clase.
Igual como aporte, se me ocurrio la idea de cargar todo desde la terminal CMD de Windows, nunca habia imaginado el poder de la terminal, literal solo con unos cuantos comando logre replicar toda la base de datos del profesor en cuestion de segundos, aqui algunas capura:
Captura1:
Cargar el schema.sql (que son la estructura de las tablas que usaremos)
Una vez creadas las tablas, se procede a INSERTAR los datos a cada tabla, de igual forma desde el CMD
Captura2: Verificacion de que en efecto se hayan cargado los datos a las tablas
Literalmente si yo no fuera desarrollador y si no hubieras dejado los comandos aqui, aparte de todas las volteretas que se debe hacer para editar las variables del entorno paras los que solo usan windows ya hubiera dejado el curos hasta aquí de la impotencia y estoy seguro que varios lo dejan aqui ya que el profesor no tiene en cuenta que la mayoría de los usuarios siempre van a ser windows y la mayoría apuesto que ni sabran que es linux y menos sus consola, si no toman esto en cuenta la gente llegara hasta esta clase o dejara el curso tirado o no realizaran la practica por lo complicado que se vuelve cuando no se tiene los conocimientos del bash
Francisco, al inicio recomiendan tomar el curso de la terminal y linea de comandos.
Tengo apenas unos meses de haberme adentrado en este mundo y justo al principio tomé dicho curso.
Esta clase en especifico no se me complicó para nada y me sirvió como una oportunidad para practicar lo que aprendí anteriormente.
Tomar las consideraciones que mencionas no creo que esté mal, pero hubiera hecho este curso muchísimo más extenso y tampoco creo que sea lo optimo al tratarse de MYSQL, en donde si bien no tienes que ser un experto, es importante que ya tengas ciertas bases, entre ellas, la terminal.
La lista que menciona el profesor al final de la clase corresponde a funciones de comparación booleana en SQL, que son útiles para evaluar condiciones en la cláusula WHERE. Aunque no está disponible en la sección de recursos, aquí tienes un resumen de las funciones que podrías considerar:
LIKE: Para coincidencias de patrones en cadenas.
IN: Para verificar si un valor está en una lista.
= (Igual a): Para comparaciones directas.
> / < / >= / <=: Para comparaciones numéricas.
NULL: Para verificar si un campo es nulo.
Estas funciones son fundamentales para filtrar datos de manera efectiva.
Para aquellos que se sienten perdidos para completar el reto les dejo 2 pasos muy sencillos para resolverlo (estoy asumiendo que descargaron los archivos de la clase y los descomprimieron correctamente):
1) Lo primero será abrir el archivo SCHEMA para esto tienen dos opciones hacerlo con **MySQL Workbench (**pero esto no lo vimos en el curso) o usar un editor de texto (como el que el profesor usó durante el curso)¿Cómo lo pueden abrir si no tienen un editor de texto de confianza? Click derecho sobre el archivo schema.sql y abrir con bloc de notas de esa manera pueden copiar las líneas de código en la terminal (linea de comandos de MySQL)
2) Para los archivos de data.zip tienen igual 2 opciones, y esas dos opciones las dio el profesor en la clase anterior (Clase 16)
Yo recomiendo hacer uso de la línea de comandos por practicidad. mysql -u usuario -p -D nombre_bd < insert_products.sql
Para usar esta opción deben:
1) Saber la contraseña del usuario root
2) Añadir al Path mysql ya que si no lo hacen no va a funcionar. (Si no saben como, pregntar a chat GPT el si sabe)
3) Moverse a la carpeta donde tienen los archivos .sql
Cuando el profe dice del reto para hacer las tablas igual como están en clase me toco verme un video en youtube para conocer los comandos de mysql para llegar a este punto. la verdad me falto mas familiaridad con el programa que da vida a las bases de datos primero para llegara este punto.
pues si tocaba hacer unos reajustes con los archivos que nos dió pero los pude hacer arreglar con los comandos vistos hasta ahora. Lo que si es cierto es que tuve problemas a la hora de ejecutar comandos en la terminal de windows ya que tocaba hacer un proceso algo distinto que no se explico en clase pero que con los aportes de los compañeros pude resolver
Mi principal queja con Platzi es la frecuencia con la que encuentro cursos incompletos o a medias. Si bien la calidad de la introducción y los conceptos básicos suele ser excelente, a menudo noto que falta profundidad en los módulos finales, los ejercicios prácticos se dejan sin resolver o los temas avanzados no se llegan a cubrir.
JUER
Jarcodiar
ERROR VALORES EXACTOS en el PRICE. No se si a alguno le ha pasado, pero intentando hacer una igualdad en where con el price me daba siempre empty set. Ej;
SELECT name, price FROM products WHERE price = 143.55;
Revise y el campo price viene desde el archivo schema.sql que debíamos ejecutar, con tipo float. Para que me funcionara, cambie el tipo de dato de price a decimal (10,2) con un alter:
ALTER TABLE products MODIFY COLUMN price DECIMAL(10,2) NOT NULL;
Espero les sirva. Parece que es algo relacionado con la forma en la que se almacenan los tipo double y float que les hace perder precisión.
Realice la consulta y me sale lo mismo, pense en utilizar el comando like, siento que es mas potente cuando es un buscador
profe, no me sale, me carga de 54 en 54....
Muy complejo insertar clients, debido a que no hay una configuración inicial que reciba todo este paquete, debido a que es muy grande, y obliga a modificar un archivo. Esto se debería aclarar.
Hola chicos,
Alguno sabe en dónde está la chuleta que habla el profesor al final de la clase?
Muchísimas gracias!
Hola Laura! Yo lo veo en los recursos de la clase, en la sección de resumen, ¿lo encontraste?
Ya había hecho el curso de expresiones regulares, como dice el profesor, el curso lo dicta un gran profesor también👍
tuve que pausar el video por la risa que me causo cuando hizo referencia al curso de expresiones regulares dictado por un gran profesor jajajajaja. fui a buscarlo y definitivamente tiene razón jajaja. termino este curso y empiezo ese. 10/10
Realicé el curso de expresiones regulares, que por cierto, es unos de los mejores cursos que he hecho en Platzi con respecto a su contenido y forma de explicar del profesor. Pero no comprendo el .%, dentro de SLQ .% se comparto como .*? Cómo puedo conocer si hay más cambios? Like acepta realmente expresiones regulares?
Como tal no, solo admite comodines simples y propios del lenguaje sql, a los cuzles se les dice patrones, pero la verdad si, a mi también me recordó a las regexp.
Hola Jesus! Gracias por tus comentarios!!!
Mira, el caracter %dentro de un string para comparar es un wild card, es decir un "lo que sea", o sea "abcd%" se puede leer como "un string que empiece con abcd y después tenga lo que sea". Puede ir en cualquier sección del string.
Pregunta: ¿Dónde encuentro la lista que menciona el profe al final de la clase? No aparece en la sección de recursos
esta en los recursos de la anterior clase
Consultas realizadas, para que solo las peguen:
/* °°°°°°°°°°°°° Uso de comando WHERE_ Tabla Clients */select *from clients limit 10select client_id, name, email from clients where name like 'Mr.%IV';select client_id, name, email from clients where name like 'Mr.%III' or name like 'Mr.%IV';select client_id, name, email from clients where name like '%Gibson%';/* °°°°°°°°°°°°° Uso de comando WHERE_ Tabla Products */select sku, name, price from products where price <100.00;select sku, name, price from products where price between 200 and 300;/* °°°°°°°°°°°°° Uso de comando WHERE_ Tabla Bill Products */select bill_product_id, bill_id, product_id, quantity, price, discount, date_added from bill_products limit 10select bill_product_id, bill_id, product_id, quantity, price, discount, date_added from bill_products
where discount >0;select bill_product_id, bill_id, product_id, quantity, price, discount, date_added from bill_products
where date_added <'2024-03-24';select product_id, quantity, price, discount, date_added from bill_products
where date_added BETWEEN'2024-03-24' and '2024-05-24';
TABLA BILL PRODUCTS CON FOREIGN KEYS APUNTANDO A TABLA BILL Y PRODUCTOS
CREATETABLEbill_products( bill_product_id int unsigned AUTO_INCREMENT primary KEY, bill_id int unsigned not null, product_id int unsigned not null, quantity int not nulldefault1, price decimal(8,2) not null, discount integer not nulldefault0, date_added datetime, created_at timestamp not nulldefaultCURRENT_TIMESTAMP, updated_at TIMESTAMP not nullDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,/*Definir claves foráneas*/FOREIGNKEY(product_id)REFERENCESproducts(product_id),FOREIGNKEY(bill_id)REFERENCESbills(bill_id));
TABLA BILLS CON FOREIGN KEY APUNTANDO A TABLA CLIENTES
CREATETABLEbills( bill_id int unsigned AUTO_INCREMENT primary KEY, client_id int unsigned not null, total decimal(10,2), status ENUM('open','paid','lost') not nulldefault'open', created_at timestamp not nulldefaultCURRENT_TIMESTAMP, updated_at TIMESTAMP not nullDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,FOREIGNKEY(client_id)REFERENCESclients(client_id));
donde estan todos esos recursos que inserto en las tablas? por que en la clase anterior solamente esta la de productos pero no todas las que esta mostrando en el video