環境情報
今回の検証ではi Learning社の公開しているQEOLのライブラリーの
TOKMSP(得意先マスター)を使用しています。
その他のデータはこちらで検証用に用意したものです。
https://www.i-learning.jp/service/selfstudy/eol.html
SQL&RPG比較
以下の構文を使用したサンプルSQL文をACSのSQLスクリプトで実行。
UNION(和集合)
INNERJOIN(内部結合)
LEFTJOIN(外部結合)
RPGで同じ実行結果になるようにプログラムを開発。
2つの記述を比較して双方のメリット、デメリットを考えてみる。
UNION(SQL)
TOKMSP24(得意先マスター24年)とTOKMSP25(得意先マスター25年)をUNIONで結合。
データの中身は同じため、同一得意先コードが2件ずつ存在。
SQL文
SELECT * FROM QEOL.TOKMSP24
UNION ALL
SELECT * FROM QEOL.TOKMSP25
ORDER BY TKBANG
実行結果
UNION(RPG)
RPGで再現するなら?
2つのマスターを全件READしてファイルに登録。
RPG文
INNER JOIN(SQL)
TOKMSP(得意先マスター)にTIKUMSP(地区マスター)を地区コードで結合し、
地区情報を取得。
地区マスターには地区コード02のデータのみ存在。
地区コード02の得意先データのみ抽出される。
SQL文
SELECT *
FROM QEOL.TOKMSP
INNER JOIN QEOL.TIKUMSP ON TKTIKU = TITIKU
実行結果
INNER JOIN(RPG)
RPGで再現するなら?
地区マスターが存在する時のみ地区情報を取得してデータを作成。
地区マスターが存在しない場合はデータを作成しない。
WRKQRYでは結合のタイプ=1がINNER JOINに該当。
RPG文
LEFT JOIN(SQL)
TOKMSP(得意先マスター)にTIKUMSP(地区マスター)を地区コードで結合し、
地区情報を取得。
地区マスターには地区コード02のデータのみ存在。
全ての得意先データが抽出される。地区コード02以外のデータは地区情報が空欄。
SQL文
SELECT *
FROM QEOL.TOKMSP
LEFT JOIN QEOL.TIKUMSP ON TKTIKU = TITIKU
実行結果
LEFT JOIN(RPG)
RPGで再現するなら?
地区マスターが存在する場合は地区情報を取得してデータを作成。
地区マスターが存在しない場合は地区情報を空欄のままデータを作成。
WRKQRYでは結合のタイプ=2がLEFT JOINに該当。
RPG文
当記事の著作権はIBMに帰属します。
詳細はこちらを参照ください。





