okinawa

IT勉強メモ

集合指向言語と手続き型言語の違い

見返す用のかんたんなメモとして。

集合指向言語と手続き型言語

集合指向:まとめて処理
手続き型:1個ずつ処理

JavaのStreamAPIやC#LinQなども集合指向だとChat GPT氏が言ってた。

SQLJavaで同じことをやってみる

SQL

元テーブル

まとめて処理。
簡潔に書ける。

update Table1
set
value = value + 1
where tenpo_cd = 1

実行結果

Java

擬似的なコード↓ ループ文で1件ずつ処理。

for(int i = 0; i < Table1.size(); i++) {
    String tenpo_cd = Table(i).tenpo_cd;
    if(tenpo_cd == 1) {
        元テーブル(i).value += 1;
    ]
}

※注意:Javaオブジェクト指向型言語。手続き型でも書ける。

集合指向言語の思想

思想の1つに「ループ文を使わずに繰り返し処理をできるようにしよう。」というのがあるらしい。

余談:MAX関数の内部処理

たしかにSQLではfor文みたいなループ文はないけど、内部ではどんな処理やっているの?と思ったのでBing AIに聞いてみた。

結論としては手続き型言語と一緒でした。
内部処理は一緒だけどプログラマーとしては簡潔に書けていいよね、ということなのかな。

以下、Bing AI氏の回答↓

MAX関数の内部処理についてお答えします。

MAX関数は、指定したカラムのレコードを一つずつ比較して、最大値を見つけるというシンプルなアルゴリズムで動作します²。例えば、次のようなテーブルがあるとします。

id name score
1 A 50
2 B 80
3 C 60

このテーブルからscoreカラムの最大値を取得するには、次のようなSQL文を実行します。

SELECT MAX(score) FROM table;

すると、MAX関数はscoreカラムのレコードを一つずつ読み込んで、最大値を保持する変数(仮にmaxと呼びます)と比較します。最初はmaxには何も入っていないので、50が入ります。次に80が読み込まれると、80 > max(50)なので、maxに80が入ります。次に60が読み込まれると、60 < max(80)なので、maxは変わりません。これで全てのレコードを読み終わったので、max(80)が結果として返されます²。

このように、MAX関数は内部的には単純な比較操作を繰り返して最大値を探しています。

関連記事

dodosu.hatenablog.jp

参考

ソース: Bing との会話 2023/2/25
(1) 【SQL】MAX関数(SELECT MAX)を1分でわかりやすく解説. https://it-biz.online/it-skills/sql-max/ アクセス日時 2023/2/25.
(2) 【超便利!】SQLのMAX関数・MIN関数の使い方をわかり .... https://style.potepan.com/articles/17740.html アクセス日時 2023/2/25.
(3) 【SQL】グループごとに最大の値を持つレコードを取得する方法3 .... https://takakisan.com/sql-max-in-each-group/ アクセス日時 2023/2/25.