Novo mês, novos objetivos. Sua ajuda ajuda o projeto a avançar. 🖥️ Apoie o sqltest →
Código SQL copiado para a área de transferência

Banco de dados AdventureWorks LT: esquema, tabelas e exercícios de SQL

AdventureWorks LT é o banco de exemplo do Microsoft SQL Server de um fabricante de bicicletas: clientes, produtos, categorias de produtos e pedidos. No SQLtest.online você consulta o banco direto no navegador: resolve exercícios com correção automática e executa suas próprias consultas no playground, sem instalar nada.

  • 10 tabelas principais
  • 847 clientes
  • 295 produtos
  • 34 exercícios de SQL

O que é o AdventureWorks

AdventureWorks é o banco de exemplo que a Microsoft distribui para o SQL Server e o Azure SQL. Ele descreve a Adventure Works Cycles, uma empresa fictícia que fabrica e vende bicicletas, peças e acessórios.

O site usa o AdventureWorks LT, a edição leve: o mesmo negócio em cerca de dez tabelas em vez de dezenas. É ótimo para praticar T-SQL, incluindo TOP, autojunções na árvore de categorias e relacionamentos de muitos para muitos.

Diagrama ER

O diagrama mostra as tabelas do AdventureWorks e as chaves estrangeiras entre elas. Clique para abrir em tamanho real.

Diagrama ER do banco de dados AdventureWorks

O que há no banco

As tabelas se dividem em três grupos.

Clientes

Customer, Address e a tabela de ligação CustomerAddress, que também guarda o tipo de endereço.

Produtos

Product, ProductCategory (uma árvore: cada categoria pode ter um pai), ProductModel e descrições em vários idiomas.

Vendas

SalesOrderHeader guarda os pedidos e SalesOrderDetail os itens.

Todos os 32 pedidos desta edição têm a data de 1º de junho de 2008. As descrições dos produtos se ligam aos modelos por ProductModelProductDescription, que também guarda o idioma (culture) de cada descrição. As tabelas de serviço BuildVersion, ErrorLog e sysdiagrams não são usadas nos exercícios.

Quantos dados há nas tabelas:

TabelaLinhasConteúdo
Customer847clientes
CustomerAddress417ligações cliente ↔ endereço
Address450endereços
SalesOrderHeader32pedidos
SalesOrderDetail542itens dos pedidos
Product295produtos
ProductCategory41categorias de produtos
ProductModel128modelos de produtos
ProductDescription762descrições de produtos
ProductModelProductDescription762ligações modelo ↔ descrição por idioma

Estrutura das tabelas

Clique em uma tabela para ver suas colunas, uma linha de exemplo e as chaves.

Lista de tabelas

Address - Tabela de endereços.
  • AddressIDum identificador único para cada endereço
  • AddressLine1a primeira linha do endereço
  • AddressLine2a segunda linha do endereço
  • Citycidade
  • StateProvinceestado ou província
  • CountryRegionpaís
  • PostalCodecódigo postal
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (AddressID)
AddressID AddressLine1 AddressLine2 City StateProvince CountryRegion PostalCode rowguid ModifiedDate
9 8713 Yosemite Ct. null Bothell Washington United States 98011 268AF621-76D7-4C78-9441-144FD139821A 2006-07-01 00:00:00.000
Customer - Tabela de clientes.
  • CustomerIDum identificador único para cada cliente
  • NameStyle0 = Os dados em FirstName e LastName são armazenados no estilo ocidental (primeiro nome, sobrenome). 1 = Estilo oriental (sobrenome, primeiro nome). Padrão: 0
  • Titletítulo
  • FirstNamenome
  • MiddleNamenome do meio
  • LastNamesobrenome
  • Suffixsufixo
  • CompanyNamenome da empresa
  • SalesPersonvendedor
  • EmailAddresse-mail
  • Phonenúmero de telefone
  • PasswordHashhash da senha
  • PasswordSaltsalt
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (CustomerID)
CustomerID NameStyle Title FirstName MiddleName LastName Suffix CompanyName SalesPerson EmailAddress Phone PasswordHash PasswordSalt rowguid ModifiedDate
1 0 Mr. 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 - Tabela de relações entre clientes e endereços.
  • CustomerIDidentificador do cliente na tabela Customer
  • AddressIDidentificador do endereço na tabela Address
  • AddressTypetipo de endereço
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (CustomerID, AddressID)
  • FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
  • FOREIGN KEY (AddressID) REFERENCES Address(AddressID)
CustomerID AddressID AddressType rowguid ModifiedDate
29485 1086 Main Office 16765338-DBE4-4421-B5E9-3836B9278E63 2007-09-01 00:00:00.000
Product - Tabela de produtos.
  • ProductIDum identificador único para cada produto
  • Namenome do produto
  • ProductNumbernúmero do artigo
  • Colorcor do produto
  • StandardCostpreço do produto
  • ListPricepreço do produto no catálogo
  • Sizetamanho do produto
  • Weightpeso do produto
  • ProductCategoryIDchave estrangeira que aponta para a tabela ProductCategory - define a categoria do produto
  • ProductModelIDchave estrangeira que aponta para a tabela ProductModel - define o modelo do produto
  • SellStartDatedata e hora do início das vendas
  • SellEndDatedata e hora do fim das vendas
  • DiscontinuedDatedata e hora da descontinuação
  • ThumbNailPhotominiatura da foto do produto
  • ThumbnailPhotoFileNamenome do arquivo da miniatura da foto
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (ProductID, ProductCategoryID, ProductModelID)
  • FOREIGN KEY (ProductCategoryID) REFERENCES ProductCategory(ProductCategoryID)
  • FOREIGN KEY (ProductModelID) REFERENCES 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 Black 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 - Tabela de categorias de produtos.
  • ProductCategoryIDum identificador único para cada categoria de produto
  • ParentProductCategoryIDID da categoria de produto pai
  • Namenome da categoria de produto
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (ProductCategoryID)
  • FOREIGN KEY (ParentProductCategoryID) REFERENCES ProductCategory(ProductCategoryID)
ProductCategoryID ParentProductCategoryID Name rowguid ModifiedDate
1 [null] Bikes CFBDA25C-DF71-47A7-B81B-64EE161AA37C 2002-06-01 00:00:00.000
ProductDescription - Tabela de descrições de produtos.
  • ProductDescriptionIDum ID único para cada descrição de produto
  • Descriptiondescrição do produto
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, 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 - Tabela de modelos de produtos.
  • ProductModelIDum ID único para cada modelo de produto
  • Namenome do modelo de produto
  • CatalogDescriptiondescrição em formato XML
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (ProductModelID)
ProductModelID Name CatalogDescription rowguid ModifiedDate
1 Classic Vest [null] 29321D47-1E4C-4AAC-887C-19634328C25E 2007-06-01 00:00:00.000
ProductModelProductDescription - Tabela de relações entre modelos de produtos e descrições de produtos.
  • ProductModelIDidentificador do modelo de produto na tabela ProductModel
  • ProductDescriptionIDID da descrição do produto na tabela ProductDescription
  • Culturecódigo do idioma no formato ISO
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (ProductModelID, ProductDescriptionID)
  • FOREIGN KEY (ProductModelID) REFERENCES ProductModel(ProductModelID)
  • FOREIGN KEY (ProductDescriptionID) REFERENCES ProductDescription(ProductDescriptionID)
ProductModelID ProductDescriptionID Culture rowguid ModifiedDate
1 1199 en 4D00B649-027A-4F99-A380-F22A46EC8638 2007-06-01 00:00:00.000
SalesOrderDetail - Tabela de detalhes de pedidos de venda de produtos.
  • SalesOrderIDchave estrangeira referenciando a tabela SalesOrderHeader
  • SalesOrderDetailIDum identificador único do registro na tabela
  • OrderQtyquantidade
  • ProductIDuma chave estrangeira referenciando a tabela Product
  • UnitPricepreço por unidade de mercadoria
  • UnitPriceDiscountpreço por unidade de produto com desconto
  • LineTotalTotal
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (SalesOrderID, SalesOrderDetailID, ProductID)
  • FOREIGN KEY (SalesOrderID) REFERENCES SalesOrderHeader(SalesOrderID)
  • FOREIGN KEY (ProductID) REFERENCES 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 - Tabela de cabeçalhos de pedidos de venda de produtos.
  • SalesOrderIDum identificador único do registro na tabela
  • RevisionNumbernúmero da revisão
  • OrderDatedata e hora da criação do pedido
  • DueDatedata e hora do vencimento do pedido
  • ShipDatedata e hora do envio do pedido
  • Statusstatus do pedido
  • OnlineOrderFlagpedido online (sim/não)
  • SalesOrderNumbernúmero do pedido
  • PurchaseOrderNumbernúmero da compra
  • AccountNumbernúmero da conta
  • CustomerIDchave estrangeira referenciando a tabela Customer - define o cliente
  • ShipToAddressIDchave estrangeira referenciando a tabela Address - define o endereço de entrega
  • BillToAddressIDchave estrangeira referenciando a tabela Address - define o endereço de cobrança
  • ShipMethodmétodo de entrega
  • CreditCardApprovalCodecódigo de aprovação do cartão de crédito
  • SubTotalsubtotal
  • TaxAmtimpostos
  • Freightcusto de entrega
  • TotalDuetotal
  • Commentcomentário
  • rowguidguid
  • ModifiedDatedata de criação/atualização
  • PRIMARY KEY, btree (SalesOrderID, CustomerID, ShipToAddressID, BillToAddressID)
  • FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
  • FOREIGN KEY (ShipToAddressID) REFERENCES Address(AddressID)
  • FOREIGN KEY (BillToAddressID) REFERENCES 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

Exemplos de consultas

Estas consultas mostram como os dados se relacionam. Copie qualquer uma e execute no playground.

Um cliente e seus endereços: ligação de muitos para muitos por 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

Um pedido e seus itens: do cabeçalho do pedido aos produtos.

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

Exercícios de SQL por tema

Há 34 exercícios no banco AdventureWorks, de filtros simples a análises de pedidos e produtos. As soluções são verificadas automaticamente em um SQL Server real. O número à direita é a quantidade de exercícios do tema; os pontos coloridos mostram a faixa de dificuldade.

Por onde começar

Os primeiros exercícios do banco AdventureWorks:

  1. Categorias de produtos
  2. Lista de produtos
  3. Lista de produtos filtrados
  4. Dez produtos mais pesados
  5. Obter lista de tabelas (SQL Server)
  6. Encontrar clientes com números pares
  7. Encontrar clientes por prefixo de telefone
  8. Encontrar números de telefone duplicados
  9. Obter lista de clientes únicos
  10. Emails Duplicados

Todos os exercícios do AdventureWorks →

Perguntas frequentes

Preciso instalar o SQL Server para usar o AdventureWorks?

Não. Os exercícios e o playground do SQLtest.online executam as consultas nos nossos servidores, então basta um navegador. No playground, o AdventureWorks está disponível no SQL Server 2022.

Qual a diferença entre o AdventureWorks LT e o AdventureWorks completo?

O banco completo tem dezenas de tabelas em vários esquemas (Sales, Production, Person e outros). A edição LT mantém o núcleo do negócio, clientes, produtos e pedidos, em cerca de dez tabelas, o que facilita o aprendizado.

Qual dialeto de SQL é usado?

T-SQL, o dialeto do SQL Server. Por exemplo, use TOP ou OFFSET … FETCH em vez de LIMIT.