下面的九九乘法表大家应该都很熟悉,它是小学初学乘法时必备的东西:
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语言还有很多其他的玩法。