サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
-
from: 生成門さん
2012年04月14日 17時01分17秒
icon
SQL言語における述語(関数)
SQL言語における述語(関数)
<四次元能版:新世紀エヴァンゲリオン:モナドの作法>
SQLの述語論理は3値論理(真・偽・不明)でいきます。
SQLの述語論理とは命題の真偽を入力して、1(真)か0(偽)を出力する関数:□であると言い換えることにします。関数:□とは自動販売機のようなもので、お金を入れたらビールが出てくるようなブラックボックスです。ブラックボックスとは外から中が見えないものですが、中から見ると外は見えないでしょう。
従って、これはまさにモナドです。
関数もモナドもライプニッツによって導入された概念ですから、関数=モナド=述語=ブラックボックスというのは無理のない考えだと思いますが、オートポエイーシスとか、インドラとの関係などとも吟味しなければなりません。
自動販売機の場合、入力されるのはお金であり、述語論理でいうと命題に相当します。命題が正しいければ、つまり、150円なら缶ビールが出てきますが、不足しているとエラー(偽)ですから、ビールは出て来ません。
命題(お金を入れる)→□→真又は偽
150円→□→真(ビールが出てくる)
150円以下→□→偽(ビールが出てこない)
関数=自動販売機:□では、適切な表現とは言えないので、数学の概念(関数)で説明します。
関数とは、二つの変数 x と y があり、入力 x に対して、出力 y の値を決定するとき、変数 y をx の関数と言います。
これは、x→□→yと表現できますから、
命題→□→真又は偽と同じになります。
関数:□はfunction ですので、頭文字f をとって、x の関数 y を f(x) と書いて、x = a を代入したときに決まる関数の値を f(a) と表します。
関数というと難しいですが、エクセルと使ったことがある人なら、日付や平均を計算したり、総和を取ったりするときに関数を使ったことがあるでしょう。
述語論理の関数も同じで、f(x)の変数に
相当するものを引数と呼び、引数に値に
代入することはその関数を呼び出し(あ
るいは述語)を具体化して、真か偽に
なる命題とよばれる式を生み出すこと
になるのです。
これで述語が関数であることの意味が理解できたと思うのですが、どのような関数があるのでしょうか?
エクセルでは計算が主なのでday関数、sum関数という「計算する述語」が殆どですが、SQL言語は「問い合わせる」ことが目的なので、「問い合わせる述語」が多く登場します。
代表的な述語をリストアップしてみましょう。
比較述語(=, <>, > <)
IN述語
EXISTS述語
限定述語(ALL述語, ANY述語)
LIKE述語
BETWEEN述語
IS NULL述語
これらは皆、述語と呼ばれるわけですがどうも、「計算する述語」とは違ったイメージですね。
どんな内容の述語なのでしょうか?
確かに、「問い合わせる」、「計算する」と言った述語は、「主語/述語」の動詞ですから、分かりやすかったのですが、このリストをみるとEXISTSとかALLとかですので、日常言語とは違うようです。
結論から言いますと、SQL における述語とは述語論理における述語のことであり、それは、すなわち関数のことです。
関数とはfunctionつまり、機能であり、動詞ですから、day関数、sum関数と本質的には変わりがないのです。ただ、この名前からイメージが湧かないだけなのです。
そこで、もっと抽象化して言うと、関数は写像であり、マップする機能です。つまり、二つの集合(あつまり)があるとき、1対1で結びつけることです。
それでもイメージが湧かないのは何かがありそうです。実は、殆ど使わないと思うのですが、エクセルにはand,or,notという論理関数がありますが、これと同じカテゴリに属するものが「問い合わせる述語」の論理関数なのです。
これらの述語は、関数は関数でも、入力に対し、命題の真理値(真、偽、不明)を出力する特殊な関数、つまり、論理関数だということです。
先にリストアップした述語をよく見てください。どの述語も、戻り値は真、偽、不明の3種類以外にありえないということに気付くはずです。IS NULL だけは真と偽 のみを戻します。
ところが、count関数の戻り値は、0以上の整数なのです。つまり、count関数は普通の関数なのですが、述語論理の関数は、戻り値に真理値を出力するのです。ここが論理関数と普通の関数との違いです。
SQL言語における述語とは関数であり、真理値をとることを再度確認しておきます。
つまり、それは、ある適当な引数が与えられれば、真か偽を返す関数だということです。
例えば>は比較する述語ですが、>(x,y)という式で表現します。普通の書き方をすればx>y です。もしxの値がyの値より大きければ真を、そうでなければ偽を返すという機能をもっているのが>という記号で表現された比較という述語の関数なのです。
続く-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
-
コメント: 全0件