?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
要從一個表中檢索數(shù)據(jù)就是queried這個表。 SQL的SELECT語句就是做這個用途的。 該語句分為選擇列表(列出要返回的字段)、表列表(列出從中檢索數(shù)據(jù)的表)、以及可選的條件(聲明任意限制)。 比如,要檢索表weather的所有行,鍵入:
SELECT * FROM weather;
這里的*是"all columns"的縮寫。 [1] 因此同樣的結(jié)果可以用下面的語句獲得
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)
你可以在選擇列表中寫任意表達式,而不僅僅是字段列表。比如,你可以:
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子句是可選的。
一個查詢可以使用WHERE子句進行"qualified", 聲明需要哪些行。WHERE子句包含一個布爾表達式, 只有那些布爾表達式為真的行才會被返回。 允許你在條件中使用常用的布爾操作符(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
在這個例子里,排序的順序并非絕對清晰的,因此你可能看到San Francisco行隨機的排序。 但是如果你使用下面的語句,那么就總是會得到上面的結(jié)果:
SELECT * FROM weather ORDER BY city, temp_lo;
你可以要求查詢的結(jié)果按照某種順序排序,并且消除重復(fù)行的輸出:
SELECT DISTINCT city FROM weather;
city --------------- Hayward San Francisco (2 rows)
再次聲明,結(jié)果行的順序可能是隨機的。 你可以組合使用DISTINCT和ORDER BY來獲取一致的結(jié)果: [2]
SELECT DISTINCT city FROM weather ORDER BY city;
[1] | 雖然SELECT *可以把查詢的結(jié)果翻出來, 但我們普遍認為在生產(chǎn)代碼中這是很糟糕的風格, 因為給表增加一個字段就改變了結(jié)果。 |
[2] | 在一些數(shù)據(jù)庫系統(tǒng)里, 包括老版本的PostgreSQL, DISTINCT自動對行進行排序, 因此ORDER BY是多余的。 但是這一點并不是SQL標準的要求, 并且目前的PostgreSQL并不保證DISTINCT導(dǎo)致數(shù)據(jù)行被排序。 |