Таблица 1
Customer id city
John 1 LA
Nancy 2 NULL
Таблица 2
Customer $ in the pocket
John 20
Nancy 30
Мне интересно, что произойдет, если Table 1
естественное соединение с Table 2
? Я предполагаю, что результатом будет 4 атрибута, и появятся и Джон, и Нэнси.
Но мой друг сказал мне, что появится только Джон, Нэнси не будет, потому что есть значение null
.
Customer
. (Значение NULL в атрибуте города не имеет значения, так как другое отношение не имеет атрибута с именемcity
.) ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ будет использовать все атрибуты с одинаковыми именами. Если бы второе отношение также имело атрибут с именемcity
, это было бы то же самое, что и INNER EQUIJOIN для обоих атрибутовCustomer
иcity
. - person spencer7593   schedule 04.10.2016null
, то все в порядке? - person randy   schedule 04.10.2016city
в table2, и наш запрос, который работал, сломался.) Когда я сталкиваюсь с ЕСТЕСТВЕННЫМ СОЕДИНЕНИЕМ, чтобы понять, что оно на самом деле делает, мне нужно просмотреть все столбцов в обеих таблицах и найти все совпадения. И пока я это делаю, я тихо проклинаю разработчика, который все время экономил на том, что печаталNATURAL
вместоON a.customer = b.customer
, чтобы я мог потратить в двадцать раз больше времени, чтобы разобраться. - person spencer7593   schedule 04.10.2016id
). По сути, это вынуждает нас принимать неверные соглашения об именах для столбцов, чтобы мы непреднамеренно не создавали столбцы с одинаковыми именами, и в то же время вынуждает нас использовать одно и то же имя столбца, если мы хотим выполнить операцию эквивалентного соединения. Недостатки NATURAL JOIN намного перевешивают любые предполагаемые преимущества. - person spencer7593   schedule 04.10.2016