0

私は SQL をよりよく理解しようとしているので、これはやや学術的な質問です。

これが機能する理由:

SELECT id FROM nerds AS nerdnumber

しかし、これはありませんか?

SELECT nerds.id AS nerdnumber

私にとって、SELECT が既にテーブルを識別している場合、FROM は必要ありません。

4

4 に答える 4

3

select 句にテーブル名を含めるのは、結合を行うときのあいまいさを解消するためです。From 句は、ステートメントがアクセスするテーブルを指定します。

于 2013-03-14T00:53:42.050 に答える
3

舞台裏で実際に起こっていることは、エンジンがクエリを取得して分解し、データを取得するために実行する実際の命令を決定することです。

使用される構文 (SELECT blah FROM ...) は開発され、(ほとんど) 標準化されており、それが使用されています。FROM が必要な理由は...だから :)

あなたが提案した方法で動作するように、クエリパーサーを変更/作成できますか? 理由はわかりませんが、パーサーがさらに複雑になります。SELECT、FROM、UPDATE、SET、およびその他すべてのキーワードは、パーサーがデータをプルするためのアンカーを見つけられるようにするために重要です。

これは... 最も簡単な理由ですが、SQL 標準の開発について読んだり、クエリの最適化と解析について読んだり、本当に面白くてクレイジーなものを読んだりすることができます :)

于 2013-03-14T00:59:12.097 に答える
2

SELECT id FROM nerds AS nerdnumberSELECT nerds.id AS nerdnumber同等のクエリではありません。1つ目はテーブルnerdsをnerdsnumberとしてエイリアスし、2つ目はnerds.idをnerdersnumberとしてエイリアスしようとします。しかし、私はあなたの質問を見ます。

あなたが求めていることは可能ですか?はい。それを行う必要がありますか?おそらくそうではありません。FROM句が使用される理由は、データの送信元を定義するためです。select句のフィールドは、定義されたデータセットから何を使用するかを決定するために使用されます。これは非常に読みやすく理解しやすい言語です(したがって、元のSEQL =構造化された英語のクエリ言語)。必要な機能を追加すると、クエリ値がどこから来ているのかを突然理解するのが非常に難しくなります。そのテーブルを定義している場合はどうなりますか?そのテーブル名をクエリのエイリアスとして再定義するとどうなりますか?

結局、それは曖昧さを加えるだけです。

于 2013-03-14T01:00:30.340 に答える
0

適切に記述されていれば、どちらも機能します。

あなたの例を正しく理解していれば、最初のケースではテーブルのエイリアスを確立し、2番目のケースではフィールドのエイリアスを確立します。

だから何の問題もないSELECT nerds.id AS nerdfield FROM nerdstable AS nerds;

于 2013-03-14T00:55:40.947 に答える