📜  JCL 中的 Join 语句

📅  最后修改于: 2021-09-08 16:03:59             🧑  作者: Mango

先决条件 – 作业控制语言 (JCL)
在 RDBMS 中,SQL JOIN 子句用于连接表并对其执行多项操作。为了对不同平面文件中的记录执行操作,使用了 JOINKEYS。借助 SORT JCL 中的 JOINKEYS,可以根据匹配的字段或 Key 对匹配和不匹配的记录执行各种连接操作。联接可以通过多种方式执行,例如内联接、完全外联接、左外联接、右外联接和非配对组合。

连接操作由三个重要的控制语句 JOINKEYS、JOIN 和 REFORMAT 控制。 SORTJNF1 和 SORTJNF2 是用于指定将用于执行连接操作的文件的 DD 语句。

控制语句:

  1. JOINKEYS FILES=F1, FIELDS=(1, 10, A) – 指定 file1 连接条件。
  2. JOINKEYS FILES=F2, FIELDS=(1, 10, A) – 指定 file2 连接条件。
  3. REFORMAT FIELDS=(F1:1, 71, F2:1, 9) – REFORMAT 字段告诉排序实用程序,通过指定开始和结束位置将哪些字段从输入文件写入输出文件。

JCL SORT 连接两个文件并从两个文件中写入记录:

  1. 匹配记录(内连接) –
    如果排序卡中未指定 join 语句,则将来自 F1 和 F2 的成对记录写入输出文件。

    //SYSIN DD *
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            REFORMAT FIELDS=(F1:1, 71, F2:1, 9)
    /*
  2. File1 中的匹配记录和非匹配记录 –
    排序卡以保留 F1 文件中的未配对记录以及配对记录。这种类型的连接称为 LEFT OUTER JOIN。
    //SYSIN DD *
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            JOIN UNPAIRED, F1
            REFORMAT FIELDS=(F1:1, 71, F2:1, 9)
    /*
  3. 与文件 1 不匹配 –
    排序卡保留 F1 文件中未配对的记录,不能在 F2 中使用重新格式化。
    //SYSIN DD * 
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            JOIN UNPAIRED, F1, ONLY
            REFORMAT FIELDS=(F1:1, 71)
    /*
  4. File2 中匹配的记录和不匹配的记录 –
    排序卡以保留 F2 文件中的未配对记录以及配对记录。这种类型的连接称为 RIGHT OUTER JOIN。
    //SYSIN DD *
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            JOIN UNPAIRED, F2
            REFORMAT FIELDS=(F1:1, 71, F2:1, 9)
    /*
  5. 与文件 2 不匹配 –
    排序卡保留 F2 文件中未配对的记录,不能在 F1 中使用重新格式化。
    //SYSIN DD *
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            JOIN UNPAIRED, F2, ONLY
            REFORMAT FIELDS=(F2:1, 9)
    /*
  6. 两个文件中的匹配记录和非匹配记录 –
    排序卡以保留 F1 和 F2 文件中的未配对记录以及配对记录。这种类型的连接称为完全外部连接。
    //SYSIN DD *
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            JOIN UNPAIRED, F1, F2
            REFORMAT FIELDS=(F1:1, 71, F2:1, 9)
    /*
  7. 来自两个文件的不匹配记录 –
    排序卡只保留 F1 和 F2 文件中未配对的记录。
    //SYSIN DD *
            SORT FIELDS=COPY
            JOINKEYS FILES=F1, FIELDS=(1, 10, A)
            JOINKEYS FILES=F2, FIELDS=(1, 10, A)
            JOIN UNPAIRED, F1, F2, ONLY or JOIN UNPAIRED, ONLY
            REFORMAT FIELDS=(F1:1, 71, F2:1, 9)
    /*