2

これは機能します:

SELECT * FROM users ORDER BY id LIMIT 5

これはそうではありません - 構文エラーをスローします:

SELECT * FROM users LIMIT 5 ORDER BY id

SQL は句の順序について厳しすぎるようです。

そこまで厳しくするのに何か理由があるのですか?

PS SELECT と FROM はデータのソースを指定します。私は、これがクエリ内で特定の位置にある必要があることに同意します。ただし、他の句はそのデータで「遊ぶ」だけです。それらはデータのソースと関係がありますが、相互には関係がないため、特定の方法で順序付けする必要があるという事実は、私にはあまり直感的ではないようです.

4

6 に答える 6

6

Hugh Darwen は、1960 年代に言語がこのように流行していたことを理論化しています。

あなたは SELECT-FROM-WHERE を当然のことと考えていますか?それとも、私のように、System R チームが任意の複雑さの式を書く通常の方法に拍車をかけ、まったく特異な何かを支持するべきだったことにかなり興味を持っていますか? 、むしろ独裁的…?

実際には、1960 年代に、レポート生成、特にアドホック レポート生成を目的として、さまざまなスクリプト言語 (最近ではそのように呼ぶ傾向があります) が登場しました。1969 年から 1977 年まで IBM で働いていたターミナル ビジネス システム (TBS) と呼ばれるリレーショナル DBMS には、そのような言語がありました。私たちの言語では、ユーザーが一連の手順で必要なレポートを指定する必要があり、規定の順序で指定する必要がありました...

SQL を最初に見たとき、幾分類似しているが、はるかに洗練されたレポート ジェネレーターが、後に米国の IBM によって開発されました。 、私の即座の反応は、「ああ、GISの息子ですか?それはやめてください!」でした。私はこれについてかなり間違っていたかもしれません。私が認識した類似性は幻想だったかもしれませんし、たとえそうでなかったとしても、System R チームの誰かが GIS に精通していたという確固たる証拠はありません。固定された行動順序の一般的なスタイルが当時の順序であったという事実は残っています. 私は、SQL の SELECT-FROM-WHERE がこのやり方から生まれたと仮定しています。

失意の時代からHAVING

于 2011-03-23T14:42:52.530 に答える
2

英語やその他の言語で書くときは、特定の文法も使用します。英語では動詞を文末に置くことはありませんが、ドイツ語では使用されます。

SQL では、尊重しなければならない構文があるのと同じです。
あなたもそのようなクエリを書きませんFROM user SELECT * ORDER BY xy WHERE a=b

于 2011-03-23T14:05:40.733 に答える
0

LIMIT はさておき (たとえば、SQL Server では TOP です)、構文の順序を反映する SQL ステートメントの論理処理 ORDER があります。

  1. から
  2. どこ
  3. グループ化
  4. キューブ/ロールアップ
  5. 持っている
  6. 選択する
  7. 明確
  8. トップ/リミット
  9. オーダーバイ

LIMIT を TOP に置き換えると、それは明らかです

于 2011-03-23T14:19:34.807 に答える
0

パーサーは速度のために構築されています。一貫性のない構文を許可すると、パーサーは何をする必要があるかを理解するのにより多くの時間がかかります。これは、パフォーマンスに大きな影響を与える可能性があります。

また、人間が読みやすくなります。

于 2011-03-23T14:05:41.930 に答える
0

これは MySQL の構文であるため: http://dev.mysql.com/doc/refman/5.0/en/select.html

于 2011-03-23T14:03:32.077 に答える
-1

まず第一に、私はあなたに言わせてください

「すべての言語には一連の規則と規制があります」

このルールに従う必要があります。コマンドのいずれかの種類のルール(構文など)に違反すると、エラーが発生します。


この句を使用してORDER BY、ルールの左側のセルが評価される順序を指定します。exprは、ディメンションまたはメジャー列に解決される必要があります。句が指定されていない場合ORDER BY、順序はデフォルトでDIMENSION BY句で指定された列の順序になります。

詳細については、こちらをご覧ください:

于 2011-03-23T14:08:20.453 に答える