Расширенные объединения
- Использование псевдонимов таблиц
- Использование объединений других типов
- Естественные объединения
- Внешние объединения
- Использование объединений со статистическими функциями
- Использование объединений и условий объединения
Использование объединений других типов
До сих пор вы использовали только простые объединения, которые называют внутренние объединения или объединения по эквивалентности. Теперь мы рассмотрим три дополнительных типа объединения: самообъединение, естественное объединение и внешнее объединение.
Самообъединения
Теперь рассмотрим тот же самый запрос, в котором используется объединение:
FROM Customers
WHERE cust_name = (SELECT cust_name
FROM Customers
WHERE oust_contact = 'Jim Jones');
cust_id cust_name cust_contact
-------------- -------------- ---------------------
1000000003 Fun4All Jim Jones
1000000004 Fun4All Denise L. Stephens
Одна из основных причин для использования псевдонимов таблиц состоит в возможности обращения к одной и той таблице несколько раз в одном операторе SELECT. Покажем это на примере.
Предположим, вы хотите послать письма по всем контактным адресам клиентов, которые работают с той же компанией, с которой работает Джим Джонс. Такой запрос требует, чтобы вначале вы выяснили, с какой компанией работает Джим Джонс, а затем — какие клиенты работают с этой же компанией. Вот один из способов решения этой задачи.
------------------ ---------------------- -------------------------------
Две таблицы, необходимые для выполнения запроса, на самом деле — одна и та же таблица, поэтому таблица Customers появляется в предложении FROM дважды. Хотя это совершенно законно, некоторые ссылки на таблицу Customers могли бы оказаться неоднозначными, потому что СУБД "не знает", на какую именно таблицу Customers вы ссылаетесь.
Для решения этой проблемы используются псевдонимы. Первый раз для таблицы Customers назначается псевдоним С1, второй — псевдоним С2. Теперь эти псевдонимы можно применять в качестве имен таблиц. Например, оператор SELECT использует префикс С1 для однозначного указания полного имени нужного столбца. Если этого не сделать, СУБД возвратит сообщение об ошибке, потому что имеется по два столбца с именами cust_id, cust_name и cust_contact. СУБД не может знать, какой именно столбец вы имеете в виду (даже если в действительности это один и тот же столбец). Первое предложение WHERE объединяет эти таблицы, а затем оно фильтрует данные второй таблицы по столбцу cust_contact, чтобы возвратить только нужные данные.



