簡介
SELECT 是最適合用於查詢和返回 MySQL 表中資訊的 SQL 命令。顧名思義,它用於指定從資料庫中選擇匹配記錄的條件。這是一個廣泛有用的角色,不僅適用於讀取資料,也適用於定位更新和其他操作。
在本文中,我們將介紹 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命令的附加項進行指定。您可以使用它們來幫助精確定位具有特定屬性的資料、修改輸出格式或進一步處理結果。
使用 SELECT 指定要顯示的列
`SELECT` 命令的列規範部分要求您命名要顯示查詢資料的列。
對於即席查詢和資料探索,最有用的選項之一是使用星號來指示您要顯示所有可用列的值
SELECT * FROM my_table;
這將顯示 my_table 中的所有記錄,因為我們沒有提供任何篩選來縮小結果範圍。每條記錄的所有列將按照它們在表中定義的順序顯示。
如果您正在查詢一個包含許多列的表,您可能希望使用的一種修改是使用 \G 而不是分號 ; 來結束您的語句
SELECT * FROM my_table\G
‘\G’ 語句終止符告訴 MySQL 垂直而不是水平顯示結果,這可以提高包含許多列或長值的表的讀取性。您可以將 ‘\G’ 用於終止任何語句,而不僅僅是與 ‘SELECT’ 一起使用。
您還可以透過指定列名來選擇檢視可用列的子集。列名用逗號分隔,並按給定順序顯示
SELECT column2, column1 FROM my_table;
這將顯示 my_table 中的所有記錄,但只按 column2 和 column1 的順序顯示這兩列。
使用 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;
您可以使用 Prisma Client 對結果進行排序,這與在 SQL 查詢中排序的方式非常相似。
獲取去重結果
如果您想在 MySQL 中查詢某一列的值範圍,可以使用 SELECT DISTINCT 變體。這將為列的每個不同值顯示一行。
基本語法如下:
SELECT DISTINCT column1 FROM my_table;
這將為 column1 中的每個唯一值顯示一行。
例如,要顯示 shirt 表中 color 的所有不同值,您可以輸入
SELECT DISTINCT color FROM shirt;
+--------+color |+--------+blue |green |orange |red |yellow |+--------+5 rows in set (0.00 sec)
要顯示多列的唯一性,您可以新增用逗號分隔的其他列。
例如,這將顯示 shirt 表中 color 和 shirt_size 的所有不同組合
SELECT DISTINCT color,shirt_size FROM shirt;
+--------+------------+color | shirt_size |+--------+------------+blue | M |blue | S |green | M |green | L |green | S |orange | L |orange | M |red | M |yellow | S |+--------+------------+9 rows in set (0.00 sec)
這將顯示錶中 color 和 shirt_size 的每個唯一組合。
您可以使用 Prisma Client 的 distinct 功能從查詢中過濾重複行。
總結
在本文中,我們介紹了 SELECT 命令的一些基本元素,以演示如何從 MySQL 表中返回資料。還有更多可選子句可以修改命令的行為,允許您縮小所需結果的範圍、指定要返回的行數等等。在後續文章中,我們將探討這些修飾符以增強 SELECT 的實用性。
