Новый месяц, новые цели. Ваша помощь помогает проекту двигаться вперед. 🖥️ Поддержите sqltest →
SQL код скопирован в буфер обмена

База данных 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 и связи между ними по внешним ключам. Нажмите, чтобы открыть её в полном размере.

ER-диаграмма базы данных AdventureWorks

Из чего состоит база

Таблицы делятся на три группы.

Клиенты

Customer, Address и таблица связей CustomerAddress, где хранится и тип адреса.

Товары

Product, ProductCategory (дерево: у категории может быть родитель), ProductModel и описания на нескольких языках.

Продажи

SalesOrderHeader — заказы, SalesOrderDetail — их строки.

Все 32 заказа в этой версии датированы 1 июня 2008 года. Описания товаров связаны с моделями через ProductModelProductDescription, где указан и язык (culture) описания. Служебные таблицы BuildVersion, ErrorLog и sysdiagrams в задачах не используются.

Сколько данных в таблицах:

ТаблицаСтрокЧто хранит
Customer847клиенты
CustomerAddress417связи клиентов и адресов
Address450адреса
SalesOrderHeader32заказы
SalesOrderDetail542строки заказов
Product295товары
ProductCategory41категории товаров
ProductModel128модели товаров
ProductDescription762описания товаров
ProductModelProductDescription762связи моделей и описаний по языкам

Структура таблиц

Нажмите на таблицу, чтобы увидеть её столбцы, пример строки и ключи.

Список таблиц

Address - таблица адресов.
  • 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
Customer - таблица клиентов.
  • 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
CustomerAddress - таблица связи клиентов и адресов.
  • 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
Product - таблица товаров.
  • 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
ProductCategory - категории товаров.
  • 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
ProductDescription - описание товаров.
  • 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
ProductModel - модели товаров.
  • 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
ProductModelProductDescription - описание моделей товаров.
  • 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
SalesOrderDetail - детали заказов.
  • 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
SalesOrderHeader - заказы.
  • 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;
FirstNameLastNameAddressTypeCity
CatherineAbelMain OfficeVan Nuys
KimAbercrombieMain OfficeBranch
FrancesAdamsMain OfficeModesto

Заказ и его строки — от заголовка заказа к товарам:

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

SQL-задачи по темам

Задач на базе AdventureWorks: 34 — от простых фильтров до аналитики по заказам и товарам. Решение проверяется автоматически на настоящем SQL Server. Число справа — количество задач в теме, цветные метки — диапазон сложности.

С чего начать

Первые задачи по базе AdventureWorks:

  1. Категории товаров
  2. Список товаров
  3. Отфильтрованный список товаров
  4. Десять самых тяжелых товаров
  5. Получить список таблиц (SQL Server)
  6. Выбрать клиентов с чётными номерами
  7. Поиск клиентов по префиксу телефона
  8. Получить дубликаты телефонных номеров
  9. Список уникальных клиентов
  10. Дубликаты 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.