-4

emp テーブルに 14 行が含まれている場合、実行するとSELECT 5 FROM EMPエラーではなく次の出力が表示されるのはなぜですか

5
-----
5
5
5
5
5
5
5
5
5
5
5
5
5
5

なぜ列エイリアスとして 5 を作成し、テーブルの行数までの数値 5 として結果の繰り返し行を提供します。

反面、うまくいかない

SQL> select something from emp;
select something from emp
       *
ERROR at line 1:
ORA-00904: "SOMETHING": invalid identifier
4

3 に答える 3

2

の静的な値を選択しているため、エラーは発生しません5。これはテーブルの各行で繰り返されます。これは、次を使用することと同じです。

select id, 5
from emp

すべての ID を返しますが5、すべての行の値を持つ列も返します。これは有効な SQL であるため、エラーは発生しません。

これは列として定数値を選択するだけです。数値であるためエラーは発生しません。文字列で同じことをしたい場合は、値を一重引用符で囲みます。

select id, 'something'
from emp

テーブルから選択しているため、テーブル内の各行の定数値が返されます。

デュアルから選択するようにクエリを変更した場合、返されるのは 1 行だけですが、テーブルには 14 行あるため、各行で値が繰り返されます。

于 2013-04-11T11:58:06.957 に答える
2

select1 つ以上の式 (単純な式の場合もあります) 。

単純な式の構文図は、数値または別の固定値が有効であることを示しています。したがって5、テーブルの各行に対して定数値 を選択するだけです。

おそらく無意味ですが、完全に有効です。(私は通常8、タイプしすぎてタイプミスして、を選択します*...)。"5"何かを呼び出す必要があるため、デフォルトでエイリアスされています。そうしないと、これは失敗します。

 select "5" from (select 5 from dual);

2番目の例では、という列はありませんsomethingが、定数文字列を取得したい場合は機能します:

 select 'something' from dual;

引用符somethingがない場合、列の有効な名前になるため、Oracle はそれをそのように解釈しようとしますが、そのような列がないため失敗します。5は有効な列名ではありません (オブジェクトの命名規則を参照してください。混乱がなく、列名ではなく固定値として解釈されます。

于 2013-04-11T12:06:23.790 に答える
0

14 行 (empテーブル内の行数) を選択します。選択する値は、5ごとに一定です。したがって、それぞれが を含む 14 行を取得します5

列には5、クエリに基づいて暗黙的に名前が付けられます。


select something from emp;

somethingは定数でも列でもありません。表情すらない。あなたが言うなら

select 'something' from emp;

次に、それぞれが のテキスト (varchar) 値を含む 14 行を取得しますsomething

于 2013-04-11T11:57:54.990 に答える