「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

フェッチ【DB】

pointこの用語のポイント

point検索結果から1件取り出すよ

pointデータベース関連の話で出てくるよ

スポンサーリンク

簡単に書くよ

フェッチ【DB】(英:fetch)とは

データベースの検索結果から1件抜き出すこと
です。


image piyo

詳しく書くよ

最初に留意事項です。
フェッチを理解しようと思ったら「カーソル」から勉強した方が分かりやすいと思います。
余裕がある方は「カーソル」の説明からご覧ください。

フェッチ

面倒くさい方は、そのまま読み進めていただいても結構です。
簡単にですが、カーソルの説明も書いておきます。

それでは、いってみましょう。

サクっと一言で説明すると

検索結果から1件取り出す

のが「フェッチ」です。

例えば、そうですね。

ピヨ太君がピヨピヨ検索エンジンで美味しい肉まんの作り方を検索しました。

フェッチ2

条件に一致する情報が10件見つかりました。

フェッチ3

ピヨ太君は見つかった検索結果の中から1つ選んで中を見ました。

フェッチ4

この話においてピヨ太君がやった「見つかった検索結果から1つ選んで中を見る」行為がフェッチ(のイメージ)です。

フェッチ5

それでは次に、実際のデータベースの話で見てみましょう。
ちなみにデータベースは「データを入れておく箱」ね。

フェッチ6

前提として、データベースを検索したとき、検索結果として見つかるデータは1件とは限りません。
わちゃわちゃと、いっぱい見つかる場合があります。

コンピュータさんは、この「わちゃわちゃ」を一度に処理するのが苦手です。
一度に処理しようとすると頭が痛くなっちゃいます。

フェッチ7

そこでデータベースには、検索結果をとあるところに溜めておいて、そこから1件ずつ抜き出す仕組みが用意されています。

フェッチ8

この仕組みがあれば、検索結果が何件でも大丈夫です。

検索結果が10件あれば、1件の処理を10回繰り返します。
検索結果が100件あれば、1件の処理を100回繰り返します。
検索結果が1,000件あれば……キリがないので、これくらいにしておきましょう。

とにかく、検索結果が何件になろうと問題ありません。
1度に処理するのは1件だからです。

これなら、コンピュータさんは頭が痛くならなくて済みそうですね。

この「検索結果をとあるところに溜めておいて、そこから1件ずつ抜き出す仕組み」を「カーソル」と言います。

フェッチ9

そして

検索結果から1件抜き出す処理

がフェッチです。

フェッチ10

繰り返しになりますが、もう一度書いておきますね。
条件にあったものを選び出すのが「検索」です。
検索した直後の状態では、検索結果が、ひとかたまりになっています。
ひとかたまりになっている検索結果の中から(実際に処理をするために)1件抜き出すのがフェッチです。

次に、OracleのPL/SQLを例に、実際のフェッチ処理を見てみます。
フェッチについて何となく分かれば満足な方は、ここから先を読む必要は ありません。
ここから先の説明は、もう少し小難しくなります。

……あっ、読んでくださるのですね?
それは、どーもです。

例えば

DECLARE
 CURSOR CUR_HOGE1 IS SELECT column01, column02 FROM tbl_hoge WHERE hoge_flg=1;
 REC_HOGE1 CUR_HOGE1%ROWTYPE;
BEGIN
 OPEN CUR_HOGE1;

 LOOP
  FETCH CUR_HOGE1 INTO REC_HOGE1;
  EXIT WHEN CUR_HOGE1%NOTFOUND;

  (何かの処理)

 END LOOP

 CLOSE CUR_HOGE1;
END;


な、よく分からないコードが あったとしましょう。
まずは、このコードを上から説明していきます。

CURSOR CUR_HOGE1 IS SELECT column01, column02 FROM tbl_hoge WHERE hoge_flg=1;

の部分がカーソルの宣言です。
ここで「どんなデータを引っ張ってくるよ~!」を定義しています。

次に

OPEN CUR_HOGE1;

の部分がカーソルを開いているところです。
「OPEN」です。
そのまんまですね。

LOOP
 FETCH CUR_HOGE1 INTO REC_HOGE1;
 EXIT WHEN CUR_HOGE1%NOTFOUND;

 (何かの処理)

END LOOP


の部分がメインの処理部分です。

LOOP ~ END LOOP

の部分は「おら~、ぐるぐる回って繰り返せや~」な命令です。
ぐるぐるの中の

FETCH CUR_HOGE1 INTO REC_HOGE1;

のところで、データを1件取得して現在位置を1つ進めています。
この処理がフェッチです。
「FETCH」って書いてありますよね。

次の

EXIT WHEN CUR_HOGE1%NOTFOUND;

は条件判定文です。
「もしデータがなかったら(終わりまで行ったら)ぐるぐるを抜けてね」な指示です。

最後に、使い終わったカーソルを閉じます。

CLOSE CUR_HOGE1;

の部分です。
「CLOSE」します。
そのまんまですね。

ここまでの説明をまとめて書くと、以下のようになります。

DECLARE
 CURSOR CUR_HOGE1 IS SELECT column01, column02 FROM tbl_hoge WHERE hoge_flg=1; -- カーソルの宣言
 REC_HOGE1 CUR_HOGE1%ROWTYPE;
BEGIN
 OPEN CUR_HOGE1; -- カーソルを開く

 LOOP -- ぐ~る、ぐ~る
  FETCH CUR_HOGE1 INTO REC_HOGE1; -- フェッチする
  EXIT WHEN CUR_HOGE1%NOTFOUND; -- 終わりだったら、ぐるぐるを抜ける

  (何かの処理)

 END LOOP

 CLOSE CUR_HOGE1; -- カーソルを閉じる
END;


これらの一連の処理における

FETCH ~

の部分がフェッチ処理です。
検索結果のかたまりから1件のデータを取り出する処理です。


image piyo2

一言でまとめるよ

まぁ「フェッチ」って単語が出てきたら「データベースの検索結果から1件抜き取るんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像006
書籍画像015

おまけ

■訳してみるよ

「fetch(フェッチ)」の意味は

(行って)取ってくる
・連れてくる
・引き出す


とかです。
「取ってくる」が近いですかね。




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
あたえる人があたえられる
ソフトウェア開発現場の「失敗」集めてみた。 42の失敗事例で学ぶチーム開発のうまい進めかた