🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
Código SQL copiado al portapapeles

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.

Diagrama ER de la base de datos AdventureWorks

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:

TablaFilasContenido
Customer847clientes
CustomerAddress417relaciones cliente ↔ dirección
Address450direcciones
SalesOrderHeader32pedidos
SalesOrderDetail542líneas de pedido
Product295productos
ProductCategory41categorías de productos
ProductModel128modelos de productos
ProductDescription762descripciones de productos
ProductModelProductDescription762relaciones 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

Address - tabla de direcciones.
  • 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
Customer - tabla de clientes.
  • 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
CustomerAddress - relaciones entre clientes y direcciones.
  • 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
Product - tabla de productos.
  • 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
ProductCategory - tabla de categorías de productos.
  • 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
ProductDescription - tabla de descripciones de productos.
  • 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
ProductModel - tabla de modelos de productos.
  • 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
ProductModelProductDescription - tabla de descripciones de modelos de productos.
  • 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
SalesOrderDetail - tabla de detalles de pedidos de venta.
  • 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
SalesOrderHeader - pedidos de venta de productos.
  • 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;
FirstNameLastNameAddressTypeCity
CatherineAbelMain OfficeVan Nuys
KimAbercrombieMain OfficeBranch
FrancesAdamsMain OfficeModesto

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;
SalesOrderIDOrderDateNameOrderQtyUnitPrice
717742008-06-01 00:00:00.000ML Road Frame-W - Yellow, 481356.8980
717742008-06-01 00:00:00.000ML Road Frame-W - Yellow, 381356.8980
717762008-06-01 00:00:00.000Rear Brakes163.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:

  1. Categorías de Productos
  2. Lista de Productos
  3. Lista filtrada de productos
  4. Diez productos más pesados
  5. Obtener lista de tablas (SQL Server)
  6. Clientes con Números Pares
  7. Clientes por Prefijo de Teléfono
  8. Números de Teléfono Duplicados
  9. Listar Clientes Únicos
  10. 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.