Base de datos AdventureWorks LT: esquema, tablas y ejercicios de SQL
AdventureWorks LT es la base de ejemplo de Microsoft SQL Server de un fabricante de bicicletas: clientes, productos, categorías de productos y pedidos. En SQLtest.online puedes consultarla directamente en el navegador: resolver ejercicios con corrección automática y ejecutar tus propias consultas en el playground, sin instalar nada.
- 10 tablas principales
- 847 clientes
- 295 productos
- 36 ejercicios de SQL
Qué es AdventureWorks
AdventureWorks es la base de ejemplo que Microsoft distribuye para SQL Server y Azure SQL. Describe Adventure Works Cycles, una empresa ficticia que fabrica y vende bicicletas, piezas y accesorios.
El sitio usa AdventureWorks LT, la edición ligera: el mismo negocio en unas diez tablas en lugar de decenas. Es ideal para practicar T-SQL, incluidos TOP, las autouniones sobre el árbol de categorías y las relaciones de muchos a muchos.
Diagrama ER
El diagrama muestra las tablas de AdventureWorks y las claves foráneas que las unen. Haz clic para abrirlo a tamaño completo.
Qué contiene la base
Las tablas se agrupan en tres bloques.
Clientes
Customer, Address y la tabla de relación CustomerAddress, que también guarda el tipo de dirección.
Productos
Product, ProductCategory (un árbol: cada categoría puede tener un padre), ProductModel y descripciones en varios idiomas.
Ventas
SalesOrderHeader guarda los pedidos y SalesOrderDetail sus líneas.
Los 32 pedidos de esta edición tienen fecha del 1 de junio de 2008. Las descripciones de productos se relacionan con los modelos mediante ProductModelProductDescription, que también guarda el idioma (culture) de cada descripción. Las tablas de servicio BuildVersion, ErrorLog y sysdiagrams no se usan en los ejercicios.
Cuántos datos hay en las tablas:
| Tabla | Filas | Contenido |
|---|---|---|
| Customer | 847 | clientes |
| CustomerAddress | 417 | relaciones cliente ↔ dirección |
| Address | 450 | direcciones |
| SalesOrderHeader | 32 | pedidos |
| SalesOrderDetail | 542 | líneas de pedido |
| Product | 295 | productos |
| ProductCategory | 41 | categorías de productos |
| ProductModel | 128 | modelos de productos |
| ProductDescription | 762 | descripciones de productos |
| ProductModelProductDescription | 762 | relaciones modelo ↔ descripción por idioma |
Estructura de las tablas
Haz clic en una tabla para ver sus columnas, una fila de ejemplo y sus claves.
Lista de tablas
- AddressIDidentificador único para cada dirección (PK)
- AddressLine1la primera línea de la dirección
- AddressLine2la segunda línea de la dirección
- Cityciudad
- StateProvinceestado o provincia
- CountryRegionpaís
- PostalCodecódigo postal
- rowguidguid
- ModifiedDatemarca de tiempo de la creación de la fila o la última actualización
- CLAVE PRIMARIA, btree (AddressID)
| AddressID | AddressLine1 | AddressLine2 | City | StateProvince | CountryRegion | PostalCode | rowguid | ModifiedDate |
|---|---|---|---|---|---|---|---|---|
| 9 | 8713 Yosemite Ct. | null | Bothell | Washington | Estados Unidos | 98011 | 268AF621-76D7-4C78-9441-144FD139821A | 2006-07-01 00:00:00.000 |
- CustomerIDidentificador único para cada cliente (PK)
- NameStyle0 = Los datos en FirstName y LastName se almacenan en estilo occidental (nombre, apellido). 1 = Estilo oriental (apellido, nombre). Predeterminado: 0
- Titletítulo
- FirstNamenombre
- MiddleNamesegundo nombre
- LastNameapellido
- Suffixsufijo
- CompanyNamenombre de la empresa
- SalesPersonVendedor
- EmailAddresscorreo electrónico
- Phonenúmero de teléfono
- PasswordHashhash de contraseña
- PasswordSaltsal
- rowguidrowguid
- ModifiedDatemarca de tiempo de la creación de la fila o la última actualización
- CLAVE PRIMARIA, btree (CustomerID)
| CustomerID | NameStyle | Title | FirstName | MiddleName | LastName | Suffix | CompanyName | SalesPerson | EmailAddress | Phone | PasswordHash | PasswordSalt | rowguid | ModifiedDate |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | Sr. | Orlando | N. | Gee | [null] | A Bike Store | adventure-works\pamela0 | orlando0@adventure-works.com | 245-555-0173 | L/Rlwxzp4w7RWmEgXX+/A7cXaePEPcp+KwQhl2fJL7w= | 1KjXYs4= | 3F5AE95E-B87D-4AED-95B4-C3797AFCB74F | 2005-08-01 00:00:00.000 |
- CustomerIDidentificador del cliente en la tabla Customer
- AddressIDidentificador de la dirección en la tabla Address
- AddressTypetipo de dirección
- rowguidguid
- ModifiedDatemarca de tiempo de la creación de la fila o la última actualización
- CLAVE PRIMARIA, btree (CustomerID, AddressID)
- CLAVE FORÁNEA (CustomerID) REFERENCIAS Customer(CustomerID)
- CLAVE FORÁNEA (AddressID) REFERENCIAS Address(AddressID)
| CustomerID | AddressID | AddressType | rowguid | ModifiedDate |
|---|---|---|---|---|
| 29485 | 1086 | Oficina Principal | 16765338-DBE4-4421-B5E9-3836B9278E63 | 2007-09-01 00:00:00.000 |
- ProductIDidentificador único para cada producto (PK)
- Namenombre del producto
- ProductNumbernúmero de artículo
- Colorcolor del producto
- StandardCostprecio del producto
- ListPriceprecio del producto en el catálogo
- Sizetamaño del producto
- Weightpeso del producto
- ProductCategoryIDclave foránea que apunta a la tabla ProductCategory
- ProductModelIDclave foránea que apunta a la tabla ProductModel
- SellStartDatemarca de tiempo de la fecha de inicio de ventas
- SellEndDatemarca de tiempo de la fecha de finalización de ventas
- DiscontinuedDatemarca de tiempo de la fecha de finalización de ventas
- ThumbNailPhotofoto en miniatura del producto
- ThumbnailPhotoFileName
nombre del archivo de la foto en miniatura - rowguidguid
- ModifiedDatemarca de tiempo de la creación de la fila o la última actualización
- CLAVE PRIMARIA, btree (ProductID, ProductCategoryID, ProductModelID)
- CLAVE FORÁNEA (ProductCategoryID) REFERENCIAS ProductCategory(ProductCategoryID)
- CLAVE FORÁNEA (ProductModelID) REFERENCIAS ProductModel(ProductModelID)
| ProductID | Name | ProductNumber | Color | StandardCost | ListPrice | Size | Weight | ProductCategoryID | ProductModelID | SellStartDate | SellEndDate | DiscontinuedDate | ThumbNailPhoto | ThumbnailPhotoFileName | rowguid | ModifiedDate |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 680 | HL Road Frame - Black, 58 | FR-R92B-58 | Negro | 1059.3100 | 1431.5000 | 58 | 1016.04 | 18 | 6 | 2002-06-01 00:00:00.000 | [null] | [null] | [binary] | no_image_available_small.gif | 43DD68D6-14A4-461F-9069-55309D90EA7E | 2008-03-11 10:01:36.827 |
- ProductCategoryIDidentificador único para cada categoría de producto (PK)
- ParentProductCategoryIDID de la categoría de producto padre
- Namenombre de la categoría de producto
- rowguidguid
- ModifiedDatemarca de tiempo de la creación de la fila o la última actualización
- CLAVE PRIMARIA, btree (ProductCategoryID)
- CLAVE FORÁNEA (ParentProductCategoryID) REFERENCIAS ProductCategory(ProductCategoryID)
| ProductCategoryID | ParentProductCategoryID | Name | rowguid | ModifiedDate |
|---|---|---|---|---|
| 1 | [null] | Bicicletas | CFBDA25C-DF71-47A7-B81B-64EE161AA37C | 2002-06-01 00:00:00.000 |
- ProductDescriptionIDidentificador único del registro (PK)
- Descriptiondescripción del producto
- rowguidguid
- ModifiedDatemarca de tiempo de creación o última actualización de la fila
- CLAVE PRIMARIA, btree (ProductDescriptionID)
| ProductDescriptionID | Description | rowguid | ModifiedDate |
|---|---|---|---|
| 4 | Aluminum alloy cups; large diameter spindle. | DFEBA528-DA11-4650-9D86-CAFDA7294EB0 | 2007-06-01 00:00:00.000 |
- ProductModelIDidentificador único de cada registro (PK)
- Namenombre del modelo de producto
- CatalogDescriptiondescripción en formato XML
- rowguidguid
- ModifiedDatemarca de tiempo de creación o última actualización de la fila
- CLAVE PRIMARIA, btree (ProductModelID)
| ProductModelID | Name | CatalogDescription | rowguid | ModifiedDate |
|---|---|---|---|---|
| 1 | Classic Vest | [null] | 29321D47-1E4C-4AAC-887C-19634328C25E | 2007-06-01 00:00:00.000 |
- ProductModelIDidentificador del modelo en la tabla ProductModel
- ProductDescriptionIDidentificador de la descripción en la tabla ProductDescription
- Culturecódigo de idioma en formato ISO
- rowguidguid
- ModifiedDatemarca de tiempo de creación o última actualización de la fila
- CLAVE PRIMARIA, btree (ProductModelID, ProductDescriptionID)
- CLAVE FORÁNEA (ProductModelID) REFERENCIAS ProductModel(ProductModelID)
- CLAVE FORÁNEA (ProductDescriptionID) REFERENCIAS ProductDescription(ProductDescriptionID)
| ProductModelID | ProductDescriptionID | Culture | rowguid | ModifiedDate |
|---|---|---|---|---|
| 1 | 1199 | en | 4D00B649-027A-4F99-A380-F22A46EC8638 | 2007-06-01 00:00:00.000 |
- SalesOrderIDclave foránea que referencia la tabla SalesOrderHeader
- SalesOrderDetailIDidentificador único del registro en la tabla
- OrderQtycantidad
- ProductIDclave foránea que referencia la tabla Product
- UnitPriceprecio por unidad
- UnitPriceDiscountdescuento sobre el precio unitario
- LineTotalimporte total de la línea
- rowguidguid
- ModifiedDatemarca de tiempo de creación o última actualización de la fila
- CLAVE PRIMARIA, btree (SalesOrderID, SalesOrderDetailID, ProductID)
- CLAVE FORÁNEA (SalesOrderID) REFERENCIAS SalesOrderHeader(SalesOrderID)
- CLAVE FORÁNEA (ProductID) REFERENCIAS Product(ProductID)
| SalesOrderID | SalesOrderDetailID | OrderQty | ProductID | UnitPrice | UnitPriceDiscount | LineTotal | rowguid | ModifiedDate |
|---|---|---|---|---|---|---|---|---|
| 71774 | 110562 | 1 | 836 | 356.8980 | .0000 | 356.898000 | E3A1994C-7A68-4CE8-96A3-77FDD3BBD730 | 2008-06-01 00:00:00.000 |
- SalesOrderIDidentificador único del registro en la tabla (PK)
- RevisionNumbernúmero de revisión
- OrderDatefecha de creación del pedido
- DueDatefecha de vencimiento del pago del pedido
- ShipDatefecha de envío del pedido
- Statusestado del pedido
- OnlineOrderFlagpedido en línea (sí/no)
- SalesOrderNumbernúmero de pedido
- PurchaseOrderNumbernúmero de orden de compra
- AccountNumbernúmero de cuenta
- CustomerIDclave foránea que referencia la tabla Customer
- ShipToAddressIDclave foránea a la tabla Address: dirección de entrega
- BillToAddressIDclave foránea a la tabla Address: dirección de facturación
- ShipMethodmétodo de envío
- CreditCardApprovalCode
código de aprobación de la tarjeta de crédito - SubTotalsubtotal
- TaxAmtimpuestos
- Freightcoste de envío
- TotalDuetotal
- Commentcomentario
- rowguidguid
- ModifiedDatemarca de tiempo de creación o última actualización de la fila
- CLAVE PRIMARIA, btree (SalesOrderID, CustomerID, ShipToAddressID, BillToAddressID)
- CLAVE FORÁNEA (CustomerID) REFERENCIAS Customer(CustomerID)
- CLAVE FORÁNEA (ShipToAddressID) REFERENCIAS Address(AddressID)
- CLAVE FORÁNEA (BillToAddressID) REFERENCIAS Address(AddressID)
| SalesOrderID | RevisionNumber | OrderDate | DueDate | ShipDate | Status | OnlineOrderFlag | SalesOrderNumber | PurchaseOrderNumber | AccountNumber | CustomerID | ShipToAddressID | BillToAddressID | ShipMethod | CreditCardApprovalCode | SubTotal | TaxAmt | Freight | TotalDue | Comment | rowguid | ModifiedDate |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 71774 | 2 | 2008-06-01 00:00:00.000 | 2008-06-13 00:00:00.000 | 2008-06-08 00:00:00.000 | 5 | 0 | SO71774 | PO348186287 | 10-4020-000609 | 29847 | 1092 | 1092 | CARGO TRANSPORT 5 | [null] | 880.3484 | 70.4279 | 22.0087 | 972.7850 | [null] | 89E42CDC-8506-48A2-B89B-EB3E64E3554E | 2008-06-08 00:00:00.000 |
Consultas de ejemplo
Estas consultas muestran cómo se relacionan los datos. Copia cualquiera y ejecútala en el playground.
Un cliente y sus direcciones: una relación de muchos a muchos mediante CustomerAddress.
SELECT TOP 3 c.FirstName, c.LastName, ca.AddressType, a.City
FROM Customer c
JOIN CustomerAddress ca ON ca.CustomerID = c.CustomerID
JOIN Address a ON a.AddressID = ca.AddressID
ORDER BY c.CustomerID;
| FirstName | LastName | AddressType | City |
|---|---|---|---|
| Catherine | Abel | Main Office | Van Nuys |
| Kim | Abercrombie | Main Office | Branch |
| Frances | Adams | Main Office | Modesto |
Un pedido y sus líneas: de la cabecera del pedido a los productos.
SELECT TOP 3 h.SalesOrderID, h.OrderDate, p.Name, d.OrderQty, d.UnitPrice
FROM SalesOrderHeader h
JOIN SalesOrderDetail d ON d.SalesOrderID = h.SalesOrderID
JOIN Product p ON p.ProductID = d.ProductID
ORDER BY h.SalesOrderID, d.SalesOrderDetailID;
| SalesOrderID | OrderDate | Name | OrderQty | UnitPrice |
|---|---|---|---|---|
| 71774 | 2008-06-01 00:00:00.000 | ML Road Frame-W - Yellow, 48 | 1 | 356.8980 |
| 71774 | 2008-06-01 00:00:00.000 | ML Road Frame-W - Yellow, 38 | 1 | 356.8980 |
| 71776 | 2008-06-01 00:00:00.000 | Rear Brakes | 1 | 63.9000 |
Ejercicios de SQL por tema
La base AdventureWorks tiene 36 ejercicios, desde filtros sencillos hasta análisis de pedidos y productos. Las soluciones se comprueban automáticamente en un SQL Server real. El número de la derecha es la cantidad de ejercicios del tema; los puntos de color muestran el rango de dificultad.
Por dónde empezar
Los primeros ejercicios de la base AdventureWorks:
- Categorías de Productos
- Lista de Productos
- Lista filtrada de productos
- Diez productos más pesados
- Obtener lista de tablas (SQL Server)
- Clientes con Números Pares
- Clientes por Prefijo de Teléfono
- Números de Teléfono Duplicados
- Listar Clientes Únicos
- Correos Electrónicos Duplicados
Todos los ejercicios de AdventureWorks →
Preguntas frecuentes
¿Hay que instalar SQL Server para usar AdventureWorks?
No. Los ejercicios y el playground de SQLtest.online ejecutan las consultas en nuestros servidores, así que basta con un navegador. En el playground, AdventureWorks está disponible en SQL Server 2022.
¿En qué se diferencia AdventureWorks LT del AdventureWorks completo?
La base completa tiene decenas de tablas en varios esquemas (Sales, Production, Person y otros). La edición LT conserva el núcleo del negocio, clientes, productos y pedidos, en unas diez tablas, lo que facilita el aprendizaje.
¿Qué dialecto de SQL se usa?
T-SQL, el dialecto de SQL Server. Por ejemplo, usa TOP u OFFSET … FETCH en lugar de LIMIT.