| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Работа FULL JOIN |
| Автор: GQU 13.12.2011, 08:34 | ||
Не пойму, как работает FULL JOIN Почему в 110-ой строке NULL-ы в FIO и City, а в 111-ой NULL-ы в ContactName и City PS: база Northwind http://s2.ipicture.ru/Gallery/Viewfull/7318735.html |
| Автор: GQU 13.12.2011, 09:43 | ||
Не, мне не нужны никакие ключи, просто понял что не понимаю FULL JOIN, вот решил разобраться |
| Автор: Zloxa 13.12.2011, 10:33 |
Не понимаю чего там не понятного. Да и понимать там нечего. Это правило, его не понимать надо а усвоить. У нас есть два набора данных А и Б, пересекающиеся по критериям соединения. Левое соединение это все записи из набора А + данные из таблицы Б, попадающие под критерии соединения Правое соединение это все записи из набора Б + данные из таблицы А, попадающие под критерии соединения Полное соединение это все записи из наборов А и Б, соединенные по критериям соединения Внутреннее соединение это только те записи аз наборов А и Б, которые попадают под критерии соединения. На картинке это выглядит как-то так: ![]() |
| Автор: SharedNoob 21.12.2011, 13:17 |
| В Employees нет записи с городом варшава. |
| Автор: animegirl 14.9.2012, 05:35 | ||
А вы не будите против, если мы эту картинку скопируем в википедию? Замечательное наглядное представление |
| Автор: Zloxa 14.9.2012, 11:58 |
Мы, конечно, против не будим. Если закоммитят, ссылью поделитесь пожалуйста, подивлюсь, ЧСВ потешу. в отличии от дизайнерского решения |
| Автор: animegirl 18.12.2012, 06:19 |
| Zloxa, Распечатала вашу картинку, повесила на стенку, хотела подписать и задумылась. Правое левое вроде понятно, внутринние примерно тоже, а вот "полное", это FULL или CROSS? И как быть с миксами? {INNER | {LEFT | RIGHT | FULL} OUTER | CROSS } JOIN |
| Автор: Zloxa 18.12.2012, 07:36 |
| full. cross join - декартово произведение двух наборов. как показать на картинке - не зна |
| Автор: Akina 18.12.2012, 13:59 | ||
| Ну если говорить об SQL_стандарте - то CROSS JOIN используется тогда, когда отсутствует класс ON. И соответственно полностью эквивалентен запятой. Однако бывают и "выпендроны". Например, в MySQL CROSS JOIN - это тот же INNER JOIN:
|
| Автор: Zloxa 18.12.2012, 18:06 | ||||||
А оракл запрещает использовать джойн без ON
, и мешать old-style join (через запятон) и ansi join Не, таки мешать позволяет
Но чотакакто глючно или же я чего-то недознаю
Приведенная тобой РБНФ не допускает миксов |
| Автор: Akina 18.12.2012, 20:14 |
Не вижу ничего глючного. Просто он требует точного соответствия записи порядку объединения. В первом случае dual t2 left join dual t3 воспринимается как единая псевдотаблица, полученная объединением таблиц, и она через запятую декартится на dual t1. Во втором случае подобной прямоты нет - и он поднимает скандал. ИМХО |
| Автор: Zloxa 18.12.2012, 20:32 | ||
Я так не додумался интерпретировать |