Работа с мультимножествами в SQL

1) Создание мультимножеств

MULTISET [<перечисление>]|MULTISET(<запрос>)|TABLE(<запрос>)

Пример:

MULTISET[14, 16, 17]
MULTISET(SELECT SNum FROM SalesPeople)

2) Предикаты сравнения мультимножеств
{=|<>|MEMBER|SUBMULTISET|IS A SET} — сравнение по равенству, неравенству, вхождение значения в мультимножество или одного мультимножества в другое и есть ли в нем дубликаты.

3) Операции над мультимножествами
{UNION|INTERSECT|EXCEPT} [DISTINCT|ALL] – операции объединения, пересечения и определения разности. Каждая из операций может выполняться с сохранением ALL или с исключением DISTINCT дубликатов.

4) Функции над мультимножествами
{CAST|SET|CARDINALITY|ELEMENT} – преобразование типов мультимножества, удаление дубликатов, определение числа элементов в мультимножестве, выборка элемента мультимножества из одного элемента.

5) Агрегатные функции
{COLLECT|FUSHION|INTERSECT} (<столбец>) – создание мультимножества из значений поля, объединение мультимножеств поля в пересечение мультимножеств поля для всех выбранных строк.

Пусть есть таблица MultiTab:

SName Set_CName (обслуживаемые покупатели)
Peel MULTISET[‘Hoffman’, ‘Clemens’, ‘Grass’]
Serres MULTISET[‘Lui’, ‘Grass’, ‘Pereira’]
Rifkin MULTISET[‘Cisneros’, ‘Giovanni’, ‘Grass’]

Пример на агрегатные функции:

SELECT COLLECT(SName) AS ALL_SName FUSION(Set_CName) AS ALL_CName, INTERSECT(Set_CName) AS COMMON_CName FROM MultiTab

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

ALL_SName ALL_CName COMMON_CName
MULTISET[‘Peed’, ‘Serres’, ‘Rifkin’] MULTISET[‘Hoffman’, ‘Clemens’, ‘Grass’, ‘Lui’, ‘Grass’, ‘Pereira’, ‘Cisneros’, ‘Giovanni’, ‘Grass’] MULTISET[‘Grass’]

6) Операции преобразования мультимножеств

UNNSET (<мультимножество>) AS <таблица>

Пример:

SELECT T.SNum, T.SNum+1000 AS New_SNum FROM UNNSET (MULTISET[1001, 1002, 1003]) AS T(SNum)

В результате выполнения этого запроса будет получена таблица:

SNum New_SNum
1001 2001
1002 2002
1003 2003


Комментарии запрещены.





Статистика

Рейтинг@Mail.ru