Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Соединение данных из множества таблиц. Рекомендации по выполнению работы и перечень типовых заданий. Учебно–методическое пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

Пример 23

Показать объединение первого столбца (ID) из таблицы Продажи

(Purchases) и столбцов (ID, Date, ID_Products) из таблицы Покупки

(Stores). База данных Shop (Магазин).

SELECT p."ID"

,current_date AS "Date"

,2 AS "2"

FROM "Purchases" p

UNION

SELECT s."ID"

,s."Date"

,s."ID_Products" FROM "Stores" s;

Рисунок 28 – Результат выполнения скрипта (Пример 23)

Как видно (Рисунок 28), данные Date и 2 преобразованы в соответствующий тип данных (дата и целочисленное значение).

Оператор UNION ALL применяется, как и оператор UNION для соединения данных из нескольких наборов. В отличие от оператора UNION дубликаты строк в данном случае не удаляются.

31

Пример 24

Сравнение работы операторов UNION и UNION ALL на примере

объединения данных из одной таблицы. База данных Shop (Магазин).

SELECT *

FROM "Products" p

UNION

SELECT *

FROM "Products" p;

Рисунок 29 – Результат выполнения оператора UNION

SELECT *

FROM "Products" p

UNION ALL

SELECT *

FROM "Products" p;

32

Рисунок 30 – Результат выполнения оператора UNION ALL

Как видно (Рисунок 30), дубликаты не были удалены, число строк

увеличено вдвое.

Оператор EXEPT

Для оператора Исключение EXEPT, как и для оператора объединение

UNION, от наборов данных требуется, чтобы количество столбцов и домены,

на которых они построены, совпадали. В результирующий набор данных попадают все данные из первого набора данных, которых нет во втором наборе данных.

SELECT

Table1.Field1

,...

,Table1.FieldN FROM Table1

EXEPT SELECT

Table2.Field1

,...

,Table2.FieldN FROM Table2

33

Пример 25

Какие продукты поставляет первый продавец, но не поставляет второй?

База данных Shop (Магазин).

SELECT p."ID_Products"

FROM "Purchases" p

WHERE "ID_Vendors" = 1

EXCEPT

SELECT p."ID_Products"

FROM "Purchases" p

WHERE "ID_Vendors" = 2;

Рисунок 31 – Результат выполнения оператора EXEPT

Действительно, поставщик с номером 1 поставляет продукты с номерами

2, 3, 4, 5, а поставщик с номером 2 – продукты с номерами 1, 3. Т. е. продукты с номерами 2, 4, 5 поставляется только первым продавцом.

Оператор INTERSECT

Оператор пересечение требует от наборов данных, чтобы количество столбцов и домены, на которых они построены, совпадали. В результирующий набор попадут данные, которые есть и в первом наборе, и во втором.

34

Пример 26

Какие продукты поставляются продавцом с номером 1 и продавцом с номером 2? База данных Shop (Магазин).

SELECT p."ID_Products"

FROM "Purchases" p

WHERE "ID_Vendors" = 1

INTERSECT

SELECT p."ID_Products"

FROM "Purchases" p

WHERE "ID_Vendors" = 2;

Рисунок 32 – Результат выполнения оператора INTERSECT

Действительно, продукт с номером 3 поставляются обоими поставщиками.

Ограничение результирующего набора данных.

Операторы LIMIT и OFFSET

Чтобы ограничить результирующий набор данных используются операторы LIMIT и OFFSET.

При использовании оператора LIMIT N выведутся первые N строк результирующего набора, при использовании оператора LIMIT N с

оператором ORDER BY выведутся первые N строк в отсортированном наборе данных.

При использовании оператора OFFSET пропускаются первые N строк

результирующего набора.

SELECT N Field1, ...FieldN

FROM Table1

LIMIT N;

35

Пример 27

Показать первые 5 строк таблицы продуктов (Purchases). База данных

Shop (Магазин).

SELECT p."ID_Products"

FROM "Purchases" p

LIMIT 5;

Рисунок 33 – Результат выполнения запроса с оператором TOP

Пример 28

Показать первые 5 строк таблицы продуктов (Purchases), таблицу

отсортировать по идентификационному номеру (первому столбцу).

SELECT p."ID_Products" FROM "Purchases" p ORDER BY p."ID_Products"

LIMIT 5;

Рисунок 34 – Результат выполнения запроса

с оператором LIMIT и ORDER BY

36

SELECT Field1

,...

,FieldN FROM Table OFFSET N;

Пример 29

Показать все товары из таблицы Purchases. Пропустить первые две

строки.

SELECT p."ID_Products" FROM "Purchases" p ORDER BY p."ID_Products"

OFFSET 2;

В результате выполнения данного запроса будет пропущено две строки.

Рисунок 35 – Результат выполнения запроса

с оператором OFFSET

37

Задание на лабораторную работу

1Вариант

1.Показать адреса электронной почты (EmailAddress) и поля

PersonType, FirstName, LastName из таблиц Person.Person,

Person.EmailAddress.

2.Показать список продуктов (поле Name), в котором указано, есть ли у продукта действительная цена (ActualCost) или нет, из таблиц

Production.Product, Production.WorkOrderRouting,

используя LEFT OUTER JOIN.

3.Показать список продуктов (поле Name), в котором указано, есть ли

упродукта подкатегория или нет, из таблиц

Production.ProductSubcategory, Production.Product,

используя RIGHT OUTER JOIN.

4.Показать список подкатегорий продуктов

(ProductSubcategoryID), которые имеют несколько нормативных цен (StandardCost), из таблицы

Production.Product, используя SELF JOIN.

5.Показать список нормативных цен (StandardCost), которые имеют несколько подкатегорий продуктов

(ProductSubcategoryID), из таблицы Production.Product,

используя SELF JOIN.

6.Показать список типов спецпредложений (Type), которые имеют несколько значений минимального количества (MinQty) не меньше

15, из таблицы Sales.SpecialOffer, используя SELF JOIN.

7.Показать комбинированный список таблиц

Person.BusinessEntityAddress,

Person.BusinessEntityContact, используя UNION.

38

8.Показать список BusinessEntityID, которые содержатся в таблице Sales.SalesPerson, но не содержатся в таблице

Sales.Store.

9.Ограничить результирующий набор, полученный в п.8.

10.Пропустить 15 строк из результирующего набора, полученного в п.9.

2Вариант

1.Показать номера телефонов (PhoneNumber) и поля PersonType,

FirstName, LastName из таблиц Person.Person,

Person.PersonPhone.

2.Показать список продуктов (поле Name), в котором указано, есть ли

упродукта название модели или нет, из таблиц

Production.ProductionModel, Production.Product,

используя LEFT OUTER JOIN.

3.Показать список ID людей (поле BusinessEntityId), в котором указано, работает ли человек в магазине или нет, из таблиц

Sales.Store, Person.BusinessEntity, используя RIGHT OUTER JOIN.

4.Показать список продуктов (ProductID), которые содержатся на нескольких складах (LocationID), из таблицы

Production.ProductInventory, используя SELF JOIN.

5.Показать список складов (LocationID), на которых содержатся несколько продуктов (ProductID), из таблицы

Production.ProductInventory, используя SELF JOIN.

6.Показать список продуктов из таблицы Production.Product с

таким же цветом как у продукта «ML Road Frame–W – Yellow, 38», используя SELF JOIN.

39

7.Показать комбинированный список таблиц Person.AddressType,

Person.ContactType по полям ID, Name, ModifiedDate,

используя UNION.

8.Показать список ID, которые содержатся в таблице Sales.Store

(поле BusinessEntityID), но не содержатся в таблице

Sales.Customer (поле CustomerID).

9.Ограничить результирующий набор, полученный в п.8.

10.Пропустить 15 строк из результирующего набора, полученного в п.9.

3Вариант

1.Показать должности (JobTitle) и поля PersonType, FirstName,

LastName из таблиц Person.Person,

HumanResources.Employee.

2.Показать список товаров (поле Name), в котором указано, есть ли у них количество в корзине покупателя или нет, из таблиц

Production.Product, Sales.ShoppingCartItem, используя

LEFT OUTER JOIN.

3.Показать список товаров (поле Name), в котором указан, есть ли у товара количество в запасе (поле Quantity) или нет, из таблицы

Production.ProductInventory, Production.Product,

используя RIGHT OUTER JOIN.

4.Показать список продуктов (ProductID), которые имеют несколько цен за штуку (UnitPrice), из таблицы

Purchasing.PurchaseOrderDetail, используя SELF JOIN.

5.Показать список цен за штуку (UnitPrice), к которым относятся несколько продуктов (ProductID), из таблицы

Purchasing.PurchaseOrderDetail, используя SELF JOIN.

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]