PostgreSQL中的幾種SQL從句
本文主要介紹了適用於PostgreSQL中的SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY和LIMIT從句的一些需要注意的事項。
SELECT
SELECT是使用最頻繁的,超過所有其他從句。其他的一些從句可能我們幾乎不會用到,但是SELECT的情況不同,因為它是一個強制性的從句。
SELECT最重要的部分是:
1)SELECT * 返回資料來源中的所有列。
2)雖然SELECT在語法上被命名為第一個從句(除了那些使用WITH子句的查詢),但它不是最先執行的。 值得注意的是,SELECT也不是最後執行的從句。
3)可以在SELECT從句中為表示式(或任何列)指定引用名稱或ALIAS。但需要注意的是,這些給定的名稱可以在ORDER BY和GROUP BY從句中使用,但不能在WHERE或HAVING從句中使用。
4)當查詢中存在GROUP BY從句(或聚合函式)時,SELECT不應該命名任何未分組的列。而只能是任何聚合函式中的那些列或功能上依賴於分組列的那些列。
5)SELECT不僅返回特定的列,而且它的使用也擴充套件到INSERT和CREATE TABLE語句。
更多與SELECT相關的詳細資訊,請參閱PostgreSQL的官方手冊。
FROM
FROM在大多數情況下是強制性從句。如果需要從簡單表示式返回的實際儲存的資料,將需要FROM從句。如果沒有FROM從句,就沒有資料來執行相關操作。因此,查詢任何表都是絕對需要FROM從句的。
FROM最重要的部分是::
1)雖然FROM在語法上被列為SELECT查詢中的第二個子句,但它卻是第一個執行的。
2)FROM提供(通過載入)其子句中命名的任何表中的所有行。
3)可以在FROM子句中給表名起一個別名,但需要在整個查詢過程中由該ALIAS引用。
4)FROM是查詢表時必需的從句。
更多與FROM相關的詳細資訊,請參閱PostgreSQL的官方手冊。
WHERE
WHERE是一個可選的從句。除了SELECT之外,WHERE從句還可以與其他SQL命令一起使用。如果沒有WHERE從句,UPDATE和DELETE語句可能會影響所有目標行,這可能不是我們想要的。
聚合函式不能在WHERE從句的布林條件表示式中使用。
WHERE從句無法訪問SELECT從句中列出的列名的別名。
WHERE最重要的部分是::
1)聚合函式不可訪問,不能在WHERE從句的布林條件檢查中使用。
2)SELECT從句中的別名列不能在WHERE從句中引用。
3)WHERE從句布林表示式條件檢查可以有如下結果:true,false或NULL。
4)將刪除WHERE從句布林表示式的值為false或NULL的任何行。
5)可以通過利用AND或OR關鍵字在WHERE從句中檢查多個布林條件。
更多與WHERE相關的詳細資訊,請參閱PostgreSQL的官方手冊。
GROUP BY
這是一個可選從句。此從句為所選的那些建立單行,其中包含指定分組列值的匹配項。
GROUP BY最重要的部分是:
1)Postgres不僅可以對源表中的列進行分組,還可以對SELECT列列表中列出的列進行分組。
2)在特定的查詢中,GROUP BY可以通過刪除SELECT從句列的重複值來模仿DISTINCT從句的行為。
3)列順序與GROUP BY無關。
4)除聚合外,不能引用那些不是GROUP BY從句目標的列。
5)在許多情況下,可以在PRIMARY KEY上對該鍵的功能相關列進行分組。
6)在沒有GROUP BY從句的情況下,仍然對使用聚合函式的查詢執行分組。
更多與GROUP BY相關的詳細資訊,請參閱PostgreSQL的官方手冊。
HAVING
這是一個可選從句。HAVING使用布林條件檢查過濾結果集中的行,就像WHERE從句一樣,而且它還會過濾由GROUP BY從句和/或聚合函式形成的行。
HAVING最重要的部分是:
1)除了任何GROUP BY列之外,HAVING從句還可以引用聚合函式中命名的列(甚至是那些未分組的列)。
2)HAVING負責在應用聚合函式或分組後移除行。
3)可以在HAVING從句中引用非聚合列。
4)儘管HAVING從句經常與GROUP BY從句一起使用,但也可以單獨使用它。查詢結果僅在聚合函式中形成這些列的單個組。
更多與HAVING相關的詳細資訊,請參閱PostgreSQL的官方手冊。
ORDER BY
這是一個可選從句。當需要特定排序時使用ORDER BY。否則,資料庫將以任意順序返回結果。有兩種可用的排序模式,ASC(升序)或DESC(降序)順序,ASC是預設值。如果結果集包含NULL值,那麼這些也可以在排序中使用。
ORDER BY最重要的部分是:
1)排序表示式是查詢的SELECT列表中允許的任何表示式。
2)PostgreSQL允許使用SELECT從句中不存在的ORDER BY列。
3)除非使用ORDER BY從句,否則查詢結果是以任意順序返回的。
4)ORDER BY和LIMIT從句非常適合用於確定“Top”行結果集。
5)可以按SELECT列表中的列位置編號對結果進行排序,但指定的數字不得大於SELECT從句列表中的專案數。也就是說,如果SELECT從句只有3個專案,則ORDER BY 4將產生錯誤。
6)每個單獨的表示式僅按其列出的選項排序。例如,ORDER BY col1 ASC,col2 ASC與ORDER BY col1,col2 ASC是不同的。
更多與ORDER BY相關的詳細資訊,請參閱PostgreSQL的官方手冊。
LIMIT
LIMIT是一個可選從句。LIMIT實際上由2個子從句組成,OFFSET是其中的第二個子從句。
LIMIT最重要的部分是:
1)如果查詢本身在結果集中產生較少的行,則LIMIT可能返回的行數少於定義的數量。換句話說,它對返回的行數沒有影響。
2)LIMIT ALL語法是可接受的,並且具有與完全不包括LIMIT從句相同的效果。
3)雖然使用OFFSET從句可以跳過多行,但這不是任何效能優化的解決方案。
4)OFFSET 0相當於不使用OFFSET從句。
更多與ORDER BY相關的詳細資訊,請參閱PostgreSQL的官方手冊。
By Kalath