PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

thứ tự cột trong câu lệnh SELECT * - được đảm bảo?

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!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận tên của chủ sở hữu DB trong PostgreSql

  2. Cách cập nhật hàng loạt ID chuỗi postgreSQL cho tất cả các bảng

  3. Tôi làm cách nào để ghi nhật ký psycopg2 về thời gian thực hiện truy vấn?

  4. Lợi ích của PostgreSQL

  5. Sự khác biệt giữa pg_table_size, pg_relation_size &pg_total_relation_size là gì? (PostgreSQL)