在包括 MySQL、SQL Server、Oracle 和其他資料庫在內的關聯式資料庫中,ORDINAL_POSITION 指的是資料表或查詢輸出中一欄在排序順序中的位置。在今天的文章中,我們將使用 Navicat Premium 作為資料庫用戶端,學習如何使用序數位置以我們想要的順序顯示欄。
ORDINAL_POSITION 如何影響查詢輸出
以網格格式檢視資料表時,欄是從左到右排序。例如,以下是在 Navicat 的網格檢視中顯示的詳細訂單資料表的欄:
同時,在資料表設計器中,你可以看到上面由左至右的欄順序對應於由上至下的順序:
預設情況下,欄採用與建立時相同的順序。欄順序很重要,因為它判斷資料庫中每個資料表、檢視和 SELECT 查詢的欄的順序。稍後我們將看到,如果我們不喜歡資料表中欄的順序,我們可以將它改變。
取得資料表的序數位置
由於你可以建立可以遮蔽資料表的真實序數位置的檢視,因此關聯式資料庫提供了一種尋找真實序數位置的方法。ORDINAL_POSITION 是 INFORMATION_SCHEMA.COLUMNS 資料表中的一欄。這樣,你可以像以下一樣查詢資料表來尋找資料表中欄的序數位置:
變更資料表的序數位置
那麼,如果你希望欄顯示的順序與建立時的順序不同,該怎麼辦?正如我之前提到的,你不必保留欄的原始 ORDINAL_POSITION。你可以使用以下其中一句陳述式來變更它:
ALTER TABLE orderdetails MODIFY COLUMN orderLineNumber smallint(6) AFTER quantityOrdered;
或者:
ALTER TABLE orderdetails CHANGE COLUMN orderLineNumber smallint(6) AFTER quantityOrdered;
上面的陳述式將 orderLineNumber 欄從最後位置移到倒數第二位。
在 Navicat 中,資料表設計器具有「上移」和「下移」按鈕,可快速變更欄順序:
選取 orderLineNumber 欄後,每次按一下「上移」按鈕都會將其 ORDINAL_POSITION 變更一位:
儲存資料表設計後,orderLineNumber 現在位於 priceEach 之前:
在 SELECT 查詢中參考 ORDINAL_POSITION
序數位置不僅與預設欄順序有關,還可以在 SELECT 查詢中參考它作為欄名稱的快速鍵。為了說明這一點,以下的查詢參考了 ORDER BY 子句中的幾欄:
與其在 ORDER BY 子句中列出每個欄的名稱,我們只需參考在資料表中該欄的 ORDINAL_POSITION:
較短的 SQL,相同的結果!
總結
在今天的文章中,我們了解了 ORDINAL_POSITION 如何在資料表或查詢輸出中的排序方面影響欄的位置,以及如何使用序數位置以我們想要的順序顯示欄。
如果你對 Navicat Premium 感興趣,可以免費試用 14 天!