Результат операции union join
Таблица 10.8. Результат операции union join
E.EmpID | E.Name | P.EmpID | ProjectName | S.EmpID | S.Skill |
1 | Ferguson | NULL | NULL | NULL | NULL |
NULL | NULL | 1 | X-63 Structure | NULL | NULL |
NULL | NULL | 1 | X-64 Structure | NULL | NULL |
NULL | NULL | NULL | NULL | 1 | Mechanical Design |
NULL | NULL | NULL | NULL | 1 | Aerodynamic Loading |
2 | Frost | NULL | NULL | NULL | NULL |
NULL | NULL | 2 | X-63 Guidance | NULL | NULL |
NULL | NULL | 2 | X-64 Guidance | NULL | NULL |
NULL | NULL | NULL | NULL | 2 | Analog Design |
NULL | NULL | NULL | NULL | 2 | Gyroscope Design |
3 | Toyon | NULL | NULL | NULL | NULL |
NULL | NULL | 3 | X-63 Telemetry | NULL | NULL |
NULL | NULL | 3 | X-64 Telemetry | NULL | NULL |
NULL | NULL | NULL | NULL | 3 | Digital Design |
NULL | NULL | NULL | NULL | 3 | R/F Design |
Каждая таблица была расширена справа или слева неопределенными (NULL) значениями, после чего проведено объединение в одну таблицу всех строк, получившихся в результате этого расширения. Порядок этих строк произвольный и зависит от используемой реализации. Теперь можно представить полученные данные в более "удобоваримой" форме.
Обратите внимание, что для идентификатора сотрудника в таблице есть три столбца, но в любой из строк определенным является только один из них. Вид выводимой таблицы можно улучшить, если использовать для этих столбцов выражение COALESCE (соединить). Как уже говорилось в главе 8, это выражение выбирает из переданного ему списка значений первое, не являющееся неопределенным. В данном случае COALESCE выбирает из списка столбцов единственное значение:
SELECT COALESCE (E.EmpID, P.EmpID, S.EmpID) AS ID,
E.Name, P.ProjectName, S.Skill
FROM EMPLOYEE E UNION JOIN PROJECTS P
UNION JOIN SKILLS S
ORDER BY ID ;
Предложение FROM здесь такое же, как и в предыдущем примере, но теперь три столбца EmpID соединяются с помощью выражения COALESCE в один, который называется ID. Кроме того, результат упорядочивается как раз по этому столбцу ID. Что в итоге получилось, показано в табл. 10.9.
В каждой строке этой таблицы имеются данные или о проекте, или о квалификации, но не о том и другом вместе. При чтении результата необходимо вначале определить, какого типа данные в каждой строке. Если в строке столбец ProjectName является определенным, то в ней указан проект, над которым работал сотрудник. А если определенным является столбец Skill, то в строке указаны навыки сотрудника.