<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 7.3\. 選擇列表 如前面的小節說明的那樣,在`SELECT`命令中的表表達式通過組合表、 視圖、刪除行、分組等構造了一個中介性的虛擬表。這個表最后傳遞給_選擇列表_處理。 選擇列表判斷最終實際輸出虛擬表的哪些_字段_。 ## 7.3.1\. 選擇列表項 最簡單的選擇列表是`*`,它輸出表表達式生成的所有字段。 否則,一個選擇列表是一個逗號分隔的值表達式的列表(和在[Section 4.2](#calibre_link-487) 里定義的一樣)。比如,它可能是一個字段名列表: ``` SELECT a, b, c FROM ... ``` 字段名`a`, `b`,`c`要么是在`FROM` 子句里引用的表中字段的實際名字,要么是[Section 7.2.1.2](#calibre_link-488) 里解釋的別名。選擇列表中的名字空間和`WHERE`子句中的名字空間是一樣的, 除非你使用了分組,否則它和`HAVING`子句中的名字空間也一樣。 如果多個表有重復的字段名,那么你還必須給出表名字,例如: ``` SELECT tbl1.a, tbl2.a, tbl1.b FROM ... ``` 當使用多個表時,給出表名還有助于引用該表的所有字段: ``` SELECT tbl1.*, tbl2.a FROM ... ``` 又見[Section 7.2.2](#calibre_link-489)。 如果將值表達式用于選擇列表,那么它在概念上向返回的表中增加了一個新的虛擬字段。 值表達式為結果中的每一行進行一次計算,計算之前用該行的數值替換任何表達式里引用的字段。 不過選擇列表中的這個表達式并非一定要引用來自`FROM`子句中表表達式里面的字段, 比如,它也可以是任意常量算術表達式。 ## 7.3.2\. 字段標簽 選擇列表中的列表項可以賦予名字,以便于進一步的處理。 例如在`ORDER BY`子句中的使用或通過客戶端應用程序顯示。比如: ``` SELECT a AS value, b + c AS sum FROM ... ``` 如果沒有使用`AS`聲明字段名字,那么系統將賦予一個缺省值。 對于簡單的字段引用,它是該字段的名字。對于函數調用,它是該函數的名字。 對于復雜表達式,系統會生成一個通用的名字。 只有當新列名與任何PostgreSQL 關鍵字不匹配時`AS`關鍵字是可選的(見[Appendix C](#calibre_link-126)), 您可以給列名加上雙引號來避免意外匹配關鍵字。例如,`VALUE`是一個關鍵字, 所以這樣是不起作用的: ``` SELECT a value, b + c AS sum FROM ... ``` 但這樣可以: ``` SELECT a "value", b + c AS sum FROM ... ``` 為了防止和未來補充的關鍵字發生沖突,建議您要么寫`AS`, 要么為輸出列名加雙引號標記。 > **Note:** 輸出字段的命名和在`FROM`子句里的命名是不一樣的(參閱[Section 7.2.1.2](#calibre_link-488))。 這樣就允許你對同一個字段命名兩次,FROM 子句里的名字將被選擇列表使用, 而選擇列表中新取的名字將被最終輸出。 ## 7.3.3\. `DISTINCT` 在處理完選擇列表之后,生成的表可以刪除重復行。直接在`SELECT` 后面寫上`DISTINCT`關鍵字即可: ``` SELECT DISTINCT _select_list_ ... ``` 如果不用`DISTINCT`你可以用`ALL`聲明保留所有行的缺省行為。 顯然,如果兩行里至少有一個字段值不同,那么我們認為這兩行是獨立的。 NULL 在這里被認為是相同的。 另外,我們還可以用表達式來判斷什么樣的行可以認為是獨立的: ``` SELECT DISTINCT ON (_expression_ [, `_expression_` ...]) _select_list_ ... ``` 這里的`_expression_`是一個值表達式, 它為每一行計算。如果一組行計算出的該表達式的值都相同,那么就認為這些行是重復的, 并只輸出第一行。請注意這里的"第一行"是不可預料的, 除非你在足夠多的字段上對該查詢進行了排序,保證到達`DISTINCT` 過濾器時行的順序是唯一的(`DISTINCT ON`將在`ORDER BY`排序之后處理)。 `DISTINCT ON`子句不是 SQL 標準的一部分,有時候被認為是一個糟糕的風格, 因為它的結果是不可判定的。如果用有可選的`GROUP BY`和在`FROM` 中的子查詢可以達到目的,那么我們可以避免使用這個構造,但是通常它是更方便的方法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看