Nivel 1 · Prepara una tabla de importación de proveedor
0 de 3
La solicitud

De Tyler Morgan, Ingeniero de Datos Junior
Tu objetivo
Crea una tabla supplier_import con las columnas import_id INTEGER PRIMARY KEY, product_name VARCHAR, category VARCHAR, unit_price DECIMAL(10, 2) y received_on DATE. Conserva las cuatro filas del INSERT del starter y añade una quinta: (5, 'Wren Ceramic Table Lamp', 'Lighting', NULL, '2025-11-04'). Termina con un SELECT que devuelva import_id, product_name, unit_price y review_status ('missing price' cuando unit_price es NULL, 'needs approval' cuando unit_price es mayor que 500, y en otro caso 'ok'), ordenado por import_id.
- Muestra exactamente
import_idproduct_nameunit_pricereview_statuspendiente - 5 filas, ordenadas como se pidependiente
Tu consulta
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Tyler, 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
La mayor parte de SQL es leer tablas que construyó otra persona. Este capítulo trata de construir las
tuyas. Las dos primeras sentencias que necesitas son CREATE TABLE, que define las columnas de una
tabla, e INSERT, que le mete filas.
CREATE TABLE
La definición de una tabla lista cada columna con un tipo de datos:
CREATE TABLE supplier_import (
import_id INTEGER PRIMARY KEY,
product_name VARCHAR,
category VARCHAR,
unit_price DECIMAL(10, 2),
received_on DATE
);
El tipo decide qué acepta la columna y cómo se comporta. INTEGER guarda números enteros, VARCHAR guarda
texto, DATE guarda un día del calendario y DECIMAL(10, 2) guarda números exactos de hasta 10 dígitos,
2 de ellos después del punto decimal. El dinero siempre va en DECIMAL, nunca en un tipo de coma flotante,
porque los flotantes guardan aproximaciones binarias: 0.1 + 0.2 no es exactamente 0.3 en un DOUBLE.
PRIMARY KEY significa que cada import_id debe estar presente y ser único. Inserta una segunda fila con
id 3 y la base de datos la rechaza con un error de restricción. Ese es el sentido: las claves son como se
unen las tablas, así que la base de datos las protege.
INSERT INTO … VALUES
INSERT INTO supplier_import VALUES
(1, 'Harlow Brass Pendant', 'Lighting', 189.00, '2025-11-03'),
(5, 'Wren Ceramic Table Lamp', 'Lighting', NULL, '2025-11-04');
Cada lista entre paréntesis es una fila, con valores en el mismo orden que las columnas. El texto y las
fechas van entre comillas simples, los números no, y un valor que falta se escribe NULL sin comillas.
'NULL' entre comillas sería una cadena de cuatro letras, no un valor que falta.
Cuando solo rellenas algunas columnas, nómbralas, y el resto pasan a NULL (o a su valor por defecto):
INSERT INTO supplier_import (import_id, product_name) VALUES (6, 'Sample Lamp');
Nombrar las columnas también es más seguro en general: el insert sigue funcionando si alguien añade una columna más tarde.
Léela de vuelta
Después de cualquier cambio, consulta la tabla para confirmar que contiene lo que esperas. Aquí el
SELECT final añade una marca de revisión. El CASE comprueba primero el precio que falta, porque un precio
NULL no es ni mayor ni menor que 500: NULL > 500 es desconocido, y una condición desconocida nunca
coincide con un WHEN.
En este juego cada ejecución se revierte después, por eso la solución crea la tabla cada vez. En una base de datos real la tabla seguiría ahí hasta que alguien la elimine.
Errores comunes
- Poner comillas a los números u olvidarlas en el texto y las fechas.
'189.00'normalmente se convierte igual, peroLightingsin comillas se lee como el nombre de una columna y falla. - Poner los valores en el orden de columnas equivocado.
VALUESsigue el orden de las columnas de la tabla a menos que listes las columnas. - Escribir
'NULL'o una cadena vacía''para un valor que falta. Ambos son valores reales, así queIS NULLno los encontrará. - Usar
FLOAToDOUBLEpara precios.
En SQL Server
La misma tabla en T-SQL suele usar NVARCHAR(100) para el texto (Unicode) y a menudo una columna
IDENTITY que numera las filas por ti:
CREATE TABLE dbo.SupplierImport (
ImportID INT IDENTITY(1,1) PRIMARY KEY,
ProductName NVARCHAR(100),
UnitPrice DECIMAL(10,2)
);
El VARCHAR de DuckDB no necesita longitud, y INSERT INTO ... VALUES con varias filas funciona igual en
ambos.
¡Linterna encendida!
Practicaste: create tableinsertdata typesprimary keynull
- Resuelto
- Sin pistas
- Al primer intento
