Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab 2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
75.78 Кб
Скачать

9

Лабораторная работа №2

Соединение таблиц данных

Оператор join

Оператор JOIN реализует реляционную операцию соединения на основе предикатного правила. Само правило может иметь простой или сложный вид на основе композиции простых предикатных правил. Наиболее распространенным и практически значимым является, так называемое, эквисоединение, реализуемое бинарной операцией равенства атрибутов «=». Эквисоединение используется для восстановления без потери информации данных таблиц, подвергшихся процедуре нормализации и применения к ним операции проекции. Другие возможные варианты простых предикатов реализуются через операции: «<», «<=», «<>», «=>», «>».В общем случае не накладывается ограничение на именование столбцов соединяемых таблиц. Использование одинаковых имен столбцов первичного и внешнего ключа в связанных таблицах делает процесс управления данными более удобным и является рекомендуемой практикой. Несмотря на то, что фактические связи, реализованные с помощью создания ограничений PRIMARY KEY и FOREIGN KEY, не обязательны, для того чтобы результаты были значимыми, необходимо, чтобы по крайней мере один столбец в каждой из таблиц имел одно и то же значение (имеется ввиду наиболее распространенный случай – эквисоединение) [1].

Если применяемый в запросе столбец с одним и тем же именем встречается в нескольких таблицах, в списке выбора или при перечислении столбцов в предложении WHERE и других предложения инструкции SELECT, следует указывать имя столбца вместе с именем таблицы. Например, столбец Name есть в таблицах Product, Employee и Buyer. Если вы пишите запрос, соединяющий эти таблицы, и хотите включить столбец Name в список выбора или в другую часть запроса, необходимо задавать столбцы как Employee.Name и т.д. Для того чтобы избавится от длинного программного кода из-за длинных имен схемы и объектов, можно применять псевдонимы имен таблиц. В следующем примере показано использование псевдонимов.

SELECT B.BillID,

BU.Name AS BuyerName,

E.Name AS EmployeeName

FROM Bill AS B JOIN Employee AS E ON B.EmployeeID = E.EmployeeID

LEFT JOIN Buyer AS BU ON BU.BuyerID = B.BuyerID

Результатом запроса является выборка фамилий покупателя и работника магазина для каждой сделки. При этом фамилия покупателя выводится только в случае, когда она была указана в сделке (соединение LEFT JOIN). В противном случае выводится значение NULL.

При определении условия оператора JOIN необходимо задать таблицы, которые будут соединяться, тип соединения и условие соединения, формируемого из столбцов

Существуют несколько типов соединения.

Внутреннее соединение (inner join)

Внутренние соединения возвращают только те строки, которые удовлетворяют условию соединения. Несмотря на то, что внутреннее соединение может быть приведено как в предложении FROM, так и предложении WHERE, рекомендуется задавать оператор JOIN в предложении FROM [1].

Следующий пример возвращает дату покупки и идентификатор чека из таблицы Bill (чек), идентификатор записи чека, идентификатор товара, количество купленных товаров, дату записи чека и стоимость из таблицы BillItem (записи чека). В этом примере псевдонимы применяются не только для имен таблиц, но и для имен столбцов, связано это с тем, что в обеих таблицах имеются столбцы DateTime и BillID. Обратите внимание на то, для остальных столбцов не требуются полные имена, поскольку их имена уникальны в обеих таблицах.

SELECT B.BillID,

B.Date AS BillDT,

BillItemID,

ProductID,

Number,

Cost,

BI.Date AS BillItemDT

FROM Bill AS B INNER JOIN BillItem AS BI ON B.BillID = BI.BillID

Поскольку заданно внутреннее соединение, строки из таблицы Bill, не имеющие соответствия в таблице BillItem, не возвращаются. Для преодоления такого поведения следует применять оператор OUTER JOIN.

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