当前位置: 代码网 > it编程>数据库>Oracle > Oracle如何利用交叉连接生成数字序列

Oracle如何利用交叉连接生成数字序列

2024年07月02日 Oracle 我要评论
oracle用交叉连接生成数字序列建表并插入记录create table t_number(n integer primary key);insert into t_number values (0)

oracle用交叉连接生成数字序列

建表并插入记录

create table t_number(n integer primary key);
insert into t_number values (0);
insert into t_number values (1);
insert into t_number values (2);
insert into t_number values (3);
insert into t_number values (4);
insert into t_number values (5);
insert into t_number values (6);
insert into t_number values (7);
insert into t_number values (8);
insert into t_number values (9);

实现sql:

select hundred.n * 100 + ten.n * 10 + one.n as n
from t_number hundred
cross join t_number ten
cross join t_number one
order by n

执行结果:

查询返回了一个0~999的数字序列。

显然,我们可以通过更多的自连接生成更大的数字序列。

还有其他生成序列的方法:

例如connect by结合rownum实现

select rownum from dual connect by rownum<=10;

使用level实现

select level from dual connect by level<=10;

oracle表的连接(交叉连接 ,内连接,自然连接,外连接,全外连接)

核心:交叉连接

select a.column1,a.column2,b.column1,b.column2 from a cross join b;

交叉连接就是做笛卡尔积 计算 原理如下 具体原理百度

解读示例: a表有2行数据 , b表有3行数据 交叉连接后,产生一个新表 c。

a ----------b
1 a2 —1 b2
2 a4 —2 b4
------ —3 b6
c
1 a2 1 b2
1 a2 2 b4
1 a2 3 b6
2 a4 1 b2
2 a4 2 b4
2 a4 3 b6

表c左边为 a表数据, 右边为b表数据。 一共产生6行数据(2*3=6)。其实就是排列组合。

内连接

在表c中 根据on 关键字后的条件 找行数据,然后 显示出来,显示的列就是select后的指定列;

特殊点:on 的两个判断列 名字可以不同 类型大致相同

select a.column1,a.column2,b.column1,b.column2 from a inner join b on a.column1=b.column1

在c表中找 到

1 a2 1 b2
2 a4 2 b4

自然连接

就是一种内连接

select a.column1,a.column2,b.column1,b.column2 from a natural join b

特殊在于:

1、省略了 on 语句 (条件语句) 系统会自动找 判断列

2、表a和表2中 至少有各自有一列 作为判断列,名称相同,类型大致相同()

外连接(左外 右外)

先根据on 语句的条件 进行内连接 得到一个结果,然后在结果的基础上 ,添加行,把a侧没有显示的 行数据,显示出来,b侧 显示为null;

全外连接

此连接 先根据on 语句的条件 进行内连接 得到一个结果,然后在结果的基础上,添加行,把a侧没有显示的 行数据,显示出来,b侧 显示为null; 把b侧没有显示的 行数据,显示出来,a侧 显示为null;

感兴趣的 可以自己做几个例子写一写

on 后面 可以用大于 小于 等于做判断

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com