что за соединение выполняется?Я думаю, что это полное внешнее соединение, я прав?
Нет, это обычное внешнее соединение.Запрос должен знать, когда в целевой таблице есть строки, которые также находятся в исходной таблице, и когда в исходной таблице есть записи, которых нет в целевой таблице.Так как запрос не должен отвечать на строки, которые находятся в целевой таблице, но не находятся в исходной таблице, ему не нужно внешнее соединение, чтобы идти обоими путями.
Однако внешнее соединение будетне выполняется, если нет условия not matched
(что совершенно правильно).Оптимизатор достаточно умен, чтобы знать, что в этом случае достаточно внутреннего соединения.
относительно части WHEN MATCHED: что происходит, когда строка из t соответствует нескольким строкам из s?
При наличии нескольких совпадений выполняется обновлениеза каждый матч.Это означает, что любое обновление, которое наступит последним, будет записано в коммите.Нет способа диктовать порядок, поэтому в этом случае источник обновления является фактически случайным (из набора совпадений).
Как указал @ Vincent Malgrat, это было неверно.Похоже, что Oracle выдаст ошибку «ORA-40926: невозможно получить стабильный набор строк в исходной таблице» при наличии нескольких совпадений.
относительно части WHEN NOT MATCHED. Я верю в этоозначает «когда строка в s не имеет соответствия в t».Я прав?
Это правильно.