【数据蒋堂】第 22 期:有序遍历语法
![dd9ec3982f8d206f23a385f69e24ee04.png](https://img-blog.csdnimg.cn/img_convert/dd9ec3982f8d206f23a385f69e24ee04.png)
前一期 【数据蒋堂】第 21 期:常规遍历语法
我们继续讨论遍历运算的语法规则。
5. 序号的引用
SQL 延用了数学上的无序集合概念,遍历时也不关注次序。但计算机只能一步步地执行(暂先不考虑并行计算的情况),遍历集合时总会有个次序,充分利用这个次序就可以方便地表达更丰富的计算需求。
比如我们想从一个集合取出半数成员构成新集合。这看起来象是过滤运算,但过滤条件和集合成员本身并没有关系,而是由遍历成员时的次序号决定的。
只有 ~ 写法无法方便地描述出这种运算,这时候还需有个符号(标识符)来表示遍历的次序号。
事实上,大部分高级语言在写循环语句时都会有个循环变量来表示次序号,就起到了这个作用。但许多集合化语言中并没有提供这个机制,碰到这种运算就只能再写循环才能完成,就显得很繁琐。SQL 也没有表示遍历次序后的方案,只能先用子查询人为制造一个序号出来再针对这个序号进行过滤。
我们用 #来表示遍历的次序号,那么这个运算就很容易写了:
A.select(#<=A.len()/2) 取前一半成员A.select(#%2==0) 取偶数位置的成员A.select(#<=A.len()/2) 取前一半成员A.select(#%2==0) 取偶数位置的成员
对应地