Oracle 数据库中 FULL OUTER JOIN 的作用 ?

FULLOUTERJOIN用于显示两个表的所有记录,包括匹配和不匹配的行,用NULL填充缺失部分。示例展示了如何在SQL查询中使用FULLOUTERJOIN合并具有不同数据的BRAIN.DS_WOKER_WORK_HOUR_INFO和BRAIN.DS_PRODUCT_EQUIP_INFO表,以获取单位编号、工人总数、设备数量等信息。
摘要由CSDN通过智能技术生成

当需要同时显示两个表中所有记录时,FULL OUTER JOIN 就非常有用。

FULL OUTER JOIN 返回左表(Table A)和右表(Table B)的所有行,并且如果左表或右表中没有匹配的行,则使用 NULL 值填充缺失的部分。

 例子:

SELECT 
    '' AS 唯一标识,
    '0' AS 是否汇总,
    '04' AS 数据粒度,
    COALESCE(a.ORG_NO, b.ORG_NO) AS 单位编号,
    NVL(a.WOKER_TOTAL_NUM, 0) AS 工人总数,
    NVL(b.DENSO_NUM, 0) AS 电装表贴数量,
    NVL(b.COMMISSION_BENCH_NUM, 0) AS 调试台数量,
    NVL(b.VIBRATION_TABLE_NUM, 0) AS 振动台数量,
    COALESCE(a.DATA_DATE, b.DATA_DATE, SYSDATE) AS 数据日期,
    COALESCE(a.CREATE_TIME, b.CREATE_TIME, SYSDATE) AS 统计日期
FROM (
    SELECT 
    ORG_NO,
    WOKER_TOTAL_NUM,
    DATA_DATE,
    CREATE_TIME
    FROM (
        SELECT 
            ROW_NUMBER() OVER(PARTITION BY ORG_NO, TO_CHAR(DATA_DATE, 'YYYY') ORDER BY DATA_DATE DESC, CREATE_TIME DESC) rn,
            ORG_NO,
            NVL(WOKER_TOTAL_NUM, 0) AS WOKER_TOTAL_NUM,
            DATA_DATE,
            CREATE_TIME
        FROM BRAIN.DS_WOKER_WORK_HOUR_INFO
    ) a
    WHERE a.rn = 1
) a
FULL OUTER JOIN (
    SELECT 
    ORG_NO,
    DENSO_NUM,
    COMMISSION_BENCH_NUM,
    VIBRATION_TABLE_NUM,
    DATA_DATE,
    CREATE_TIME
    FROM (
        SELECT 
            ROW_NUMBER() OVER(PARTITION BY ORG_NO, TO_CHAR(DATA_DATE, 'YYYY') ORDER BY DATA_DATE DESC, CREATE_TIME DESC) rn,
            ORG_NO,
            NVL(DENSO_NUM, 0) AS DENSO_NUM,
            NVL(COMMISSION_BENCH_NUM, 0) AS COMMISSION_BENCH_NUM,
            NVL(VIBRATION_TABLE_NUM, 0) AS VIBRATION_TABLE_NUM,
            DATA_DATE,
            CREATE_TIME
        FROM BRAIN.DS_PRODUCT_EQUIP_INFO
    ) b
    WHERE b.rn = 1
) b 
ON a.ORG_NO = b.ORG_NO AND TO_CHAR(a.DATA_DATE,'YYYY') = TO_CHAR(NVL(b.DATA_DATE, SYSDATE),'YYYY')

a表执行结果:

b表执行结果:

 FULL OUTER JOIN  关联之后的结果:(a表多了一条:2021 年的数据,b表没有) ,(b表多了一条:2028年的数据 ,a表没有)   。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大怪~将军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值