База данных AdventureWorks LT: схема, таблицы и SQL-задачи
AdventureWorks LT — учебная база Microsoft SQL Server о производителе велосипедов: клиенты, товары, категории товаров и заказы. На SQLtest.online с ней можно работать прямо в браузере: решать задачи с автоматической проверкой и писать свои запросы в песочнице, ничего не устанавливая.
- 10 основных таблиц
- 847 клиентов
- 295 товаров
- 34 SQL-задачи
Что такое AdventureWorks
AdventureWorks — пример базы данных, который Microsoft поставляет для SQL Server и Azure SQL. Она описывает вымышленную компанию Adventure Works Cycles, которая производит и продаёт велосипеды, запчасти и аксессуары.
На сайте используется AdventureWorks LT — облегчённая версия: тот же бизнес примерно в десяти таблицах вместо нескольких десятков. На ней удобно тренировать T-SQL: TOP, самосоединение по дереву категорий и связи «многие ко многим».
ER-диаграмма
Диаграмма показывает таблицы AdventureWorks и связи между ними по внешним ключам. Нажмите, чтобы открыть её в полном размере.
Из чего состоит база
Таблицы делятся на три группы.
Клиенты
Customer, Address и таблица связей CustomerAddress, где хранится и тип адреса.
Товары
Product, ProductCategory (дерево: у категории может быть родитель), ProductModel и описания на нескольких языках.
Продажи
SalesOrderHeader — заказы, SalesOrderDetail — их строки.
Все 32 заказа в этой версии датированы 1 июня 2008 года. Описания товаров связаны с моделями через ProductModelProductDescription, где указан и язык (culture) описания. Служебные таблицы BuildVersion, ErrorLog и sysdiagrams в задачах не используются.
Сколько данных в таблицах:
| Таблица | Строк | Что хранит |
|---|---|---|
| Customer | 847 | клиенты |
| CustomerAddress | 417 | связи клиентов и адресов |
| Address | 450 | адреса |
| SalesOrderHeader | 32 | заказы |
| SalesOrderDetail | 542 | строки заказов |
| Product | 295 | товары |
| ProductCategory | 41 | категории товаров |
| ProductModel | 128 | модели товаров |
| ProductDescription | 762 | описания товаров |
| ProductModelProductDescription | 762 | связи моделей и описаний по языкам |
Структура таблиц
Нажмите на таблицу, чтобы увидеть её столбцы, пример строки и ключи.
Список таблиц
- AddressIDуникальный идентификатор записи (ПК)
- AddressLine1первая строка адреса
- AddressLine2вторая строка адреса
- Cityгород
- StateProvinceштат или провинция
- CountryRegionстрана
- PostalCodeпочтовый индекс
- rowguidguid
- ModifiedDateвременная метка создания или последнего обновления строки
- 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 |
- CustomerIDуникальный идентификатор записи (ПК)
- NameStyle0 = Данные в FirstName и LastName хранятся в западном стиле (имя, фамилия). 1 = Восточный стиль (фамилия, имя) порядок. По умолчанию: 0
- Titleобращение
- FirstNameимя
- MiddleNameвторое имя
- LastNameфамилия
- Suffixсуффикс
- CompanyNameназвание компании
- SalesPersonконтактная персона
- EmailAddressE-mail
- Phoneномер телефона
- PasswordHashхеш пароля
- PasswordSaltсоль
- rowguidrowguid
- ModifiedDateдата и время последнего изменения
- 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 |
- CustomerIDуникальный идентификатор записи (ПК)
- AddressIDидентификатор адреса в таблице Address
- AddressTypeтип адреса
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- ProductIDуникальный идентификатор записи (ПК)
- Nameнаименование товара
- ProductNumberартикул
- Colorцвет товара
- StandardCostцена товара
- ListPriceцена товара в каталоге
- Sizeразмер товара
- Weightвес товара
- ProductCategoryIDидентификатор категории товара
- ProductModelIDидентификатор модели товара
- SellStartDateвременная метка даты начала продаж
- SellEndDateвременная метка даты окончания продаж
- DiscontinuedDateвременная метка даты окончания продаж
- ThumbNailPhotoминиатюра фото товара
- ThumbnailPhotoFileNameимя файла мини фото
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- ProductCategoryIDуникальный идентификатор записи (ПК)
- ParentProductCategoryIDID родительской категории
- Nameназвание категории товара
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- ProductDescriptionIDуникальный идентификатор записи (ПК)
- Descriptionописание товара
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- ProductModelIDуникальный идентификатор записи (ПК)
- Nameназвание модели товара
- CatalogDescriptionописание в формате XML
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- ProductModelIDидентификатор товара
- ProductDescriptionIDID описания товара
- Cultureязыковой код в формате ISO
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- SalesOrderIDидентификатор заказа
- SalesOrderDetailIDуникальный ID строки
- OrderQtyколичество
- ProductIDидентификатор товара.
- UnitPriceцена за единицу товара
- UnitPriceDiscountцена за единицу товара со скидкой
- LineTotalИтого
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
- SalesOrderIDуникальный идентификатор записи (ПК)
- RevisionNumberномер ревизии
- OrderDateвременная метка создания даты заказа
- DueDateвременная метка даты оплаты заказа
- ShipDateвременная метка даты отправки заказа
- Statusстатус заказа
- OnlineOrderFlagонлайн-заказ (да/нет)
- SalesOrderNumberномер заказа
- PurchaseOrderNumberномер покупки
- AccountNumberномер счета
- CustomerIDидентификатор клиента
- ShipToAddressIDидентификатор адреса доставки
- BillToAddressIDидентификатор адреса для выставления счёта счета
- ShipMethodметод доставки
- CreditCardApprovalCode
код подтверждения кредитной карты - SubTotalпромежуточный итог
- TaxAmtналоги
- Freightстоимость доставки
- TotalDueитого
- Commentкомментарий
- rowguidguid
- ModifiedDateдата и время последнего изменения
- 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 |
Примеры запросов
Эти запросы показывают, как связаны данные. Скопируйте любой и запустите в песочнице.
Клиент и его адреса — связь «многие ко многим» через 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 |
Заказ и его строки — от заголовка заказа к товарам:
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 |
SQL-задачи по темам
Задач на базе AdventureWorks: 34 — от простых фильтров до аналитики по заказам и товарам. Решение проверяется автоматически на настоящем SQL Server. Число справа — количество задач в теме, цветные метки — диапазон сложности.
С чего начать
Первые задачи по базе AdventureWorks:
- Категории товаров
- Список товаров
- Отфильтрованный список товаров
- Десять самых тяжелых товаров
- Получить список таблиц (SQL Server)
- Выбрать клиентов с чётными номерами
- Поиск клиентов по префиксу телефона
- Получить дубликаты телефонных номеров
- Список уникальных клиентов
- Дубликаты Email
Все задачи по AdventureWorks →
Частые вопросы
Нужно ли устанавливать SQL Server, чтобы работать с AdventureWorks?
Нет. Задачи и песочница на SQLtest.online выполняют запросы на сервере, достаточно браузера. В песочнице AdventureWorks доступна в SQL Server 2022.
Чем AdventureWorks LT отличается от полной AdventureWorks?
В полной базе десятки таблиц в нескольких схемах (Sales, Production, Person и другие). Версия LT оставляет основу бизнеса — клиентов, товары и заказы — примерно в десяти таблицах, поэтому учиться на ней проще.
Какой диалект SQL используется?
T-SQL — диалект SQL Server. Например, вместо LIMIT используйте TOP или OFFSET … FETCH.