これは、元のSQL標準に基づいており、間接参照のいくつかのレイヤーを介して、最終的に識別子の開始に到達します。 ブロック。これはいくつかのものの1つですが、主に「単純なラテン文字」です。使用できるものは他にもありますが、すべての詳細を確認したい場合は、http://en.wikipedia.org/wiki/SQL-92にアクセスし、実際の標準へのリンクをたどってください(85ページ)
数値以外の識別子の導入機能があると、実行のためにSQLをデコードするパーサーを作成するのが簡単かつ迅速になりますが、引用符で囲まれた形式でも問題ありません。
編集:パーサーにとってなぜ簡単なのですか?
パーサーの問題は、SELECT
にあります。 -FROM
よりもlist句 句。 select-listは、テーブルから選択された式のリストであり、これは非常に柔軟性があり、単純な列名と数値式を使用できます。次のことを考慮してください:
SELECT 2e2 + 3.4 FROM ...
テーブル名と列名が数字で始まる場合は、2e2
です。 列名または有効な番号(e
形式は通常、数値リテラルで許可されます)、3.4
テーブル「3
"と列"4
"またはそれは数値3.4
?
識別子というルールを持つ 単純なラテン文字(およびその他の特定のもの)で始まるということは、2e2
を認識するパーサーを意味します 3.4
と同じように、これが数値式になることをすばやく識別できます。
数字の先頭文字を許可するスキームを考案することは可能ですが、これはさらにあいまいなルール(意見)につながる可能性があるため、このルールは優れたソリューションです。最初に数字を許可した場合は、常に引用符を付ける必要がありますが、これはおそらく「クリーン」ではありません。
免責事項 、上記を少し簡略化し、コアレーション名を無視して短くしました。私はpostgresに完全には精通していませんが、OracleRDBのドキュメントとSQL仕様に対して上記の回答を再確認しました