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.
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 :
| Table | Lignes | Contenu |
|---|---|---|
| Customer | 847 | clients |
| CustomerAddress | 417 | liens client ↔ adresse |
| Address | 450 | adresses |
| SalesOrderHeader | 32 | commandes |
| SalesOrderDetail | 542 | lignes de commande |
| Product | 295 | produits |
| ProductCategory | 41 | catégories de produits |
| ProductModel | 128 | modèles de produits |
| ProductDescription | 762 | descriptions de produits |
| ProductModelProductDescription | 762 | liens 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
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
- 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;
| FirstName | LastName | AddressType | City |
|---|---|---|---|
| Catherine | Abel | Main Office | Van Nuys |
| Kim | Abercrombie | Main Office | Branch |
| Frances | Adams | Main Office | Modesto |
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;
| 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 |
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 :
- Catégories de produits
- Liste des produits
- Liste filtrée des produits
- Dix produits les plus lourds
- Lister les tables (SQL Server)
- Trouver les clients avec des IDs pairs
- Trouver les clients par préfixe téléphonique
- Trouver les numéros de téléphone en double
- Obtenir la liste des clients uniques
- 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.