Какие базы данных поддерживают объединения UNION? - PullRequest
3 голосов
/ 28 мая 2019

Прежде всего, этот предмет для меня как любопытство.

Я писал код для служебной библиотеки и добавлял методы для запуска различных типов операторов SQL-соединений.Все хорошо, но в какой-то момент я наткнулся на неясное предложение UNION JOIN, включенное в спецификацию SQL-92 (стр. 179).

Я не знаю, насколько это может быть полезно (я никогда не использовал его), и оно реализовано (AFAIK) только в HyperSQL.

Для справки, вот как это работает.Если у нас есть две таблицы T и U с любым количеством столбцов / строк:

====== T =====       === U ===

   a    b    c          d    e
---- ---- ----       ---- ----
   1    2    3         10   11
   4    5    6         12   13

Тогда:

select * from T union join U  

Производит (без определенного порядка строк):

   a    b    c    d    e
---- ---- ---- ---- ----
   1    2    3 null null
   4    5    6 null null 
null null null   10   11
null null null   12   13

В любом случае, я хотел знать, какие базы данных действительно поддерживают это, или если вы видели это в дикой природе.

Я думал также спросить, для чего это может быть полезно, но я неЯ не хочу, чтобы этот вопрос был закрыт как «в первую очередь основанный на мнении».

1 Ответ

5 голосов
/ 28 мая 2019

Теоретически, ЛЮБОЙ SQL поддерживает его

Как описано в "Проблемы и решения SQL" Моисеенко :

ЭтоТип соединения был введен в стандарт языка SQL-92, но исчез в более поздних версиях стандарта SQL.В частности, он отсутствует в SQL2003 (ANSI и ISO).Как и многие другие структуры SQL, UNION JOIN является чрезмерным, потому что это может быть выражено как вычитание полного внешнего соединения и внутреннего соединения.Формально мы можем записать это выражение следующим образом:

A UNION JOIN B :=
(A FULL JOIN B)
EXCEPT
(A INNER JOIN B)

Если СУБД не поддерживает FULL JOIN (MySQL), его можно получить путем объединения левого и правого внешних объединений.Таким образом, наша формула имеет вид

A UNION JOIN B :=
((A LEFT JOIN B)
UNION
(A RIGHT JOIN B))
EXCEPT
(A INNER JOIN B)

На практике SAS поддерживает ее, по крайней мере, версия 9.3.Ссылка: http://support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#p0o4a5ac71mcchn1kc1zhxdnm139.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...