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

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

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

полей из правой таблицы. Покажем это с помощью диаграммы

Венна [20], [24].

Рисунок 4 – Изображение LEFT OUTER JOIN с помощью

диаграммы Венна

Пример 4

Показать жителей всех городов.

SELECT c."Name"

, c2."FirstName" FROM "Cities" c

LEFT OUTER JOIN "Citizens" c2

ON c."ID" = c2."ID_City";

Рисунок 5 – Результат выполнения оператора LEFT OUTER JOIN

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

Как видно (Рисунок 5), в результирующий набор данных попали все записи из таблицы Cities, которая указана первой и соответствующие

11

записи из таблицы Citizens. Так как в городе Казань никто не живет, то значение в поле FirstName отсутствует.

Пример 5

Показать города, в которых проживают все жители.

SELECT c."Name"

, c2."FirstName" FROM "Citizens" c2

LEFT OUTER JOIN "Cities" c

ON c."ID" = c2."ID_City";

Рисунок 6 – Результат запроса LEFT OUTER JOIN

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

Результирующий набор (Рисунок 6) содержит шесть строк, так как таблица, к которой происходит соединение, имеет шесть строк. Последняя строка не содержит значение в поле FirstName. С точки зрения теории реляционных баз данных значение внешнего ключа не должно быть пустым,

однако в жизни может встречаться такая ситуация как промежуточный результат (при удалении записи из главной таблицы, все ссылки в дочерних таблицах принимают значение NULL) или, человек Анатолий лишился жилья.

12

Пример 6

Показать стандартную цену для каждого продукта.

SELECT

P."Name"

,P."ModifiedDate"

,P."ListPrice"

,C."StandardCost"

FROM "Production"."Product" P

LEFT OUTER JOIN "Production"."ProductCostHistory" C

ON P."ProductID" = C."ProductID"

ORDER BY P."Name";

Рисунок 7 – Результат запроса LEFT OUTER JOIN

Как видно из результатов запроса (Рисунок 7), в результирующем наборе присутствуют все строки из таблицы Production.Product. Строки из таблицы Production.ProductCostHistory, значения столбца

ProductID в которых не совпадают со значениями одноименного столбца из таблицы Production.Product, присутствуют, но имеют значение NULL.

RIGHT OUTER JOIN

Правое внешнее соединение отличается от левого внешнего соединения направлением ассоциации. Покажем это с помощью диаграммы Венна [20], [24].

13

Рисунок 8 – Изображение RIGHT OUTER JOIN с помощью

диаграммы Венна

Следующие два запроса покажут одинаковый результат:

Запрос с применением LEFT OUTER JOIN

SELECT

T1.Field1

,...

,T1.FieldN

,T2.Field1

,...

,FieldM

FROM Table1 T1

LEFT JOIN Table2 T2

ON T1.FieldK = T2.FieldK

Запрос с применением RIGHT OUTER JOIN

SELECT T1.Field1 ,...

,T1.FieldN

,T2.Field1

,...

,FieldM FROM Table2 T2

RIGHT JOIN Table1 T1

ON T2.FieldK = T1.FieldK

14

Пример 7

Используя RIGHT OUTER JOIN, выполнить задание (Пример 4).

SELECT c2."Name"

, c."FirstName" FROM "Citizens" c

RIGHT OUTER JOIN "Cities" c2

ON c2."ID" = c."ID_City";

Рисунок 9 – Результат выполнения оператора RIGHT OUTER JOIN

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

Пример 8

Используя RIGHT OUTER JOIN, выполнить задание Пример 5.

SELECT c2."Name"

, c."FirstName" FROM "Cities" c2

RIGHT OUTER JOIN "Citizens" c

ON c2."ID" = c."ID_City";

15

Рисунок 10 – Результат запроса RIGHT OUTER JOIN

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

Сравнивая результаты выполнения скриптов (Рисунок 5 и Рисунок 9) и

(Рисунок 6 и Рисунок 10), мы видим их идентичность.

FULL OUTER JOIN

Оператор полное внешнее соединение применяется, когда нужно соединить таблицы по неключевому полю. В итоге, в результирующем наборе будут присутствовать сроки из левой таблицы, строки, которые совпадают по полю соединения с правой таблицей и строки из правой таблицы. Если нет совпадения по полю соединения, то значение в этой строке будет NULL.

Покажем это с помощью диаграммы Венна [20], [24].

Рисунок 11 – Изображение FULL JOIN

с помощью диаграммы Венна

16

Пример 9

Выполнить FULL OUTER JOIN для таблицы Город (Cities) и

Жители (Citizens).

SELECT c2."Name"

, c."FirstName" FROM "Cities" c2

FULL OUTER JOIN "Citizens" c

ON c2."ID" = c."ID_City";

Рисунок 12 – Результат выполнения оператора FULL OUTER JOIN

Создание своей базы данных

Для лучшего понимания операторов соединения создадим свою базу данных. Пусть имеется магазин, который завозит товары (Products) со склада (Stores) и продаёт (Purchases) их. Также имеется таблица поставщиков (Vendors), так как один вид товара может поставляться разными поставщиками. Время, цена покупки и продажи записываются соответственно в таблицы Stores и Purchases. После создания БД [30],

получим следующую ER–диаграмму (Рисунок 13). Установим нотацию

Crows Foot, выбрав ее в меню, полученном нажатием правой клавиши мыши (Рисунок 14).

17

Рисунок 13 – ER–диаграмма созданной БД [30]

Рисунок 14 – Выбор нотации схемы данных

Все таблицы заполним данными [31]. 18

Пример 10

Показать, какие товары поставляются какими поставщиками. База

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

SELECT

V."Name" AS Vendor

, Pr."Name" AS Product

FROM "Purchases" AS P

INNER JOIN "Vendors" AS V

ON V."ID" = P."ID_Vendors"

INNER JOIN "Products" AS Pr

ON Pr."ID" = P."ID_Products"

ORDER BY V."Name";

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

Пример 11

Показать продажи продуктов. База данных Shop (Магазин).

SELECT P."Name"

,s."Price" AS Price

,CAST(s."Date" AS VARCHAR(15))

FROM "Stores" s

INNER JOIN "Products" P

ON P."ID" = S."ID_Products";

19

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

20

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