PostgreSQL 查詢一個(gè)表

2021-08-25 16:52 更新

要從一個(gè)表中檢索數(shù)據(jù)就是查詢這個(gè)表。SQLSELECT語句就是做這個(gè)用途的。 該語句分為選擇列表(列出要返回的列)、表列表(列出從中檢索數(shù)據(jù)的表)以及可選的條件(指定任意的限制)。比如,要檢索表weather的所有行,鍵入:

SELECT * FROM weather;

這里*所有列的縮寫。(a)因此相同的結(jié)果應(yīng)該這樣獲得:

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

而輸出應(yīng)該是:

     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)

你可以在選擇列表中寫任意表達(dá)式,而不僅僅是列的列表。比如,你可以:

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

這樣應(yīng)該得到:

     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子句是可選的)。

一個(gè)查詢可以使用WHERE子句修飾,它指定需要哪些行。WHERE子句包含一個(gè)布爾(真值)表達(dá)式,只有那些使布爾表達(dá)式為真的行才會被返回。在條件中可以使用常用的布爾操作符(AND、ORNOT)。 比如,下面的查詢檢索舊金山的下雨天的天氣:

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

結(jié)果:

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

你可以要求返回的查詢結(jié)果是排好序的:

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

在這個(gè)例子里,排序的順序并未完全被指定,因此你可能看到屬于舊金山的行被隨機(jī)地排序。但是如果你使用下面的語句,那么就總是會得到上面的結(jié)果:

SELECT * FROM weather
    ORDER BY city, temp_lo;

你可以要求在查詢的結(jié)果中消除重復(fù)的行:

SELECT DISTINCT city
    FROM weather;

     city
---------------
 Hayward
 San Francisco
(2 rows)

再次聲明,結(jié)果行的順序可能變化。你可以組合使用DISTINCTORDER BY來保證獲取一致的結(jié)果(b):

SELECT DISTINCT city
    FROM weather
    ORDER BY city;



a:雖然SELECT *對于即席查詢很有用,但我們普遍認(rèn)為在生產(chǎn)代碼中這是很糟糕的風(fēng)格,因?yàn)榻o表增加一個(gè)列就改變了結(jié)果。

b:在一些數(shù)據(jù)庫系統(tǒng)里,包括老版本的PostgreSQL,DISTINCT的實(shí)現(xiàn)自動(dòng)對行進(jìn)行排序,因此ORDER BY是多余的。但是這一點(diǎn)并不是 SQL 標(biāo)準(zhǔn)的要求,并且目前的PostgreSQL并不保證DISTINCT會導(dǎo)致行被排序。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號