深入学习和研究Oracle,希望结交更多志同道合的朋友。

【原创】如何使用SQL生成九九乘法表

上一篇 / 下一篇  2008-04-19 20:36:10 / 个人分类:Oracle

下面的九九乘法表大家应该都很熟悉,它是小学初学乘法时必备的东西:

 

 1*1=1

 1*2=2 2*2=4

 1*3=3 2*3=6 3*3=9

 1*4=4 2*4=8 3*4=12 4*4=16

 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

 

如何使用计算机语言产生这张表呢?

如果使用C、Java、PL/SQL等支持循环的编程语言很容易产生这张乘法表。今天咱们来谈谈如何使用不支持循环的SQL语言来产生,具体的SQL语句如下(此语句可以在Oracle9i以上版本的数据库运行):

with t as (select level as n from dual connect by level <=9)

select sys_connect_by_path(b.n || '*' || a.n || '=' || a.n * b.n, ' ') as 九九乘法表

  from t a, t b

    where a.n >= b.n and level = a.n

      start with b.n=1  

        connect by a.n=prior a.n and b.n=prior b.n+1;

这句SQL看上去很简短,但其中使用到4个Oracle9i数据库的新特性,下面我就分别介绍一下:

1、  with语句

这条语句相当于一个轻量化的视图,不用通过create view创建就可以使用,但是只对紧跟在它后面的SQL语句有效。

2、  select level as n from dual connect by level <=9语句

这条语句可以循环产生1到9的9条记录

3、  connect by和prior语句

这两个语句结合使用,可以产生层次化的查询结果,比如:通过查询获得一个部门所有员工的上下级关系。

4、  sys_connect_by_path()分析函数

sys_connect_by_path()函数可以将connect by和prior产生的层次化查询的多行结果连接为一行显示。

 

从上面的小例子,大家可以看出SQL语言还有许多可以发掘的地方,也可以说SQL语言还有很多其他的玩法。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar