環境情報
今回の検証ではi Learning社の公開しているQEOLのライブラリーを使用しております
https://www.i-learning.jp/service/selfstudy/eol.html
AND文の例(抽出)
TOKMSPテーブルから、TKTIKU(地区)が '02' で、TKGURI(売上金額)が10万を超え、TKSIME(締区分)が '2' のレコードを全て抽出する。
SQL文
FROM S11142.TOKMSP
WHERE TKTIKU='02' AND TKGURI>100000 AND TKSIME='2'
RPG構文
C TKTKTIKU IFEQ '02'
C TKTKGURI ANDGT 100000
C TKTKSIME ANDEQ '2'
OR文の例(抽出)
TOKMSPテーブルから、TKNURI(当月売上高)が2000万を超えるか、またはTKZURI(前月売上高)が4000万を超えるレコードを全て抽出する。
SQL文
FROM S11142.TOKMSP
WHERE TKNURI>20000000 OR TKZURI>40000000
RPG構文
C TKTKNURI IFGT 20000000
C TKTKZURI ORGT 40000000
IN文
TOKMSP テーブルから、TKPOST(郵便番号)が '114' または '167' のすべてのレコードを抽出する。
SQL文
SELECT *
FROM S11142.TOKMSP
WHERE TKPOST IN ('114', '167');
RPG構文
C TKTKPOST IFEQ '114'
C TKTKPOST OREQ '167'
NOT IN文
HINMSP テーブルから、HNVEND(仕入先番号)が '1600'、'4100'、'1003'のいずれにも該当しないすべてのレコードを抽出する。
SQL文
SELECT *
FROM S11142. HINMSP
WHERE HNVEND NOT IN ('1600', '4100', '2800');
RPG構文
C HNHNVEND IFNE '1600'
C HNHNVEND ANDNE '4100'
C HNHNVEND ANDNE '2800'
RPG構文 vs SQL文でのIN/NOT IN
LIKE文
TOKMSP テーブルから、TKADR1(住所1)が『東京都品川区』で始まるすべてのレコードを抽出する。
SQL文
SELECT *
FROM S11142.TOKMSP
WHERE TKADR1 LIKE '東京都品川区%';
RPG構文
C EVAL @WKFLD2 =
C %SUBST(@WKFLD1:1:%LEN(@WKFLD1)-1)
C IF %SUBST(TKTKADR1:1:13) = @WKFLD2
RPG構文 vs SQL文でのLIKE
所感
論理演算子(AND/OR)や集合演算(IN/NOT IN)の使用方法については、RPGとSQLの間に大きな差は存在しない。
しかし、LIKE句に関しては、RPGではシフト文字を考慮した文字列加工を行う必要があるため、SQLの方がより直感的かつ簡潔に記述できる。
今回のように単純な抽出処理であれば、1行で完結するSQLの方が適しているが、複雑な処理を組み込む場合には、慣れ親しんだRPGの方が柔軟に対応できると感じた。
当記事の著作権はIBMに帰属します。
詳細はこちらを参照ください。

















