Интернет Университет информационных технологий Твой путь к знаниям
  Искать!
Курсы | Обучение | Школа | Магазин | Общение | Новости | Помощь

поддержка курса Основы SQL
информация [+] Автор: Л.Н. Полякова | ISBN: 978-5-9556-0101-4


 
 
Страницы: « | 1 | 2 | 3 | вопросы | » для печати и PDA
Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter

Операция соединения по двум отношениям (таблицам)

Соединение - это процесс, когда две или более таблицы объединяются в одну. Способность объединять информацию из нескольких таблиц или запросов в виде одного логического набора данных обусловливает широкие возможности SQL.

В языке SQL для задания типа соединения таблиц в логический набор записей, из которого будет выбираться необходимая информация, используется операция JOIN в предложении FROM.

Формат операции:

FROM имя_таблицы_1 {INNER | LEFT | RIGHT} 
    JOIN имя_таблицы_2 
ON условие_соединения

Существуют различные типы операций соединения:

  • тета-соединение R \triangleright\triangleleft_{F} S ;
  • соединение по эквивалентности R \triangleright\triangleleft_{=} S ;
  • естественное соединение R \triangleright\triangleleft S ;
  • внешнее соединение R \supset\triangleleft S, R \triangleright\subset S ;
  • полусоединение R \triangleright_{F} S.

Операция тета-соединения

Операция тета-соединения R \triangleright \triangleleft _{F} S определяет отношение, которое содержит кортежи из декартова произведения отношений R и S, удовлетворяющие предикату F. Предикат F имеет вид R.ai \Theta S.bj, где вместо \Theta может быть указан один из операторов сравнения ( >, >=, <, <=, =, <> ).

Если предикат F содержит только оператор равенства ( = ), то соединение называется соединением по эквивалентности.

Таблица 5.2.
R \triangleright \triangleleft _{F} S, F=(R.a2=S.b1)
R.a1 R.a2 S.b1 S.b2
a11h
a22g
b33h
b11h

Операция тета-соединения в языке SQL называется INNER JOIN (внутреннее соединение ) и используется, когда нужно включить все строки из обеих таблиц, удовлетворяющие условию объединения. Внутреннее соединение имеет место и тогда, когда в предложении WHERE сравниваются значения полей из разных таблиц. В этом случае строится декартово произведение строк первой и второй таблиц, а из полученного набора данных отбираются записи, удовлетворяющие условиям объединения.

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

Блоки данных из двух таблиц объединяются, как только в указанных полях будут найдены совпадающие значения.

Если в предложении FROM перечислено несколько таблиц и при этом не употребляется спецификация JOIN, а для указания соответствия полей из таблиц используется условие в предложении WHERE, то некоторые реляционные СУБД (например, Access) оптимизируют выполнение запроса, интерпретируя его как соединение.

Если перечислять ряд таблиц или запросов и не указывать условия объединения, в качестве исходной таблицы будет выбрано декартово (прямое) произведение всех таблиц.

SELECT R.a1, R.a2, S.b1, S.b2
FROM R, S
WHERE R.a2=S.b1

    или

SELECT R.a1, R.a2, S.b1, S.b2
FROM R INNER JOIN S ON  R.a2=S.b1
Пример 5.4. Тета-соединение отношений в SQL. (html, txt)

Естественное соединение

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

Таблица 5.3.
R \triangleright \triangleleft S, F=(R.a2=S.b1)
R.a1 R.a2 или S.b1 S.b2
a1h
a2g
b3h
b1h
SELECT R.a1, R.a2, S.b2
FROM R, S
WHERE R.a2=S.b1

    или 

SELECT R.a1, S.b1, S.b2
FROM R INNER JOIN S ON  R.a2=S.b1
Пример 5.5. Естественное соединение отношений в SQL. (html, txt)

Пример 5.6. Вывести информацию о проданных товарах.

SELECT *
FROM Сделка, Товар
WHERE Сделка.КодТовара=Товар.КодТовара

    Или (что эквивалентно)

SELECT *
FROM Товар INNER JOIN Сделка 
    ON Товар.КодТовара=Сделка.КодТовара
Пример 5.6. Выборка информации о проданных товарах. (html, txt)

Можно создать вложенные объединения, добавив третью таблицу к результату объединения двух других таблиц.

Пример 5.7. Получить сведения о товарах, дате сделок, количестве проданного товара и покупателях.

SELECT Товар.Название, Сделка.Количество, Сделка.
    Дата, Клиент.Фирма
FROM Клиент INNER JOIN 
    (Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара) 
ON Клиент.КодКлиента=Сделка.КодКлиента
Пример 5.7. Выборка сведений о товарах, дате сделок, количестве проданного товара и покупателях. (html, txt)

Использование общих имен таблиц для идентификации столбцов неудобно из-за их громоздкости. Каждой таблице можно присвоить какое-нибудь краткое обозначение, псевдоним.

Пример 5.8. Получить сведения о товарах, дате сделок, количестве проданного товара и покупателях. В запросе используются псевдонимы таблиц.

SELECT Т.Название, С.Количество, 
       С.Дата, К.Фирма
FROM Клиент AS К INNER JOIN 
    (Товар AS Т INNER JOIN
    Сделка AS С 
ON Т.КодТовара=С.КодТовара) 
ON К.КодКлиента=С.КодКлиента;
Пример 5.8. Выборка сведений о товарах, дате сделок, количестве проданного товара и покупателях с использованием псевдонима. (html, txt)

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

Какая из таблиц будет ведущей, определяет вид соединения. LEFT - левое внешнее соединение, ведущей является таблица, расположенная слева от вида соединения ; RIGHT - правое внешнее соединение, ведущая таблица расположена справа от вида соединения.

Левое внешнее соединение

Левым внешним соединением называется соединение, при котором кортежи отношения R, не имеющие совпадающих значений в общих столбцах отношения S, также включаются в результирующее отношение.

Таблица 5.4.
R \supset \triangleleft S
R.a1 R.a2 S.b1 S.b2
a11h
a22g
b11h
b33h
b4nullnull
SELECT R.a1,  R.a2, S.b1, S.b2
FROM R LEFT JOIN S ON R.a2=S.b1
Пример 5.9. Левое внешнее соединение отношений в SQL. (html, txt)

Существует и правое внешнее соединение R \triangleleft \subset S, называемое так потому, что в результирующем отношении содержатся все кортежи правого отношения. Кроме того, имеется и полное внешнее соединение, в его результирующее отношение помещаются все кортежи из обоих отношений, а для обозначения несовпадающих значений кортежей в нем используются определители NULL.

SELECT R.a1,  R.a2, S.b1, S.b2
FROM R RIGHT JOIN S ON  R.a2=S.b1
Пример 5.10. Правое внешнее соединение отношений в SQL. (html, txt)

Пример 5.11. Вывести информацию о всех товарах. Для проданных товаров будет указана дата сделки и количество. Для непроданных эти поля останутся пустыми.

SELECT Товар.*, Сделка.*
FROM Товар LEFT JOIN Сделка 
ON Товар.КодТовара=Сделка.КодТовара;
Пример 5.11. Выборка информации о всех товарах. (html, txt)

Полусоединение

Операция полусоединения определяет отношение, содержащее те кортежи отношения R, которые входят в соединение отношений R и S .

Таблица 5.5.
R \triangleleft _F S, F=(R.a2=S.b1)
R.a1 R.a2
a1
a2
b3
b1
SELECT R.a1, R.a2
FROM R, S
WHERE R.a2=S.b1

    или

SELECT R.a1,   R.a2
FROM R INNER JOIN S ON R.a2=S.b1
Пример 5.12. Полусоединение отношений в SQL. (html, txt)
Дальше »
Страницы: « | 1 | 2 | 3 | вопросы | » для печати и PDA
 
 

Внимание! Если Вы увидите ошибку на нашем сайте, выделите её и нажмите Ctrl+Enter.
Нужна помощь?
• Забыли пароль? Вам сюда...
• Есть вопрос? Спрашивайте!
Вы можете:
• Изменить персональные данные
• Изменить параметры подписки
Интернет-магазин:
• Ваши заказы здесь
• Ваш личный счет
Курсы | Учебные программы | Учебники | Вопросы и Ответы | Форум | Новости | Помощь

Телефон: +7 (499) 253-9312, 253-9313, факс: +7 (499) 253-9310, email: info@intuit.ru
© INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование, 2003-2011
Проект Издательства "Открытые Системы".
Партнеры: РМ Телеком, KRAFTWAY COMPUTERS.
Rambler's Top100