ほとんどの言語は、「関係ベース」または「高レベル」の2つに分類されることを学んでいます。
これらの概念は直交しています。「関係ベース」とは、言語のセマンティクスが関係の概念、つまり2つのセット間の多対多の関連付けに基づいていることを意味します(関係はSQLテーブルの背後にある数学的基盤です)。「高レベル」とは、基礎となる技術的詳細(メモリの場所、CPUレジスタ、ディスクアクセス、ビット単位の操作など)の多くを隠す多くの抽象化が言語に含まれていることを意味します。SQLは、リレーショナルデータとその操作を記述することを主な目的としているため、確かにリレーションベースです。SQLもかなり高いレベルです。ディスク上のバイトに直接アクセスする手段を提供しません。また、データを保存する方法についての詳細を伝えません(少なくとも標準のSQLはそうしません。
実際、プログラミング(およびデータ)言語を分類できる軸はさらに多くあります。特に興味深いのは、宣言型と命令型です。宣言型言語は、何かとは何かを説明します。命令型言語は、何かをする方法を説明します。SQLのDDL部分は、(」無条件探しのキーワードにもかかわらず、ほとんどが宣言型であるCREATE TABLE
」、 『DROP DATABASE
』、など)、さらにはデータ操作部分は(SELECT
、UPDATE
、INSERT
、DELETE
)まだかなり宣言型です。SQLの非常に興味深い特性は、チューリング完全ではないことです。プレーンな標準ANSI SQLで無制限のループを記述することはできません。
関数型プログラミングは、いくつかのコアアイデアを中心にしています。
- 関数は一流の市民です(つまり、値として、他の関数への入力として、および他の関数からの出力として使用できます)
- 高階関数(関数を操作する関数、または関数を返す関数)
- 純粋(純粋な関数は副作用のないものです。純粋な関数はI / Oを実行できず、グローバルな状態を読み取ったり変更したりできません。また、非const参照引数を取ることはできません。同じ入力が与えられると常に同じ出力を生成します)
確かに、SQLは、物事をモデル化するためのメインツールとしての機能を中心に展開していませんが、純度の考え方をいくらか取り入れています-同じデータベースで実行される同じクエリは、毎回同じ結果をもたらします(順序付けを除く)SQLを「関数型」言語と呼ぶことは、IMOを介した少しのストレッチです。