sql >> Database teknologi >  >> RDS >> PostgreSQL

kolonnerækkefølge i SELECT *-sætning - garanteret?

Lad os overveje SQL-standarden, afsnit 7.9 som specificeret her:

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

::=VÆLG [ ] [...] ::= | [ { }... ][...]Syntaksregler1) Lad T være resultatet af .3) Tilfælde:a) [...] b ) Ellers svarer "*" til en -sekvens, hvor hvert er en , der refererer til en kolonne med T, og hver kolonne af T refereres nøjagtigt én gang. Kolonnerne henvises til i den stigende rækkefølge af deres ordinære position inden for T.

Så med andre ord, ja, SQL-standarden specificerer, at kolonner skal projiceres i henhold til deres ordinære position inden for T . Bemærk, at tingene bliver en smule vanskelige, når dit består af flere tabeller, der involverer JOIN .. USING eller NATURLIG JOIN klausuler. Men når du vælger fra en simpel tabel, har du det sikkert fint, hvis du antager, at ordren er som forventet.

For fuldstændighedens skyld, betydningen af ​​en ordensposition inden for T for tabeller er forklaret længere nede i 11.4 :

Generelle regler 5) [...] Ordinalpositionen inkluderet i kolonnedeskriptoren er lig med graden af ​​T. [...] 

Og så i 11.11 (for ALTER TABLE udsagn)

Generelle regler 4) [...] Især øges graden af ​​T med 1, og den ordinære position af den kolonne er lig med den nye grad af T som specificeret i de generelle regler i afsnit 11.4 , "". 

Der er en hel del andre SQL-sætninger og klausuler, der afhænger af den formelle specifikation af ordinære positioner i . Nogle eksempler:

13.8 (når du udelader ``)20.2 (når `` indeholder et ``)

Postgres, i særdeleshed, er ret standard-kompatibel, så hvis du virkelig vil SELECT * , gå videre!




  1. Tilføj et procenttegn til et tal i MariaDB

  2. Brug af en IF-erklæring i en MySQL SELECT-forespørgsel

  3. Lær MySQL / MariaDB for begyndere – del 1

  4. Hurtig opdeling af partitionering