分享至

簡介

SELECT 是最適合用來查詢和傳回 MySQL 表格內資訊的 SQL 命令。顧名思義,它用於指定從資料庫中選取相符記錄的條件。這是一個用途廣泛的角色,不僅適用於讀取資料,也適用於鎖定更新和其他動作。

在本文中,我們將介紹 SELECT 命令的基本形式,並示範如何使用它來傳回資料。雖然 SELECT 支援許多進階用例,但我們將堅持使用一些更簡單的形式來示範基本命令結構。

SELECT 命令的一般語法

SELECT 命令的基本格式如下所示

SELECT <column_names> FROM <table_name> <additional_conditions_and_formatting>;

此陳述式由幾個不同的部分組成

  • SELECTSELECT 命令本身。此 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 中的所有記錄,但僅顯示名為 column2column1 的欄位,並依該順序排列。

使用 AS 欄位別名修改結果表格

您可以選擇性地設定欄位別名,以修改輸出中欄位使用的名稱。

SELECT column1 AS "first column" FROM my_table;

這將顯示 my_tablecolumn1 的每個值。但是,輸出中的欄位將標記為 first column 而不是 column1

如果輸出結合了可能共用名稱的多個表格中的欄位名稱,或者如果它包含尚未命名的計算欄位,則這特別有用。

使用 ORDER BY 定義排序順序

ORDER BY 子句可用於根據給定的條件對結果列進行排序。一般語法如下所示

SELECT * FROM my_table ORDER BY <sort_expression>;

這將顯示 my_table 中所有記錄的所有欄位值。結果將根據佔位符 <sort_expression> 代表的運算式排序。

例如,假設我們有一個 customer 表格,其中包含 first_namelast_nameaddressphone_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;
顯示結果

取得相異結果

如果您想在 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 表格中 colorshirt_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)

這會顯示表格中 colorshirt_size 的每個唯一組合。

結論

在本文中,我們介紹了 SELECT 命令的一些基本元素,以示範如何從 MySQL 表格傳回資料。還有許多其他可選子句可以修改命令的行為,讓您可以縮小您想要的結果範圍、指定要傳回的資料列數等等。在後續的文章中,我們將探索這些修飾符,以增強 SELECT 的實用性。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎架構和開發人員工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。