Hãy xem xét tiêu chuẩn SQL, phần 7.9 <query specification>
như được chỉ định ở đây:
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.
Vì vậy, nói cách khác, có, tiêu chuẩn SQL chỉ định rằng các cột sẽ được chiếu theo vị trí thứ tự của chúng trong T
. Lưu ý rằng mọi thứ trở nên phức tạp một chút khi <table expression>
của bạn bao gồm một số bảng liên quan đến JOIN .. USING
hoặc NATURAL JOIN
điều khoản. Tuy nhiên, khi chọn từ một bảng đơn giản, bạn có thể ổn khi cho rằng thứ tự như mong đợi.
Để có sự hoàn chỉnh, ý nghĩa của ordinal position within T
cho các bảng được giải thích kỹ hơn trong 11.4 <column definition>
:
General Rules
5) [...] The ordinal position included
in the column descriptor is equal to the degree of T. [...]
Và sau đó trong 11.11 <add column definition>
(cho ALTER TABLE
tuyên bố)
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>".
Có khá nhiều câu lệnh và mệnh đề SQL khác phụ thuộc vào đặc điểm kỹ thuật chính thức của ordinal positions
trong <table expressions>
. Một số ví dụ:
13.8 <insert statement>
(when omitting the `<insert column list>`)
20.2 <direct select statement: multiple rows>
(when `<sort specification>` contains an `<unsigned integer>`)
Đặc biệt, Postgres khá tuân thủ các tiêu chuẩn, vì vậy nếu bạn thực sự muốn SELECT *
, hãy tiếp tục!