SQL计算困难的典型示例与点评

       SQL的批量结构化数据计算能力是完备的,也就是说找不出什么SQL无法计算的东西。但是其支持层面过低,会导致实际应用时十分繁琐。
      具体表现为如下四个方面:
  • 计算不分步:SQL要求计算在一个语句内写出,必须采用存储过程才能实施分步计算。不分步不仅造成思维困难,而且难以利用中间结果;
  • 集合无序:SQL不直接提供使用位置引用集合成员的机制,与次序和定位相关的计算都需要转换才能实施;
  • 集合化不彻底:SQL的集合功能简单,只用于表示查询的结果集,而不能作为作为基本数据类型广泛应用;
  • 缺乏对象引用:SQL不支持记录引用,数据表间的关联采用同值外键方案,多表联合计算时需要做连接,不仅理解困难而且效率低下;

      基于一种计算体系实现数据计算过程,事实上就是将业务问题翻译成形式化计算语法的过程(类似小学生解应用题,将题目翻译成形式化的四则运算)。而由于SQL的上述四个问题,其模型体系在处理复杂运算时不符合人们的自然思维习惯,造成问题翻译的极大障碍,导致将问题解法形式化成计算语法的难度要远远大于解决问题本身
      下面分别举例说明这四个方面的问题。
      为了让例子中的SQL尽量简捷,这里大量使用了SQL2003标准的窗口函数,故而采用了对SQL2003标准的支持做得较好的ORACLE数据库语法,采用其它数据库的语法编写这些SQL一般将会更复杂。
一.计算不分步
      把复杂的计算分步可以在很大程度地降低问题的难度,反过来,把多步计算汇成一步完成则会提高问题的复杂度。
      任务1    销售部的人数,其中北京籍人数,再其中女员工人数?
            销售部的人数
            1    select count(*) from 员工表 where 部门=‘销售部’
           其中北京籍的人数
           1    select count(*) from 员工表 where 部门=‘销售部’and 籍贯=‘北京’
           在其中的女员工人数
            1    select countT(*) from 员工表
            2    where 部门=‘销售部’and 籍贯=‘北京’and 性别=‘女’
     常规的想法:选出销售部人员计数,再在其中找出其中北京籍人员计数,然后再递进地找出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值