La solicitud

De Lauren Hayes, Gerente de Email Marketing
Tu objetivo
Desde customers, devuelve customer_id y email de todos los clientes cuyo email termina en '@gmail.com', sin distinguir mayúsculas de minúsculas. Devuelve email exactamente como está guardado.
- Lee de la tabla
customerspendiente - Muestra exactamente
customer_idemailpendiente - 958 filaspendiente
Tu consulta
Cargando el editor…
Solución de referencia
| customer_id | first_name | last_name | city | |
|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Lauren, y por qué
Tablas
Datos de la tienda Harbor & Pine, listos para consultar.
customers2,018 filas · 9 columnas
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NULL |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NULL |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NULL |
products120 filas · 8 columnas
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NULL | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
orders12,000 filas · 7 columnas
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NULL |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NULL |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
order_items30,338 filas · 6 columnas
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
returns1,673 filas · 5 columnas
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
employees60 filas · 8 columnas
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NULL | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 filas · 7 columnas
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NULL | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NULL | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NULL | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NULL | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 filas · 3 columnas
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
La lección
= necesita que coincida el valor completo. LIKE busca un patrón:
| comodín | coincide con |
|---|---|
% |
cualquier cantidad de caracteres, incluso ninguno |
_ |
exactamente un carácter |
WHERE name LIKE '%Lamp%' -- contains "Lamp"
WHERE name LIKE 'Oak%' -- starts with "Oak"
WHERE email LIKE '%@gmail.com' -- ends with "@gmail.com"
Sin ningún comodín, LIKE se comporta como =.
La distinción de mayúsculas cambia según la base de datos
- Postgres, DuckDB, BigQuery:
LIKEdistingue mayúsculas.'Megan@Gmail.com' LIKE '%@gmail.com'es falso. - MySQL: no distingue mayúsculas por defecto (depende de la intercalación de la columna).
- Postgres y DuckDB también tienen
ILIKE, unLIKEsin distinción de mayúsculas. MySQL y BigQuery no lo tienen.
La solución portable es pasar la columna a minúsculas y escribir el patrón en minúsculas:
WHERE LOWER(email) LIKE '%@gmail.com'
Esto filtra con el valor en minúsculas pero sigue devolviendo email exactamente como está guardado, porque la
lista de SELECT usa la columna original.
Por qué importa
El texto que escriben los clientes es desordenado. Los datos de Harbor & Pine tienen correos con mayúsculas y nombres de ciudad con
mayúsculas y espacios raros, igual que los CRM reales. Si filtras con un patrón que distingue mayúsculas,
cuentas de menos y nadie lo nota porque la consulta no dio error. Un buen hábito: cuando un filtro de texto es
parte de un número sobre el que alguien actuará, compara el conteo con y sin LOWER(). Si difieren,
menciónalo.
En este conjunto de datos la diferencia es real: un email LIKE '%@gmail.com' que distingue mayúsculas se pierde a un
cliente cuya dirección se escribió en mayúsculas. Una fila suena trivial, pero el mismo hábito en una tabla de
un millón de filas pierde miles.
Los comodines al inicio son lentos
LIKE 'Oak%' puede usar un índice sobre una columna ordenada. LIKE '%lamp%' no puede, porque la coincidencia podría
empezar en cualquier parte, así que la base de datos recorre cada fila. En una tabla de 2,000 filas no lo notarás. En una
tabla de eventos de mil millones de filas sí. Los motores columnares como DuckDB y BigQuery recorren todo de todos modos, así que
allí importa menos.
Errores comunes
- Olvidar el
%:LIKE '@gmail.com'solo coincide con la cadena exacta@gmail.com. - Coincidir de forma demasiado laxa:
LIKE '%gmail%'también atrapanotgmail.co. Ancla el patrón tan estrictamente como lo permita la pregunta. - Buscar un
%o_literal. Necesitan escape, por ejemploLIKE '%10\%%' ESCAPE '\'.
En SQL Server
% y _ funcionan igual, pero la intercalación por defecto no distingue mayúsculas, así que LIKE '%@gmail.com'
ya coincide con ‘@Gmail.com’ y no hay ILIKE. SQL Server también admite clases de caracteres entre
corchetes, y usa LEN donde DuckDB usa LENGTH:
WHERE last_name LIKE '[A-M]%' -- starts with A to M
AND LEN(first_name) = 5 ¡Linterna encendida!
Practicaste: likeilikelowerwildcards
- Resuelto
- Sin pistas
- Al primer intento
