SQL標準のセクション7.9 <query specification>
について考えてみましょう。 ここで指定されているように:
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
<query specification> ::=
SELECT [ <set quantifier> ] <select list> <table expression>
[...]
<select list> ::=
<asterisk>
| <select sublist> [ { <comma> <select sublist> }... ]
[...]
Syntax Rules
1) Let T be the result of the <table expression>.
3) Case:
a) [...]
b) Otherwise, the <select list> "*" is equivalent to a <value
expression> sequence in which each <value expression> is a
<column reference> that references a column of T and each
column of T is referenced exactly once. The columns are ref-
erenced in the ascending sequence of their ordinal position
within T.
つまり、はい、SQL標準では、列はT
内の順序位置に従って投影されるように指定されています。 。 <table expression>
の場合、状況が少し複雑になることに注意してください。 JOIN .. USING
を含むいくつかのテーブルで構成されています またはNATURAL JOIN
条項。ただし、単純なテーブルから選択する場合は、順序が期待どおりであると想定して問題ないでしょう。
完全を期すために、ordinal position within T
の意味 テーブルの場合は、11.4 <column definition>
でさらに詳しく説明されています。 :
General Rules
5) [...] The ordinal position included
in the column descriptor is equal to the degree of T. [...]
次に、11.11 <add column definition>
で (ALTER TABLE
の場合 ステートメント)
General Rules
4) [...] In particular, the degree of T
is increased by 1 and the ordinal position of that column is
equal to the new degree of T as specified in the General Rules
of Subclause 11.4, "<column definition>".
ordinal positions
の正式な仕様に依存するSQLステートメントと句は他にもたくさんあります。 <table expressions>
内 。いくつかの例:
13.8 <insert statement>
(when omitting the `<insert column list>`)
20.2 <direct select statement: multiple rows>
(when `<sort specification>` contains an `<unsigned integer>`)
特にPostgresは標準に完全に準拠しているため、本当にSELECT *
が必要な場合は 、どうぞ!