3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RPG構文 vs SQL文(検索関連)

Last updated at Posted at 2025-10-16

環境情報

今回の検証では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'

実行結果
image.png

RPG構文

C     TKTKTIKU      IFEQ      '02'     
C     TKTKGURI      ANDGT     100000   
C     TKTKSIME      ANDEQ     '2'      

image.png
実行結果
image.png

OR文の例(抽出)

TOKMSPテーブルから、TKNURI(当月売上高)が2000万を超えるか、またはTKZURI(前月売上高)が4000万を超えるレコードを全て抽出する。

SQL文

   FROM S11142.TOKMSP 
   WHERE TKNURI>20000000 OR TKZURI>40000000

実行結果
image.png

RPG構文

C     TKTKNURI      IFGT      20000000            
C     TKTKZURI      ORGT      40000000            

image.png
実行結果
image.png
RPG構文 vs SQL文でのAND/OR比較
タイトルなし.jpg

IN文

TOKMSP テーブルから、TKPOST(郵便番号)が '114' または '167' のすべてのレコードを抽出する。

SQL文

SELECT * 
FROM S11142.TOKMSP 
WHERE TKPOST IN ('114', '167');

実行結果
image.png

RPG構文

C     TKTKPOST      IFEQ      '114'  
C     TKTKPOST      OREQ      '167'  

image.png
実行結果
image.png

NOT IN文

HINMSP テーブルから、HNVEND(仕入先番号)が '1600'、'4100'、'1003'のいずれにも該当しないすべてのレコードを抽出する。

SQL文

SELECT * 
FROM S11142. HINMSP 
WHERE HNVEND NOT IN ('1600', '4100', '2800');

実行結果
image.png

RPG構文

C     HNHNVEND      IFNE      '1600'                                   
C     HNHNVEND      ANDNE     '4100'                                   
C     HNHNVEND      ANDNE     '2800'                                   

image.png

実行結果
image.png

RPG構文 vs SQL文でのIN/NOT IN

タイトルなし.jpg

LIKE文

TOKMSP テーブルから、TKADR1(住所1)が『東京都品川区』で始まるすべてのレコードを抽出する。

SQL文

SELECT * 
FROM S11142.TOKMSP 
WHERE TKADR1 LIKE '東京都品川区%';

実行結果
image.png

RPG構文

C                   EVAL      @WKFLD2 =                                  
C                             %SUBST(@WKFLD1:1:%LEN(@WKFLD1)-1)          
C                   IF        %SUBST(TKTKADR1:1:13) = @WKFLD2            

image.png
実行結果
image.png

RPG構文 vs SQL文でのLIKE

タイトルなし.jpg

所感

論理演算子(AND/OR)や集合演算(IN/NOT IN)の使用方法については、RPGとSQLの間に大きな差は存在しない。
しかし、LIKE句に関しては、RPGではシフト文字を考慮した文字列加工を行う必要があるため、SQLの方がより直感的かつ簡潔に記述できる。
今回のように単純な抽出処理であれば、1行で完結するSQLの方が適しているが、複雑な処理を組み込む場合には、慣れ親しんだRPGの方が柔軟に対応できると感じた。


当記事の著作権はIBMに帰属します。
詳細はこちらを参照ください。

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?