Nouveau mois, nouveaux objectifs. Votre aide fait avancer le projet. 🖥️ Soutenez sqltest →
Code SQL copié dans le presse-papiers

Base de données AdventureWorks LT : schéma, tables et exercices SQL

AdventureWorks LT est la base d'exemple de Microsoft SQL Server d'un fabricant de vélos : clients, produits, catégories de produits et commandes. Sur SQLtest.online, vous l'interrogez directement dans le navigateur : vous résolvez des exercices corrigés automatiquement et exécutez vos propres requêtes dans le bac à sable, sans rien installer.

  • 10 tables principales
  • 847 clients
  • 295 produits
  • 34 exercices SQL

Qu'est-ce que AdventureWorks

AdventureWorks est la base d'exemple que Microsoft fournit pour SQL Server et Azure SQL. Elle décrit Adventure Works Cycles, une entreprise fictive qui fabrique et vend des vélos, des pièces et des accessoires.

Le site utilise AdventureWorks LT, l'édition allégée : la même activité en une dizaine de tables au lieu de plusieurs dizaines. Elle permet de s'entraîner au T-SQL, notamment TOP, les auto-jointures sur l'arbre des catégories et les relations plusieurs-à-plusieurs.

Diagramme ER

Le diagramme montre les tables de AdventureWorks et les clés étrangères qui les relient. Cliquez pour l'ouvrir en taille réelle.

Diagramme ER de la base de données AdventureWorks

Contenu de la base

Les tables se répartissent en trois groupes.

Clients

Customer, Address et la table de liaison CustomerAddress, qui stocke aussi le type d'adresse.

Produits

Product, ProductCategory (un arbre : chaque catégorie peut avoir un parent), ProductModel et des descriptions en plusieurs langues.

Ventes

SalesOrderHeader contient les commandes, SalesOrderDetail leurs lignes.

Les 32 commandes de cette édition sont toutes datées du 1er juin 2008. Les descriptions de produits sont reliées aux modèles par ProductModelProductDescription, qui stocke aussi la langue (culture) de chaque description. Les tables de service BuildVersion, ErrorLog et sysdiagrams ne sont pas utilisées dans les exercices.

Volume de données des tables :

TableLignesContenu
Customer847clients
CustomerAddress417liens client ↔ adresse
Address450adresses
SalesOrderHeader32commandes
SalesOrderDetail542lignes de commande
Product295produits
ProductCategory41catégories de produits
ProductModel128modèles de produits
ProductDescription762descriptions de produits
ProductModelProductDescription762liens modèle ↔ description par langue

Structure des tables

Cliquez sur une table pour voir ses colonnes, une ligne d'exemple et ses clés.

Liste des tables

Address - table des adresses.
  • AddressIDidentifiant unique pour chaque adresse (PK)
  • AddressLine1première ligne de l'adresse
  • AddressLine2deuxième ligne de l'adresse
  • Cityville
  • StateProvinceétat ou province
  • CountryRegionpays
  • PostalCodecode postal
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des clients.
  • CustomerIDidentifiant unique pour chaque client (PK)
  • NameStyle0 = Les données dans FirstName et LastName sont stockées au format occidental (prénom, nom). 1 = Format oriental (nom, prénom). Par défaut : 0
  • Titletitre
  • FirstNameprénom
  • MiddleNamedeuxième prénom
  • LastNamenom de famille
  • Suffixsuffixe
  • CompanyNamenom de l'entreprise
  • SalesPersoncommercial
  • EmailAddresse-mail
  • Phonenuméro de téléphone
  • PasswordHashhash du mot de passe
  • PasswordSaltsel du mot de passe
  • rowguidrowguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - relations entre clients et adresses.
  • CustomerIDidentifiant du client dans la table Customer
  • AddressIDidentifiant de l'adresse dans la table Address
  • AddressTypetype d'adresse
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des produits.
  • ProductIDidentifiant unique pour chaque produit (PK)
  • Namenom du produit
  • ProductNumbernuméro d'article
  • Colorcouleur du produit
  • StandardCostcoût de fabrication du produit
  • ListPriceprix du produit au catalogue
  • Sizetaille du produit
  • Weightpoids du produit
  • ProductCategoryIDclé étrangère pointant vers la table ProductCategory
  • ProductModelIDclé étrangère pointant vers la table ProductModel
  • SellStartDatehorodatage de la date de début de vente
  • SellEndDatehorodatage de la date de fin de vente
  • DiscontinuedDatehorodatage de la date d'arrêt de vente
  • ThumbNailPhotophoto miniature du produit
  • ThumbnailPhotoFileName
    nom du fichier de la photo miniature
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des catégories de produits.
  • ProductCategoryIDidentifiant unique pour chaque catégorie de produit (PK)
  • ParentProductCategoryIDidentifiant de la catégorie de produit parente
  • Namenom de la catégorie de produit
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des descriptions de produits.
  • ProductDescriptionIDidentifiant unique pour l'enregistrement (PK)
  • Descriptiondescription du produit
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des modèles de produits.
  • ProductModelIDidentifiant unique pour chaque enregistrement (PK)
  • Namenom du modèle de produit
  • CatalogDescriptiondescription au format XML
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des descriptions des modèles de produits.
  • ProductModelIDidentifiant du produit dans la table ProductModel
  • ProductDescriptionIDidentifiant de la description dans la table ProductDescription
  • Culturecode de langue au format ISO
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - table des détails des commandes de vente.
  • SalesOrderIDclé étrangère référençant la table SalesOrderHeader
  • SalesOrderDetailIDidentifiant unique de l'enregistrement dans la table
  • OrderQtyquantité
  • ProductIDclé étrangère référençant la table Product
  • UnitPriceprix unitaire des marchandises
  • UnitPriceDiscountprix unitaire du produit avec remise
  • LineTotalmontant total par ligne
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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 - commandes de vente de produits.
  • SalesOrderIDidentifiant unique de l'enregistrement dans la table (PK)
  • RevisionNumbernuméro de révision
  • OrderDatehorodatage de la date de création de la commande
  • DueDatehorodatage de la date d'échéance de paiement de la commande
  • ShipDatehorodatage de la date d'expédition de la commande
  • Statusstatut de la commande
  • OnlineOrderFlagcommande en ligne (oui/non)
  • SalesOrderNumbernuméro de commande
  • PurchaseOrderNumbernuméro d'achat
  • AccountNumbernuméro de compte
  • CustomerIDclé étrangère référençant la table Customer
  • ShipToAddressIDclé étrangère référençant la table Address définissant l'adresse de livraison
  • BillToAddressIDclé étrangère référençant la table Address définissant l'adresse de facturation
  • ShipMethodméthode d'expédition
  • CreditCardApprovalCode
    code de confirmation de carte de crédit
  • SubTotalsous-total
  • TaxAmttaxes
  • Freightcoût de livraison
  • TotalDuetotal
  • Commentcommentaire
  • rowguidguid
  • ModifiedDatehorodatage de la création ou de la dernière mise à jour de la ligne
  • 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

Exemples de requêtes

Ces requêtes montrent comment les données sont reliées. Copiez-en une et exécutez-la dans le bac à sable.

Un client et ses adresses : une relation plusieurs-à-plusieurs via 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

Une commande et ses lignes : de l'en-tête de commande aux produits.

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

Exercices SQL par thème

La base AdventureWorks compte 34 exercices, des filtres simples jusqu'à l'analyse des commandes et des produits. Les solutions sont vérifiées automatiquement sur un vrai SQL Server. Le nombre à droite indique combien d'exercices compte le thème ; les points colorés montrent la plage de difficulté.

Par où commencer

Les premiers exercices sur la base AdventureWorks :

  1. Catégories de produits
  2. Liste des produits
  3. Liste filtrée des produits
  4. Dix produits les plus lourds
  5. Lister les tables (SQL Server)
  6. Trouver les clients avec des IDs pairs
  7. Trouver les clients par préfixe téléphonique
  8. Trouver les numéros de téléphone en double
  9. Obtenir la liste des clients uniques
  10. Emails en double

Tous les exercices AdventureWorks →

Questions fréquentes

Faut-il installer SQL Server pour utiliser AdventureWorks ?

Non. Les exercices et le bac à sable de SQLtest.online exécutent les requêtes sur nos serveurs : un navigateur suffit. Dans le bac à sable, AdventureWorks est disponible sous SQL Server 2022.

Quelle différence entre AdventureWorks LT et l'AdventureWorks complet ?

La base complète compte des dizaines de tables réparties dans plusieurs schémas (Sales, Production, Person et d'autres). L'édition LT garde le cœur de l'activité, clients, produits et commandes, en une dizaine de tables, ce qui facilite l'apprentissage.

Quel dialecte SQL utilise-t-on ?

Le T-SQL, le dialecte de SQL Server. Par exemple, utilisez TOP ou OFFSET … FETCH au lieu de LIMIT.