Navicat 部落格

關於 ORDINAL_POSITION 的全部 2020 年 10 月 23 日,由 Robert Gravelle 撰寫

在包括 MySQL、SQL Server、Oracle 和其他資料庫在內的關聯式資料庫中,ORDINAL_POSITION 指的是資料表或查詢輸出中一欄在排序順序中的位置。在今天的文章中,我們將使用 Navicat Premium 作為資料庫用戶端,學習如何使用序數位置以我們想要的順序顯示欄。

ORDINAL_POSITION 如何影響查詢輸出

以網格格式檢視資料表時,欄是從左到右排序。例如,以下是在 Navicat 的網格檢視中顯示的詳細訂單資料表的欄:

orderdetails_columns_in_grid_view (95K)

同時,在資料表設計器中,你可以看到上面由左至右的欄順序對應於由上至下的順序:

orderdetails_columns_in_table_designer (101K)

預設情況下,欄採用與建立時相同的順序。欄順序很重要,因為它判斷資料庫中每個資料表、檢視和 SELECT 查詢的欄的順序。稍後我們將看到,如果我們不喜歡資料表中欄的順序,我們可以將它改變。

取得資料表的序數位置

由於你可以建立可以遮蔽資料表的真實序數位置的檢視,因此關聯式資料庫提供了一種尋找真實序數位置的方法。ORDINAL_POSITION 是 INFORMATION_SCHEMA.COLUMNS 資料表中的一欄。這樣,你可以像以下一樣查詢資料表來尋找資料表中欄的序數位置:

information_schema_columns_table (39K)

變更資料表的序數位置

那麼,如果你希望欄顯示的順序與建立時的順序不同,該怎麼辦?正如我之前提到的,你不必保留欄的原始 ORDINAL_POSITION。你可以使用以下其中一句陳述式來變更它:

ALTER TABLE orderdetails MODIFY COLUMN orderLineNumber smallint(6) AFTER quantityOrdered; 

或者:

ALTER TABLE orderdetails CHANGE COLUMN orderLineNumber smallint(6) AFTER quantityOrdered; 

上面的陳述式將 orderLineNumber 欄從最後位置移到倒數第二位。

在 Navicat 中,資料表設計器具有「上移」和「下移」按鈕,可快速變更欄順序:

move_up_button (58K)

選取 orderLineNumber 欄後,每次按一下「上移」按鈕都會將其 ORDINAL_POSITION 變更一位:

new_orderLineNumber_position (41K)

儲存資料表設計後,orderLineNumber 現在位於 priceEach 之前:

new_orderLineNumber_position_in_grid_view (58K)

在 SELECT 查詢中參考 ORDINAL_POSITION

序數位置不僅與預設欄順序有關,還可以在 SELECT 查詢中參考它作為欄名稱的快速鍵。為了說明這一點,以下的查詢參考了 ORDER BY 子句中的幾欄:

orderdetails_query_with_column_name (111K)

與其在 ORDER BY 子句中列出每個欄的名稱,我們只需參考在資料表中該欄的 ORDINAL_POSITION:

orderdetails_query (109K)

較短的 SQL,相同的結果!

總結

在今天的文章中,我們了解了 ORDINAL_POSITION 如何在資料表或查詢輸出中的排序方面影響欄的位置,以及如何使用序數位置以我們想要的順序顯示欄。

如果你對 Navicat Premium 感興趣,可以免費試用 14 天!

Navicat 文章
頻道記錄
分享
部落格封存檔