Entity SQL中存在許多集合類型的資料,因此,集合操作在Entity SQL中也比較重要。本文介紹Entity SQL中常用的集合運算子。
閱讀本文前注意,首先約定,這裡的集合可以包含重複元素,而非我們平時所說的不包含重複元素的集合。
文法:Set(Colleciton)
說明:我們假定Collection中可以包含重複元素,那麼,Set(Collection)就取出Collection中的非重複的元素。
例如:Set({1,1,3,3,4})將得到結果{1,3,4}。
在Entity SQL中,實體和行是可以比較的。當然,作為使用者,大家不必去關心到底怎麼比——對於實體,主鍵相同則為相同實體;對於行,則要求結構一致;而集合是不可以進行比較的,換句話說:set({{1,2,3},{1,2,3}})是非法的。
文法:e IN collection
說明:IN運算子返回e是否在collection中。
例如:1 IN {1,2,3}返回TRUE,1 IN {-1,-2,-3}返回FALSE。
文法:EXISTS(collection)
說明:判定collection是否為空白,為空白時返回FALSE,否則,返回TRUE。
例如:EXISTS({1})返回TRUE;而EXISTS(SELECT V from {1,2,3} AS V WHERE V=-1)返回FALSE。
文法:collectionA UNION [ALL] collection
說明:UNION求兩個集合的並集,並且去除相同的元素;而UNION ALL求兩個集合并集,但是,同時包含重複元素。
例如:{1,2,3} UNION {2,3,4}得到 {1,2,3,4},而{1,2,3} UNION ALL {2,3,4} 得到{1,2,3,2,3,4}。
文法:collecitonA INTERSECT collectionB
說明:INTERSECT求兩個集合的交集。
例如:{1,2,3} INTERSECT {2,3}得到{2,3}。注意,交集會去除重複元素。{1,2,2,3} INTERSECT {2,2,3}得到{2,3},而非{2,2,3}
文法:collecitonA EXCEPT collecitonB
說明:A EXCEPT B代表:從A集合裡減去B集合的元素。換句話說,就是取得A中有B中沒有的元素。
例如:{1,2,3} EXCEPT {2,3}將得到{1}。
文法:collecitonA OVERLAPS collectionB
說明:A OVERLAPS B將判定A、B集合是否有交集,有則返回TRUE,沒有則返回FALSE。其相當於EXISTS(A INTERSECT B)。
例如:{1,2,3} OVERLAPS {3,4} 返回TRUE,而{1,2,3} OVERLAPS {4,5} 返回FALSE。
文法:ANYELEMENT(collection)
說明:ANYELEMENT隨機返回集合中的任意一個元素。
例如:ANYELEMENT({1,2,3})有可能返回1,有可能返回2也有可能返回3。
小結:
本文走馬觀花,簡單介紹了Entity SQL中的一些集合運算子。這些運算子大家其實都見名知意。 列舉在這兒,方便大家一時想不起來時候查閱。