2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

2.5. 查詢表 #

要從表中檢索資料,就需要對該表進行*查詢*。使用SQL SELECT 語句來完成此操作。該語句分為一個選擇列表(列出要返回的列)、一個表列表(列出要從中檢索資料的表)和一個可選的限定條件(指定任何限制條件)。例如,要檢索 weather 表的所有行,可以鍵入

SELECT * FROM weather;

這裡的 * 是“所有列”的簡寫。 [2] 因此,使用以下語句也會得到相同的結果:

SELECT city, temp_lo, temp_hi, prcp, date FROM weather;

輸出應為:

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      43 |      57 |    0 | 1994-11-29
 Hayward       |      37 |      54 |      | 1994-11-29
(3 rows)

您可以在選擇列表中使用表示式,而不僅僅是簡單的列引用。例如,您可以執行以下操作:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

這應該會給出:

     city      | temp_avg |    date
---------------+----------+------------
 San Francisco |       48 | 1994-11-27
 San Francisco |       50 | 1994-11-29
 Hayward       |       45 | 1994-11-29
(3 rows)

請注意,AS 子句用於重新命名輸出列。(AS 子句是可選的。)

可以透過新增 WHERE 子句來*限定*查詢,該子句指定所需的行。 WHERE 子句包含一個布林(真值)表示式,只有布林表示式為真的行才會被返回。查詢中的通常布林運算子(ANDORNOT)是允許的。例如,以下查詢檢索在下雨天舊金山的天氣資訊:

SELECT * FROM weather
    WHERE city = 'San Francisco' AND prcp > 0.0;

結果

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)

您可以請求按排序順序返回查詢結果:

SELECT * FROM weather
    ORDER BY city;
     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 Hayward       |      37 |      54 |      | 1994-11-29
 San Francisco |      43 |      57 |    0 | 1994-11-29
 San Francisco |      46 |      50 | 0.25 | 1994-11-27

在此示例中,排序順序未完全指定,因此您可能會得到舊金山的行,但順序可能不同。但如果您執行以下操作,則始終會得到上述結果:

SELECT * FROM weather
    ORDER BY city, temp_lo;

您可以要求從查詢結果中刪除重複的行:

SELECT DISTINCT city
    FROM weather;
     city
---------------
 Hayward
 San Francisco
(2 rows)

同樣,結果行的順序可能會有所不同。您可以透過同時使用 DISTINCTORDER BY 來確保結果的一致性: [3]

SELECT DISTINCT city
    FROM weather
    ORDER BY city;


[2] 雖然 SELECT * 對於臨時查詢很有用,但在生產程式碼中被廣泛認為是不好的風格,因為向表中新增列會更改結果。

[3] 在某些資料庫系統(包括舊版本的 PostgreSQL)中,DISTINCT 的實現會自動對行進行排序,因此 ORDER BY 是不必要的。但 SQL 標準不要求這樣做,而當前的 PostgreSQL 不保證 DISTINCT 會導致行被排序。

提交更正

如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用 此表格 報告文件問題。