Mari kita pertimbangkan standar SQL, bagian 7.9 <query specification>
seperti yang ditentukan di sini:
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.
Jadi, dengan kata lain, ya, standar SQL menetapkan bahwa kolom diproyeksikan sesuai dengan posisi ordinalnya dalam T
. Perhatikan, bahwa segala sesuatunya menjadi sedikit rumit, ketika <table expression>
. Anda terdiri dari beberapa tabel yang melibatkan JOIN .. USING
atau NATURAL JOIN
klausa. Namun, saat memilih dari tabel sederhana, Anda mungkin baik-baik saja dengan asumsi bahwa urutannya seperti yang diharapkan.
Untuk kelengkapan, arti dari ordinal position within T
untuk tabel dijelaskan lebih lanjut di 11.4 <column definition>
:
General Rules
5) [...] The ordinal position included
in the column descriptor is equal to the degree of T. [...]
Dan kemudian di 11.11 <add column definition>
(untuk ALTER TABLE
pernyataan)
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>".
Ada beberapa pernyataan dan klausa SQL lain yang bergantung pada spesifikasi formal ordinal positions
dalam <table expressions>
. Beberapa contoh:
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, khususnya, cukup sesuai standar, jadi jika Anda benar-benar ingin SELECT *
, silakan!