W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
要從一個(gè)表中檢索數(shù)據(jù)就是查詢這個(gè)表。SQL的SELECT
語句就是做這個(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
、OR
和NOT
)。 比如,下面的查詢檢索舊金山的下雨天的天氣:
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)
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;
SELECT DISTINCT city
FROM weather;
city
---------------
Hayward
San Francisco
(2 rows)
再次聲明,結(jié)果行的順序可能變化。你可以組合使用DISTINCT
和ORDER 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)致行被排序。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: