Нека разгледаме SQL стандарта, раздел 7.9 <спецификация на заявката>код> както е посочено тук:
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
<предварителен код><спецификация на заявка> ::=SELECT [ <задаване на количествен идентификатор> ] <списък за избор> <израз на таблица>[...]<списък за избор> ::=<звездичка> | [ { }... ][...]Правила на синтаксиса1) Нека T е резултатът от <израза на таблицата>.3) Случай:a) [...] b ) В противен случай "*" е еквивалентен на последователност <израз на стойност>, в която всеки <израз на стойност> е <препратка към колона>, която препраща към колона от T и всяка колона от T се препраща точно веднъж. Колоните се посочват във възходящата последователност на тяхната порядкова позиция в T.
Така че, с други думи, да, стандартът на SQL уточнява, че колоните трябва да се проектират според тяхната порядкова позиция в T
. Имайте предвид, че нещата стават малко трудни, когато вашият се състои от няколко таблици, включващи JOIN .. USING
или Естествено присъединяване
клаузи. Въпреки това, когато избирате от обикновена таблица, вероятно сте добре, ако приемете, че поръчката е според очакванията.
За пълнота, значението на редна позиция в T
за таблици е обяснено по-долу в 11.4 <дефиниция на колона>
:
Общи правила 5) [...] Поредната позиция, включена в дескриптора на колоната, е равна на степента на T. [...]
И след това в 11.11 <добавяне на дефиниция на колона>
(за ALTER TABLE
изявления)
Общи правила 4) [...] По-специално, степента на T се увеличава с 1 и порядковата позиция на тази колона е равна на новата степен на T, както е посочено в Общите правила на подточка 11.4 , "<дефиниция на колона>".
Има доста други SQL изрази и клаузи, които зависят от формалната спецификация на редовни позиции
в рамките на <таблични изрази>
. Някои примери:
13.8 (при пропускане на ``)20.2 <изявление за директен избор:множество реда> (когато `` съдържа ``)код>
По-специално Postgres е доста съвместим със стандартите, така че ако наистина искате да SELECT *
, давай!