バインド変数
変数だよ
SQL文に埋め込むよ
後から実際の値に置き換えることで、動的にSQL文を作れるよ
簡単に書くよ
バインド変数(読:バインドヘンスウ 英:bind variables)とは
SQL文
(データベースに対する命令文)に埋め込む変数
(値を入れておく箱)。
もう少し具体的に書くと
実際の値を後から設定できるように、SQL文の一部を変数にしておくことがあるのですけどね。そのときの変数のことだよ
です。
詳しく書くよ
サクっと一言で説明すると
SQL文に埋め込む変数
が「バインド変数」です。
……と、いきなり言われても分からないですよね。
大丈夫です。
順番に説明していきます。
まずは予備知識からいきましょう。
・データベース
・SQL
・SQL文
・バインド
・変数
について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
データベースは「データを入れておく箱」です。
突っ込んで考えると混乱するかもしれません。
何となくのフィーリングで理解してください。
SQLは「データベースと やり取りするときに使う言葉」です。
データベースにデータを入れるときは、データベースさんに「これを入れておいて」と命令します。
データベースからデータを取り出すときは、データベースさんに「こんなデータを取り出しておくれ」と命令します。
SQLは、そんな命令をするときに使う言葉です。
SQL文は「データベースに対する、SQLを使った命令文」です。
「クエリ」とも呼ばれます。
「SQL」と「SQL文」は違います。
あまり神経質になる必要はありませんが、区別できるように しておいてください。
SQLは「言語」です。
SQL文は「命令(文)」です。
例えば、そうですね。
ピヨ子さんがピヨ太君に日本語で「パン買ってこい!」と命令したとしましょう。
ピヨ子さんが人間、ピヨ太君がデータベースだとすれば「日本語」が「SQL」です。
「パン買ってこい!な命令」が「SQL文」になります。
バインドは「あっち と こっち を紐付ける、関連付ける、割り当てること」です。
変数は「値を入れておく箱」です。
以上を踏まえて、本題に入ります。
データベース(DB)さんと会話をするときは
人:「年齢が10歳の人は何人いる?」
DB:「3人です」
人:「年齢が20歳の人は何人いる?」
DB:「5人です」
人:「年齢が30歳の人は何人いる?」
DB:「10人です」
人:「年齢が40歳の人は何人いる?」
DB:「2人です」
人:「年齢が50歳の人は何人いる?」
DB:「1人です」
人:「年齢が60歳の人は何人いる?」
DB:「12人です」
のように、似通った内容の問い合わせが続くときがあります。
お問い合わせ内容は、年齢の数字部分以外は同じですよね?
同じ部分を何回も言うのは、かったるいです。
短縮しましょう。
具体的には、以下のような会話にします。
人:「これから『年齢がX歳の人は何人いる?』って聞いていくから。『X』の部分は都度指示するから読み替えてね」
DB:「分かりました」
人:「X=10」(年齢が10歳の人は何人いる?)
DB:「3人です」
人:「X=20」(年齢が20歳の人は何人いる?)
DB:「5人です」
人:「X=30」(年齢が30歳の人は何人いる?)
DB:「10人です」
人:「X=40」(年齢が40歳の人は何人いる?)
DB:「2人です」
人:「X=50」(年齢が50歳の人は何人いる?)
DB:「1人です」
人:「X=60」(年齢が60歳の人は何人いる?)
DB:「12人です」
いかがでしょう?
人間様の話す量が、だいぶ減りましたよね。
この話における「年齢がX歳の人は何人いる?」がベースになるSQL文です。
「X」の部分がバインド変数に相当します。
SQL文の中に変数を埋め込むことでベースのSQL文を使い回し、楽をしようとするテクニックがあります。
このテクニックで使われる変数がバインド変数です。
バインド変数を使うメリットは、会話の量が減ることによる効率化です。
データベースさんの気持ちになって考えてみてください。
毎度毎度「年齢が○歳の人は何人いる?」と聞かれたのでは、一言一句、注意して聞かなくてはなりません。
お問い合わせ内容が、もしかしたら「年齢が○歳の『女の』人は何人いる?」かもしれませんし「年齢が○歳の人は何人いるか知らんけど、今日、暇?」かもしれませんからね。
最後まで油断はできないのです。
それに対し、あらかじめ「『年齢がX歳の人は何人いる?』って聞いていくよ」と言われていたら、どうでしょう。
あとは「X歳」の「X」がいくつかさえ分かれば、お問い合わせに答えられますよね。
心の準備ができます。
会話の量が減っても、むしろ減るからこそ、テンポよく答えていけるはずです。
これがバインド変数を使うメリットです。
同じような内容のお問い合わせが続くときにデータベースさんが楽できます。
一方のバインド変数を使うデメリットですが、ここでは触れません。
突っ込んで説明すると頭が痛くなっちゃうからです。
とりあえず「条件次第では逆に遅くなる」とだけ覚えておいてください。
何でもかんでもバインド変数を使えば良くなるわけではないのです。
一言でまとめるよ
まぁ「バインド変数」って単語が出てきたら「SQL文
(データベースに対する命令文)に埋め込まれた変数
(値を入れておく箱)なんだな~」と お考えください。
おまけ
■訳してみるよ
「bind(バインド)」の意味は「縛る」とか「くくる」とか「結びつける」とか「巻き付ける」とか「束ねる」とか「束縛する」とか「拘束する」とかです。
「変数」は日本語ですね。
何となく くっつけると
束ねる変数
となります。
■検索してみる?






