欢迎投稿

今日深度:

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

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


目录
  • Oracle用交叉连接生成数字序列
  • Oracle表的连接(交叉连接 ,内连接,自然连接,外连接,全外连接)
    • 核心:交叉连接
    • 内连接
    • 自然连接
    • 外连接(左外 右外)
    • 全外连接
  • 总结

    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 后面 可以用大于 小于 等于做判断

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。

    您可能感兴趣的文章:
    • Oracle生成连续的数字/字符/时间序列的常用语法
    • oracle 重置序列从指定数字开始的方法详解

    www.htsjk.Com true http://www.htsjk.com/oracle/47920.html NewsArticle Oracle如何利用交叉连接生成数字序列, 目录 Oracle用交叉连接生成数字序列 Oracle表的连接(交叉连接 ,内连接,自然连接,外连接,全外连接) 核心:交叉连接 内连接 自然连接 外连...
    评论暂时关闭