LIKE, ORDER BY y DISTINCT: tres consultas del día a día
En este capítulo vemos tres consultas que uso mucho en el trabajo para filtrar información de forma masiva: LIKE, ORDER BY y DISTINCT.
No son difíciles de aprender. Sí te van a ahorrar tiempo cuando tengas que buscar un cliente, un producto mal escrito o un listado sin repetidos.
Vamos a trabajar sobre Ventas, con columnas como nombre del cliente, nombre del vendedor y precio unitario. Es el mismo tipo de tabla que aparece en un examen de base de datos o en un sistema real.
Preparar la tabla Ventas
Antes de filtrar, conviene mirar los datos:
SELECT *
FROM Ventas;
Si partís de cero, este script replica el escenario del video. Incluye clientes como Diego, María y Marcos para que los ejemplos de LIKE den el mismo resultado.
DROP TABLE IF EXISTS Ventas;
CREATE TABLE Ventas (
IdVenta INT PRIMARY KEY,
NombreCliente VARCHAR(50),
NombreVendedor VARCHAR(50),
PrecioUnitario DECIMAL(10, 2),
PorcentajeDescuento DECIMAL(5, 2)
);
INSERT INTO Ventas (
IdVenta,
NombreCliente,
NombreVendedor,
PrecioUnitario,
PorcentajeDescuento
) VALUES
(1, 'Diego López', 'Ana', 1500.00, 10),
(2, 'Diego Martínez', 'Bruno', 800.00, 0),
(3, 'Ana Pérez', 'Ana', 1200.00, 5),
(4, 'María Gómez', 'Carla', 2100.00, 15),
(5, 'Marcos Díaz', 'Bruno', 450.00, 0),
(6, 'Camila Ruiz', 'Ana', 990.00, 5),
(7, 'Diego López', 'Carla', 3200.00, 20);
LIKE en SQL: buscar coincidencias
LIKE acompaña a un SELECT con WHERE para traer filas mientras el texto se parezca a un patrón. No exige una igualdad exacta.
Imaginá que te piden todos los clientes que se parezcan a Diego. El primer intento suele ser este:
SELECT *
FROM Ventas
WHERE NombreCliente = 'Diego';
Esa consulta no devuelve nada, aunque Diego esté en la tabla. El motivo es que el nombre guardado no es exactamente Diego: puede ser Diego López o Diego Martínez.
Para esos casos usamos LIKE con el símbolo %.
SELECT *
FROM Ventas
WHERE NombreCliente LIKE 'Diego%';
La lectura es: “traeme las filas cuyo NombreCliente empiece por Diego y después tenga lo que sea”.
Cómo usar % con LIKE
El % es un comodín. Significa “cualquier texto, de cualquier largo, incluso vacío”.
| Patrón | Qué busca | Ejemplo |
|---|---|---|
'Diego%' | Empieza con Diego | Diego López |
'%ego' | Termina con ego | no matchea Diego López |
'%ego%' | Contiene ego en cualquier parte | Diego López, Diego Martínez |
'M%' | Empieza con M | María Gómez, Marcos Díaz |
Si sacás las primeras letras y dejás solo el final como prefijo, no vas a obtener resultados:
SELECT *
FROM Ventas
WHERE NombreCliente LIKE 'ego%';
Nadie en la tabla empieza por ego. En cambio, si el comodín va adelante, SQL busca ese texto en cualquier posición:
SELECT *
FROM Ventas
WHERE NombreCliente LIKE '%ego%';
Acá sí aparecen los registros de Diego, porque ego está dentro de Diego.
ORDER BY en SQL: ordenar resultados
ORDER BY ordena el resultado según una columna. En el trabajo se usa mucho con números: precios, porcentajes, importes, cantidades.
La consulta base sigue siendo:
SELECT *
FROM Ventas;
Si te piden las ventas ordenadas por precio, de menor a mayor, el criterio va al final:
SELECT *
FROM Ventas
ORDER BY PrecioUnitario;
Por defecto, ORDER BY ordena de menor a mayor (ASC). SQL deja de devolver las filas en el orden original de la tabla y las acomoda por PrecioUnitario.
ORDER BY DESC: de mayor a menor
Si la consigna es la inversa —las ventas más caras primero— agregás DESC al final:
SELECT *
FROM Ventas
ORDER BY PrecioUnitario DESC;
El orden de las cláusulas importa. ORDER BY va después del FROM y, si hay filtro, después del WHERE.
Combinar LIKE con ORDER BY
Las tres piezas se pueden usar juntas. Primero filtrás, después ordenás:
SELECT *
FROM Ventas
WHERE NombreCliente LIKE '%ego%'
ORDER BY PrecioUnitario DESC;
Esto trae las ventas de clientes que contienen ego en el nombre y las ordena de mayor a menor precio. En la práctica: las ventas de Diego, de la más cara a la más barata.
El mismo patrón sirve para otro criterio. Por ejemplo, clientes cuyo nombre empieza con M:
SELECT *
FROM Ventas
WHERE NombreCliente LIKE 'M%'
ORDER BY PrecioUnitario;
Lectura de la consulta:
FROM Ventas: tomo la tabla.WHERE NombreCliente LIKE 'M%': dejo solo los nombres que empiezan con M.ORDER BY PrecioUnitario: ordeno esas filas de menor a mayor precio.
DISTINCT en SQL: evitar repetidos
DISTINCT elimina valores duplicados. Sirve cuando te piden un listado de clientes, productos o vendedores sin que se repitan.
Un error común es aplicarlo sobre todas las columnas:
SELECT DISTINCT *
FROM Ventas;
Esa consulta suele devolver la tabla entera. DISTINCT compara la fila completa. Como IdVenta es único —incremental, aleatorio o armado con una fecha como 20260824—, ninguna fila es 100% idéntica a otra.
Para que funcione, hay que elegir la columna en la que sí hay repetidos:
SELECT DISTINCT NombreCliente
FROM Ventas;
Ahora SQL mira solo el nombre. Diego López aparece una vez, aunque tenga más de una venta.
DISTINCT vs GROUP BY
Muchas personas confunden DISTINCT con GROUP BY porque, en un listado de nombres, el resultado se parece.
SELECT NombreCliente
FROM Ventas
GROUP BY NombreCliente;
También te deja un nombre por cliente. La diferencia es el objetivo:
GROUP BYagrupa. Forma grupos de Agustina, Ana, Camila, Diego, etc. Después suele ir conCOUNT,SUMu otra función.DISTINCTelimina duplicados. No arma un resumen: solo deja valores únicos para filtrar o listar.
Qué consultas uso más en el trabajo
Si tuviera que ordenarlas por uso real:
LIKE: la que más uso. Buscar un producto o un cliente cuando no conozco el nombre exacto.ORDER BY: muy usada con números. Precios, porcentajes, quién compró más o menos. También ordena texto en forma alfabética, pero el caso más habitual es numérico.DISTINCT: la uso menos, pero aparece cuando hay que listar clientes u otros valores sin repetidos.
Resumen del video
En este capítulo del curso SQL vimos:
- Por qué
WHERE NombreCliente = 'Diego'puede no devolver filas aunque Diego exista. - Cómo
LIKE 'Diego%'busca coincidencias, no igualdad exacta. - Qué significa
%al inicio, al final o en ambos lados. - Cómo
ORDER BYordena de menor a mayor y cómoDESCinvierte el orden. - Por qué
ORDER BYva al final de la consulta. - Cómo combinar
LIKEyORDER BYen un mismoSELECT. - Por qué
SELECT DISTINCT *no saca repetidos si el ID es único. - La diferencia práctica entre
DISTINCTyGROUP BY.
Si esta serie te está sirviendo, en el video también te invito a dejar like, suscribirte y comentar qué casuística de SQL te gustaría ver después.