質問

正式に構造化された情報セットでは、最初から最後に向かって読み始めるか、場合によっては最後から最初に向かって読み始めます (住所など)。しかし、SQL、特に SELECT クエリでは、正しく理解するために、つまり、中央の FROM 句から開始する必要があります。これにより、特にネストされた SELECT クエリが含まれる場合、長いクエリが非常に読みにくくなる可能性があります。

通常、プログラミングでは、何かが意味をなさないように見える場合、その背後には歴史的な理由があります。FROM ではなく SELECT で始めるのは意味がありません。そのようになった理由を知っている人はいますか?

役に立ちましたか?

解決

SQL の Wikipedia エントリ いくつかの歴史を簡単に説明します。

1970 年代、IBM サンノゼ研究所のグループは、エドガー F.Codd 氏は、影響力のある論文「大規模共有データ バンクのためのデータのリレーショナル モデル」でこう述べています。ドナルド D.チェンバリンとレイモンド F.IBM のボイスはその後、 構造化英語クエリ言語 (SEQUEL) System R に保存されているデータを操作および管理するため。「SEQUEL」は英国に本拠を置く航空機会社ホーカー・シドレーの商標であったため、頭字語の SEQUEL は後に SQL に変更されました。

元の名前が明示的に言及されている 英語, 、構文を説明します。

もう少し深く掘り下げてみると、 フローマチック プログラミング言語。

FLOW-MATIC、当初は B-0 (ビジネス言語バージョン 0) として知られていました。 おそらく最初の英語に似たデータ処理言語です. 。これはグレース ホッパーによって発明および仕様化され、UNIVAC I 用に 1955 年にレミントン ランドで商用変種の開発が始まりました。1958 年までに、コンパイラとそのドキュメントは一般に入手可能になり、商業的に使用されるようになりました。

FLOW-MATIC がインスピレーションの源となりました。 ビジネス向けの共通言語, 、今でも現役で使用されている最も古いプログラミング言語の 1 つです。その精神を引き継ぎながら、 続編 英語のような構文で設計されています (1950 年代や 1960 年代と比較すると、1970 年代は現代的です)。

観点から見ると、「最新の」プログラミング システムは依然として、背後にある昔ながらの考え方を使用してデータベースにアクセスしています。

MULTIPLY PRICE BY QUANTITY GIVING COST.

他のヒント

私は、SQL文が構造化される方法は、限り、英語の文章が構成されているとして論理理にかなっていると思います。基本的には

I WANT THIS
FROM HERE
WHERE WHAT I WANT MEETS THESE CRITERIA

私が言って、それは少なくとも英語では、あまり意味があるとは思わない。

FROM HERE
I WANT THIS
WHERE WHAT I WANT MEETS THESE CRITERIA  

私は同意しなければなりません。 SQL文法がインサイドアウトではありません。

の非常に最初の一見からのあなたは(DDL、故意に省略し、例えば、SQLのすべての残りの部分)クエリは、INSERT、UPDATEを選択するか、データを削除するかどうかを伝えることができます。

<時間>

戻るSELECT文の混乱へ:SQLの目的は、のの宣言型になることです。これはあなたが何をしたいとあなたがそれを望んでいないどのように表現することを意味します。だから、何をしたいの最初のの状態にすべての理にかなって(あなたがのだ属性のリストのINGの選択)との後、はいくつかの追加とDBMSを提供それはからルックアップしなければならないところます。

上の情報

最後にWHERE句を置くことは、あまりにも大きな意味があります:下部の狭い、広い上部に、漏斗を想像してみてください。文の終わりに向かってWHERE句を追加することで、あなたは結果データの量をダウン窒息されています。あなたのクエリに制限を適用すると、下部に比べて他の任意の場所には、自分の頭を好転させるために、開発者が必要になります。

<時間>

最後にORDER BY句:データが漏斗を経た後、それを並べ替える

本当にFROM句に属している(基準のJOIN)JOINSます。

GROUPING:それは別の漏斗になる前に、基本的に漏斗を介してデータを実行している。

SQLのsytaxは甘いです。それについて裏返しものは何もありません。 SQLは、そうであっても数十年後にとても人気がある理由は多分それです。それは把握すると外の意味を理解するために、むしろ簡単です。 (私の周り私の頭を取得するために私にはかなり時間がかかりました7ページ(A4サイズ)SQL文を一度直面しているが。)

のような英語のように設計されています。私はそれが主な理由だと思います。

注意点として、私は、LINQの初期プレビューが直接(select ... from ...)をモデルにした覚えています。これは、(スコープが下向きになるように)のような多くのプログラミング言語であることを後でプレビューで変更されました。アンダース・ヘルスバーグは、具体的には、彼らがこの決定をした理由として(のIntelliSenseが難しくなり、C#のスコープ規則と一致していません)SQLについては、この奇妙な事実を述べています。

とにかく、良いか悪いか、それはそれが何であるかだと何かを変更するには遅すぎます。

SQLの句の順序は絶対に論理的です。 SQLは、あなたが欲しいものを宣言宣言型言語であり、システムはあなたのためにそれを得るために最善の方法を割り出していることを覚えておいてください。最初の句は、あなたが結果テーブルにする列をリストSELECT句です。これは、クエリの主な目的です。あなたは結果があなたのようなデータから来るべき次の状態を見てみたいものを述べました。句は、返されるデータの量を制限する場合。そこには、どこから来るのあなたが知っている限り、あなたのデータを制限する方法を考えるにはポイントはありませんので、句から後に行きます。 group by句は、SELECT句の集計演算子で動作し、句からしかし、フィルタリングされたデータの集約を考える方が良いです後にどこにでも行くことができるので、where句の後に来ます。 having句は、GROUP BY句の後に来る必要があります。 ORDER BY句は、データが提示され、選択した後、どこにでも行くことができるかについてです。

これは、すべての文は動詞で始まる持つのSQLの構文の残りの部分と一致します(CREATEDROPUPDATE、など。)。

最初の列のリストを持つことの主な欠点は、オートコンプリート(Hejlsbergが言及したように)のために不便だということですが、これは構文が1970年代に設計された問題ではありませんでした。

私たちはSELECT FROM SomeTable: ColumnA, ColumnBのような構文を使用して、両方の世界の最高だっただろうが、それは今それを変更するには遅すぎるのです。

とにかく、SQLのSELECT文の順序は一意ではありません。それはまさに、Pythonのリスト内包表記のものと一致します:

[(rec.a, rec.b) for rec in data where rec.a > 0]

さておき、言語の

歴史(それが魅力的ですが)私はあなたが欠けているものは何終わりほど、SQLは何をすべきかをシステムに伝える程度ではないことだと思いますが欲しい(とそれがどのように割り出した結果それを行う)

「そのラックにあそこ行くhatbandsで帽子を拾う、その後、赤、最初に、その後、緑、青の帽子、そして私にそれらをもたらす」と言っては非常に多くのシステムを言っているの方法のへあなたがやりたいです。それはだ、のプログラマだと思うの我々は労働者が非常に愚かであると細かく詳細な手順を必要と推測。

SQLは最初の最終結果で開始している、あなたが望むデータ、列の順序などは...それは非常に多くのレポートを作成している人の視点です。 「私はFIRSTNAMEをしたい、姓、そして年齢は、それから.....」それは要求を行って、すべての目的の後です。だから、それをあなたが望む結果のフォーマットを開始します。そして、それはなど、それを提示するために、どのような基準を探すためにあなたはそれがデータを見つけることを期待どこに入るます。

あなたは労働者が何をしたいのか分を詳細に指定する代わりになるように

、SQLは、システムがそれを行う方法を知っている、とあなたは何をしたいの詳細センターを前提とします。

だからではなくpedantically、これを取得、ここに行くそこにそれを持って来るためにあなたの労働者に伝える...それはより多くの言うようなものだ「hatbandsを持っており、色によってそれらをソートしてくださいラック12、から、私は帽子が欲しいです。」

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top