簡介
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
的實用性。