Читаем SQL за 24 часа полностью

WHERE E.EMP_ID = P.EMP_ID;

EMP_ID LAST_NAM POSITION

442346889 PLEW MARKETING

213764555 GLASS MARKETING

313782439 GLASS MARKETING

220984332 WALLACE MARKETING

443679012 SPURGEON MARKETING

311549902 STEPHENS TEAM LEADER

213764555 GLASS TEAM LEADER

313782439 GLASS TEAM LEADER

220984332 WALLACE TEAM LEADER

443679012 SPURGEON TEAM LEADER

311549902 STEPHENS SALES MANAGER

442346889 PLEW SALES MANAGER

313782439 GLASS SALES MANAGER

220984332 WALLACE SALES MANAGER

443679012 SPURGEON SALES MANAGER

3115499C2 STEPHENS SALESMAN

442346889 PLEW SALESMAN

213764555 GLASS SALESMAN

220984332 WALLACE SALESMAN

443679012 SPURGEON SALESMAN

311549902 STEPHENS SHIPPER

442346889 PLEW SHIPPER

213764555 GLASS SHIPPER

313782439 GLASS SHIPPER

30 строк выбраны.

Вы, наверное, удивитесь, что в данном случае из базы данных были извлечены 30 строк данных, хотя в таблице имеется всего 6 записей Объяснение этому следующее. Каждой записи из таблицы EMPLOYEE_TBL соответствует запись из таблицы EMPLOYEE_PAY_TBL. Но по причине связывания по неравенству каждой записи из первой таблицы сопоставляются все записи второй таблицы, за исключением той самой единственной соответствующей записи Значит, каждая строка первой таблицы оказывается связанной с пятью строками второй. Записей всего 6, поэтому в результате мы получаем 30 строк.

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

При связывании по неравенству обычно в выводе присутствует ряд строк, которые на самом деле оказываются ненужными, так что результаты запроса, в котором используется связывание по неравенству, всегда требуют дополнительной проверки

Внешнее связывание

Внешнее связывание (OUTER JOIN) используется, когда вывод должен содержать все записи одной таблицы, даже если некоторые из ее записей не имеют соответствующих записей в другой таблице. В запросе для задания внешнего связывания используется (+). Символ (+) помещается в конце имени таблицы в выражении ключевого слова WHERE. Таблицей с символами ( + ) должна быть та таблица, записям которой нет соответствующих записей из другой таблицы. Во многих реализациях языка внешнее связывание разбито на левое внешнее связывание (LEFT OUTER JOIN), правое внешнее связывание (RIGHT OUTER JOIN) и полное внешнее связывание (FULL OUTER JOIN). В таких реализациях внешнее связывание (OUTER JOIN) обычно является опцией.

Обязательно проверьте правила использования внешнего связывания и синтаксис соответствующих операторов по документации той реализации языка, с которой вы работаете Символы ( + ) используются в большинстве основных реализаций SQL, но стандартом они не задаются

Общий синтаксис следующий.

FROM таблица1

{RIGHT | LEFT | FULL} [OUTER] JOIN

ON таблица2

В Oracle используется следующий синтаксис.

FROM таблица1, таблица2 [,таблицаЗ ]

WHERE таблица1.имя_столбца[(+)] = таблица2.имя_столбца[(+)]

[ AND таблица!.имя_столбца[(+)] = таблицаЗ.имя_столбца[(+)]]

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

Использование внешнего связывания поясняется следующими примерами. В первом примере выбираются описание товара и его количество, причем эти значения извлекаются из двух разных таблиц. Здесь нужно помнить о том, что не для каждого товара имеется соответствующая запись в таблице ORDERS_TBL. Сначала используем связывание по равенству:

SELECT P.PROD_DESC, О. QTY

FROM PRODUCTS_TBL P,

ORDERS_TBL О

WHERE P.PROD_ID = O.PROD_ID;

PRODJ3ESC QTY

КОСТЮМ ВЕДЬМЫ 1

ПЛАСТИКОВЫЕ ТЫКВЫ 25

ПЛАСТИКОВЫЕ ТЫКВЫ 2

ФОНАРИ 10

ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 20

ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 1

6 строк выбраны.

Здесь оказались выбранными всего 6 строк, хотя различных товаров более 10. Но вы хотели бы увидеть список всех товаров, независимо от того, имеются ли на них заказы или нет.

В следующем примере эта задача решается с помощью внешнего связывания. Для соответствующего оператора используется синтаксис Oracle.

SELECT P.PROD_DESC, О.QTY

FROM PRODUCTS_TBL P,

ORDERS_TBL О

WHERE P . PROD_ID = О . PROD_ID (+);

PROD_DESC QTY

КОСТЮМ ВЕДЬМЫ 1

МАСКИ В АССОРТИМЕНТЕ

ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 20

КОСТЮМЫ В АССОРТИМЕНТЕ

ПЛАСТИКОВЫЕ ТЫКВЫ 25

ПЛАСТИКОВЫЕ ТЫКВЫ 2

ТЫКВЕННЫЕ КОНФЕТЫ

ПЛАСТИКОВЫЕ ПАУКИ

СЛАДКАЯ КУКУРУЗА

ФОНАРИ 10

ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 1

ПОЛОЧКА ИЗ ДУБА

12 строк выбраны.

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

Рекурсивное связывание
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных