Ответ 1
какое соединение выполняется? я думаю, что это полное внешнее соединение, я не так ли?
Нет, это регулярное внешнее соединение. Запрос должен знать, когда в целевой таблице есть строки, которые также находятся в исходной таблице, и когда в исходной таблице есть записи, которые не находятся в целевой таблице. Поскольку для запроса не требуется отвечать на строки, которые находятся в целевой таблице, но не находятся в исходной таблице, ему не нужно, чтобы внешнее соединение проходило в обоих направлениях.
Однако внешнее соединение не будет выполняться, если нет предложения not matched
(что совершенно верно). Оптимизатор достаточно умен, чтобы знать, что в этом случае достаточно внутреннего соединения.
относительно КОГДА СМ. ЧАСТЬ: что происходит, когда строка из t совпадает несколько строк из s?
При наличии нескольких совпадений обновление выполняется для каждого совпадения. Это означает, что в зависимости от того, какое обновление будет последним, будет указано сообщение, записанное в фиксации. Нет никакого способа диктовать заказ, поэтому в этом случае источник обновления является фактически случайным (из набора совпадений).
Как отметил Винсент Мальграт, это было неправильно. Похоже, что Oracle будет производить ошибку "ORA-40926: невозможно получить стабильный набор строк в исходной таблице", если имеется несколько совпадений.
относительно КОГДА НЕ СМ. ЧАСТЬ я верьте, что это означает: "когда строка в s нет соответствия в t". Правильно ли я?
Это правильно.