(здесь функция преобразования типов CASTиспользуется для обеспечения совместимости типов полей объединяемых запросов ).
Нужный результат, однако, может быть получен и путем использования внешнего соединения, точнее одной из его разновидностей – левого внешнего соединения, с использованием которого запрос будет выглядеть следующим образом:
SELECTSURNAME, MARK
FROMSTUDENT LEFT OUTER JOINEXAM_MARKS
ONSTUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID;
При использовании левого соединения расширение выводимой таблицы осуществляется за счет записей входной таблицы, имя которой указано слева от оператора JOIN.
Следует заметить, что нотация запросов с внешним соединением в СУБД ORACLE отличается от приведенной нотации, задаваемой стандартом языка SQL. В нотации, используемой в Oracle, этот же запрос будет иметь вид
Знак (+) ставится у той таблицы, которая дополняется записями с NULL-значениями, чтобы при соединении таблиц в выходное отношение попали и те записи другой таблицы, для которых в таблице со знаком (+) не находится строк с соответствующими значениями атрибутов, используемых для соединения. То есть для левого внешнего соединения (по нотации стандарта SQL) в запросе ORACLE-SQL указатель (+) ставится у правой таблицы.
Приведенный выше запрос может быть реализован и с применением правого внешнего соединения. Он будет иметь следующий вид
SELECTSURNAME, MARK
FROMEXAM_MARKS RIGHT OUTER JOINSTUDENT
ONEXAM_MARKS.STUDENT_ID = STUDENT.STUDENT_ID;
Здесь таблица STUDENT, за счет записей которой осуществляется расширение выводимой таблицы, стоит справа от оператора JOIN.
В нотации Oracle этот запрос будет выглядеть следующим образом.
Видно, что использование внешнего правого или левого соединения позволяет существенно упростить запрос, сделать его запись более компактной.
Иногда возникает необходимость включения в результат запроса записей из обеих (правой и левой) соединяемых таблиц, для которых не удовлетворяется условие соединения. Такое соединение называется полны м внешним соединением и осуществляется указанием в запросе ключевых слов FULL OUTER JOINили UNION JOIN.