При внутренних объединениях выводится информация из извлекаемых столбцов, присутсвующая в таблицах, участвующих в запросе. В отличие от внутреннего, при внешнем объединении выводится частичная информация по запросу, даже если в одной из объединяемых таблиц информация отсутствует. Так, в нижеприводимом запросе Q2_16 выводится информация, связанная только с отделом 10, в котором существуют служащие, а информация об отделах 34, 40 в которых служащих нет, не выводится. Внешнее объединение позволяет вывести информацию и об отделах 34, 40, при этом столбцы «last_name», «job_id» будут не заполнены. Как выполнять внешние объединения, мы ознакомимся в разделе II.2.6.
Q2_16 Соединение по равенству таблиц EMPLOYEE, DEPARTMENT по полю DEPARTMENT_ID
При использовании традиционного синтаксиса объединения мы указывали в инструкции FROM несколько таблиц, разделяя их запятыми. В новом синтаксисе (соответствующему стандарту ANSI SQL, определенному для SQL/92), начиная с Oracle9i можно указывать в
инструкции FROM тип объединения вместе с ключевым словом JOIN. Например, чтобы выполнить внутреннее объединение таблиц DEPARTMENT и LOCATION, можно написать:
from EMPLOYEE у inner join DEPARTMENT d
Q2_21 Пример использования синтаксиса объединения, использующего JOIN
Следует обратить внимание на то, что к имени location_id извлекаемого общего связывающего таблицы столбца мы уже не добавляем квалификатор («d.» или «l.»).
Преимущество нового синтаксиса объединения в том, что нет возможности непредумышленно сгенерировать декартово произведение (на контрольных работах студенты нередко допускают эту грубую ошибку). Если указано сово JOIN, необходимо задать условие объединения. Если декартово произведение действительно необходимо, оно задается явно (cross join)
Q2_22
demo@10g> select * from location cross join salary_grade;