カテゴリ: COBOL 更新日: 2026/03/02

COBOLで学ぶWHERE句の条件付き検索!初心者向けデータ取得の基本

WHERE句を使った条件付き検索の例
WHERE句を使った条件付き検索の例

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLでデータベースから特定の条件に合うデータだけ取得することってできますか?」

先生

「できます。それがWHERE句を使った条件付き検索です。SQLの基本のひとつで、指定した条件に合うレコードだけを抽出できます。」

生徒

「具体的にはどのように使うのですか?」

先生

「それでは、実際に例を見ながら説明しましょう。」

1. WHERE句とは?

1. WHERE句とは?
1. WHERE句とは?

COBOLでデータベースを操作するとき、WHERE句は検索条件を指定するために使います。たとえば、社員テーブルから特定の部署に所属する社員だけを取得したい場合に利用します。条件付き検索を行うことで、必要なデータだけを効率的に抽出できます。

2. WHERE句の基本構文

2. WHERE句の基本構文
2. WHERE句の基本構文

COBOLでSQLを埋め込む場合、EXEC SQLEND-EXECで囲んで書きます。WHERE句を使った基本的な構文は次の通りです。


EXEC SQL
    SELECT EMPLOYEE_ID, EMP_NAME, DEPT
    INTO :EMP-ID, :EMP-NAME, :EMP-DEPT
    FROM EMPLOYEE
    WHERE DEPT = :TARGET-DEPT
END-EXEC.

この例では、社員テーブル(EMPLOYEE)から、指定した部署(TARGET-DEPT)に所属する社員のID、名前、部署を取得しています。

3. WHERE句で使える条件

3. WHERE句で使える条件
3. WHERE句で使える条件

WHERE句では次のような条件が使えます。

  • = : 等しい(例:DEPT = '営業')
  • < > : 等しくない(例:AGE <> 30)
  • <, <=, >, >= : 大小比較(例:SALARY > 50000)
  • AND, OR : 複数条件の組み合わせ(例:DEPT = '営業' AND SALARY > 50000)
  • BETWEEN : 範囲指定(例:AGE BETWEEN 25 AND 35)
  • LIKE : 部分一致検索(例:EMP_NAME LIKE '山田%')

条件を工夫することで、より柔軟な検索が可能になります。

4. 実践例:営業部の社員を検索する

4. 実践例:営業部の社員を検索する
4. 実践例:営業部の社員を検索する

WORKING-STORAGE SECTION.
01  EMP-ID     PIC 9(4).
01  EMP-NAME   PIC X(20).
01  EMP-DEPT   PIC X(10).
01  TARGET-DEPT PIC X(10) VALUE '営業'.

PROCEDURE DIVISION.
    EXEC SQL
        SELECT EMPLOYEE_ID, EMP_NAME, DEPT
        INTO :EMP-ID, :EMP-NAME, :EMP-DEPT
        FROM EMPLOYEE
        WHERE DEPT = :TARGET-DEPT
    END-EXEC.

    IF SQLCODE = 0
        DISPLAY "検索成功:" EMP-NAME " (ID:" EMP-ID ")"
    ELSE
        DISPLAY "検索失敗:" SQLCODE
    END-IF.

検索成功:田中太郎 (ID:1001)

この例では、営業部の社員だけを検索し、成功すれば名前とIDを表示しています。SQLCODEでエラーをチェックすることで、安全にデータを取得できます。

5. 初心者向けポイント

5. 初心者向けポイント
5. 初心者向けポイント

WHERE句を使うと、必要なデータだけを効率的に取得できます。プログラミング未経験の方でも、条件を工夫すれば抽出したいデータを簡単に指定できるのがポイントです。また、SQLCODEやSQLSTATEを使って検索結果やエラーを確認する習慣をつけることで、安全にデータベース操作ができるようになります。

6. 複数条件での検索

6. 複数条件での検索
6. 複数条件での検索

複数条件を組み合わせる場合、ANDやORを使用します。


EXEC SQL
    SELECT EMPLOYEE_ID, EMP_NAME
    INTO :EMP-ID, :EMP-NAME
    FROM EMPLOYEE
    WHERE DEPT = :TARGET-DEPT
      AND SALARY > 50000
END-EXEC.

このようにすれば、営業部で給与が50000以上の社員だけを抽出できます。複雑な条件もWHERE句で簡単に指定できるのがCOBOLの特徴です。

まとめ

まとめ
まとめ

今回の記事では、COBOLプログラミングにおけるデータベース操作の要、WHERE句を用いた条件付き検索について詳しく解説してきました。業務システムの現場において、データベースに蓄積された膨大なレコードの中から、必要な情報だけをピンポイントで抽出する技術は欠かせません。WHERE句を使いこなすことで、プログラムの処理速度を向上させ、無駄なリソース消費を抑えることが可能になります。

WHERE句の重要性と活用シーン

基幹システムで利用されることが多いCOBOLでは、大量の顧客データや売上データを扱う場面が多々あります。全件検索を行ってからプログラム側で判断するのではなく、SQLのWHERE句を用いてデータベースエンジンの段階でフィルタリングを行うのが鉄則です。これにより、ネットワーク負荷の軽減やレスポンスの向上が期待できます。

条件指定のバリエーションと記述のポイント

基本的な比較演算子(=, <>, >, <)に加えて、実務では以下のような構文も頻繁に使用されます。

  • LIKE句による部分一致検索: 氏名の前方一致や住所のキーワード検索に便利です。
  • IN句による複数値指定: 「部署コードが01、03、05のいずれか」といった指定がスマートに書けます。
  • IS NULL / IS NOT NULL: データが未入力(ヌル値)の状態を判定する際に必須です。

C#との連携を意識したデータ処理

現代のシステム開発では、バックエンドの基幹バッチ処理はCOBOLで行い、フロントエンドやAPIサーバーはC#などのモダンな言語で構築する構成も珍しくありません。例えば、C#側でユーザーが入力した検索条件をCOBOLのプログラムに渡し、COBOL側でWHERE句を動的に組み立ててデータを取得するような連携です。

参考までに、もしC#側で同様の条件判定ロジックを記述する場合のコード例も見ておきましょう。COBOLのSQL実行結果を受け取った後の処理イメージです。


// 取得した社員リストを特定の条件でさらにフィルタリングするC#の例
var filteredEmployees = employeeList.Where(e => e.Salary > 50000 && e.Dept == "営業").ToList();

foreach (var emp in filteredEmployees)
{
    Console.WriteLine($"高給与の営業部員: {emp.EmpName} (ID: {emp.EmpId})");
}

高給与の営業部員: 田中太郎 (ID: 1001)

信頼性の高いエラーハンドリング:SQLCODEの活用

COBOLでSQLを実行する際、最も重要なのがSQLCODEのチェックです。データが1件も見つからなかった場合は「100(または+100)」、正常終了なら「0」、何らかのエラーが発生した場合は負の値が返ってきます。WHERE句で厳しい条件を指定しすぎると、該当データなしの状態が発生しやすいため、必ず判定ロジックを組み込みましょう。


    EXEC SQL
        SELECT SALARY INTO :EMP-SALARY
        FROM EMPLOYEE
        WHERE EMPLOYEE_ID = :SEARCH-ID
    END-EXEC.

    EVALUATE SQLCODE
        WHEN 0
            DISPLAY "給与額の取得に成功しました。"
        WHEN 100
            DISPLAY "指定されたIDの社員は存在しません。"
        WHEN OTHER
            DISPLAY "データベースエラーが発生しました。コード:" SQLCODE
    END-EVALUATE.

これからの学習ステップ

WHERE句の基本をマスターしたら、次は複数のテーブルを結合して条件検索を行うJOINや、検索結果の順序を制御するORDER BY句の学習に進みましょう。これらを組み合わせることで、より高度なレポート作成や集計処理が可能になります。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!WHERE句を使うことで、特定のデータだけを狙い撃ちして取得する方法がよく分かりました。今までは全部のデータを読み込んでから判断しなきゃいけないのかと思っていました。」

先生

「その通りです。大規模なシステムになればなるほど、データベースから持ってくるデータの量を最小限に抑えることが重要になります。WHERE句はまさにそのための強力な武器なんですよ。」

生徒

「サンプルコードにあった、ANDを使って複数の条件を組み合わせる書き方も便利ですね。年齢が30代で、かつ役職がついている人、といった複雑な抽出も簡単にできそうです。」

先生

「そうですね。ただ、条件を増やしすぎるとインデックスの効きが悪くなって検索が遅くなることもあるので、そこはデータベースの設計と相談しながら最適化していくのがプロの技です。まずは正しくデータを取れるようになるところから始めましょう。」

生徒

「なるほど、パフォーマンスのことも考える必要があるんですね。SQLCODEのチェックも忘れずに、堅牢なプログラムが書けるように練習してみます!」

先生

「その意気です。COBOLは古い言語だと思われがちですが、こうしてSQLを埋め込んで使う手法は今の開発現場でも現役バリバリです。しっかり身につけていきましょうね。」

カテゴリの一覧へ
新着記事
New1
C#
C#の正規表現エスケープ完全ガイド!初心者でも迷わないバックスラッシュの使い方
New2
Azure
Azureアカウント作成と管理ガイド!法人契約と個人利用の適切な使い分け
New3
COBOL
COBOLのADD・SUBTRACT文の使い方を完全ガイド!初心者でもわかる足し算と引き算の基本
New4
COBOL
COBOLのCOMPUTE文と算術演算子の基本を完全ガイド!初心者でもわかる数値計算の仕組み
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLのバッチ処理とは?基本構成と役割を初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
C#
C#のasyncとawaitの基本的な使い方をマスターしよう!非同期処理をやさしく解説
No.3
Java&Spring記事人気No3
C#
C#の日付型(DateTime)と基本的な使い方を解説|初心者向け入門ガイド
No.4
Java&Spring記事人気No4
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.5
Java&Spring記事人気No5
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方