PostgreSQL / 讀取和查詢資料
如何在 PostgreSQL 中使用 `SELECT` 執行基本查詢
簡介
SELECT 命令是在 PostgreSQL 中查詢和讀取資料庫表中記錄資訊的主要方式。然而,它的用途並不僅限於只讀操作。SELECT 語法與許多其他命令結合使用,可以針對資料庫中的特定記錄或欄位進行更新、刪除和更復雜的操作。
在本指南中,我們將展示 SELECT 的基本語法如何支援從表中收集資料。雖然我們將把該命令的大量可選子句留給其他文章,但希望即使是最基本的元件也能為查詢資料提供堅實的基礎。這些基礎知識只需要您學習幾個子句和結構。
SELECT 命令的通用語法
SELECT 命令的基本格式如下:
SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;
此語句由幾個不同的部分組成:
SELECT:SELECT命令本身。此 SQL 語句指示我們希望查詢表或檢視中的資料。其周圍的引數和子句透過定義條件來確定輸出的內容和格式。<column_names>:SELECT語句可以返回整個行(由*萬用字元表示)或可用列的子集。如果您只想輸出特定列,請提供您希望顯示的列名,並用逗號分隔。FROM <table_name>:FROM關鍵字用於指示應查詢的表或檢視。在大多數簡單查詢中,這由包含您感興趣的資料的單個表組成。<additional_conditions_and_formatting>:大量過濾器、輸出修飾符和條件可以作為SELECT命令的附加項指定。您可以使用它們來幫助精確定位具有特定屬性的資料、修改輸出格式或進一步處理結果。
您可以在我們關於CRUD 操作的指南中瞭解如何使用 Prisma Client 進行查詢。
使用 SELECT 指定要顯示的列
SELECT 命令的列指定部分要求您命名要顯示所查詢資料的列。
對於即席查詢和資料探索期間,最有用的選項之一是使用星號表示您希望顯示所有可用列中的值:
SELECT * FROM my_table;
這將顯示 my_table 中的所有記錄,因為我們沒有提供任何過濾來縮小結果範圍。每條記錄的所有列將按照它們在表中定義的順序顯示。
您也可以選擇透過名稱指定可用列的子集。列名用逗號分隔,並按照給定的順序顯示:
SELECT column2, column1 FROM my_table;
這將顯示 my_table 中的所有記錄,但只顯示名為 column2 和 column1 的列,並按該順序顯示。
如果使用 Prisma Client,您可以使用選擇欄位來實現相同的結果。
使用 AS 的列別名修改結果表
您可以選擇設定列別名來修改輸出中列的名稱。
SELECT column1 AS "first column" FROM my_table;
這將顯示 my_table 中 column1 的每個值。但是,輸出中的列將被標記為 first column 而不是 column1。
如果輸出結合了來自可能共享名稱的多個表的列名,或者包含尚無名稱的計算列,這尤其有用。
使用 ORDER BY 定義排序順序
ORDER BY 子句可用於根據給定條件對結果行進行排序。通用語法如下:
SELECT * FROM my_table ORDER BY <sort_expression>;
這將顯示 my_table 中所有記錄的所有列的值。結果將按照佔位符 <sort_expression> 所表示的表示式進行排序。
例如,假設我們有一個 customer 表,其中包含 first_name、last_name、address 和 phone_number 列。如果我們要按 last_name 的字母順序顯示結果,我們可以使用以下命令:
SELECT * FROM customer ORDER BY last_name;
結果按 last_name 列的字母升序排序。
要反轉排序順序,我們可以在 ORDER BY 子句的末尾新增 DESC 修飾符:
SELECT * FROM customer ORDER BY last_name DESC;
您也可以按多列排序。在這裡,我們首先按 last_name 排序,然後對於所有具有相同 last_name 值的列,再按 first_name 排序。兩種排序都是升序:
SELECT * FROM customer ORDER BY last_name, first_name;
另一個通常很重要的選項是澄清 NULL 值在排序順序中的位置。您可以透過為任何排序列新增 NULLS FIRST(預設)或 NULLS LAST 來實現:
SELECT * FROM customer ORDER BY last_name NULLS LAST;
您可以使用 Prisma Client 排序結果,其方式與 SQL 查詢非常相似。
獲取 DISTINCT 結果
如果您想在 PostgreSQL 中查詢某一列的值範圍,可以使用 SELECT DISTINCT 變體。這將為列的每個不同值顯示一行。
基本語法如下:
SELECT DISTINCT column1 FROM my_table;
這將為 column1 中的每個唯一值顯示一行。
例如,要顯示 shirt 表中 color 的所有不同值,您可以輸入:
SELECT DISTINCT color FROM shirt;
color------bluegreenorangeredyellow
要顯示多列的唯一性,可以新增用逗號分隔的其他列。
例如,這將顯示 shirt 表中 color 和 shirt_size 的所有不同組合:
SELECT DISTINCT color,shirt_size FROM shirt;
color | shirt_size-------+-----------blue | Mblue | Sgreen | Mgreen | Lgreen | Sorange | Lorange | Mred | Myellow | S
這將顯示錶中 color 和 shirt_size 的每個唯一組合。
一個通常更靈活的變體是 PostgreSQL 的 SELECT DISTINCT ON 命令。此格式允許您指定一個應組合唯一的列列表,並單獨列出您希望顯示的列。
通用語法如下,在 SELECT DISTINCT ON 後的括號中列出應唯一的列或多列,然後是您希望顯示的列:
SELECT DISTINCT ON (column1) column1, column2 FROM my_table ORDER BY column1;
例如,如果您想為每種襯衫尺寸顯示一種顏色,您可以輸入:
SELECT DISTINCT ON (shirt_size) color,shirt_size FROM shirt;
color | shirt_size------+-----------red | Mgreen | Lgreen | S
這將為 shirt_size 中的每個唯一值顯示一行。對於每一行,它將顯示 color 列,然後是 shirt_size 列。
如果使用 ORDER BY 子句,則選定用於排序的列必須與 DISTINCT ON 括號中選定的列匹配,以便輸出具有可預測的結果:
SELECT DISTINCT ON (shirt_size) color,shirt_size FROM shirt ORDER BY shirt_size DESC;
color | shirt_size------+-----------green | Sred | Mgreen | L
您可以使用 distinct 功能透過 Prisma Client 過濾查詢中的重複行。
結論
在本指南中,我們介紹了使用 SELECT 命令識別和顯示錶和檢視中記錄的一些基本方法。SELECT 命令是面向 SQL 的資料庫中最靈活和強大的操作之一,具有許多不同的方法來新增子句、條件和過濾。
雖然本指南只涵蓋了基本用法,但您在這裡學到的通用格式將作為所有其他讀取和許多寫入查詢的基礎。學習更準確地過濾和定位結果的方法,將擴充套件我們今天所涵蓋的功能。
您可以在我們的過濾和排序文件中瞭解更多關於使用 Prisma Client 排序和過濾查詢的資訊。
