Navicat 部落格

選取 MySQL 中除一欄外的所有欄 2020 年 1 月 23 日,由 Robert Gravelle 撰寫

SQL 透過 SELECT *(SELECT ALL) 子句令選取資料表中的所有欄位變得非常簡單。不幸的是,一旦你從清單中省略了一欄,SELECT ALL 語句就會消失。寫出每個欄的名稱很快就會變得乏味,尤其是當你碰巧要處理有數十個欄的資料表時。如果我們選取除一欄以外的每一欄(透過排除而不是包含進行選取)應怎麼辦呢?可以做到的。實際上,有兩種方法可以做到,一種簡單,另一種則更簡單一些。這些將是本文的重點。

方法 1:使用 INFORMATION_SCHEMA.COLUMNS 資料表

INFORMATION_SCHEMA 提供存取資料庫的中繼資料、有關 MySQL 伺服器的資訊(例如資料庫或資料表的名稱、欄的資料類型或存取權限)的途徑。具體而言,COLUMNS 資料表提供有關資料表中欄的資訊,包括欄名稱。

Sakila 範例資料庫的 film 資料表擁有最多欄數,總共有 13 欄。

film_columns (50K)

這是我們使用 INFORMATION_SCHEMA.COLUMNS 資料表來擷取除 original_language_id 欄以外的所有欄的方式:

column_selection (57K)

GROUP_CONCAT 函式將所有欄名稱連接為一個以逗號分隔的字串。然後,我們可以用空白字串取代要忽略的欄位!

執行查詢

要克服的一個小障礙是 MySQL 查詢不能接受動態欄名稱。解決方案是採用已準備的陳述式。以下是設定 @sql 變數,準備陳述式並執行程式碼:

SET @sql = CONCAT('SELECT ', 
                 (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') 
                  FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' 
                  AND TABLE_SCHEMA = '<database>'), 
                  ' FROM <table>');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

在查詢中插入欄、資料表和結構描述資訊會產生我們想要的結果:

query_results

方法 2:使用 Navicat

Navicat 等資料庫開發和管理工具的主要目標是提高生產力。因此,Navicat 的設計在於使你的工作盡可能快速和輕鬆。為此,SQL 編輯器借助「自動完成程式碼」和可自訂的「程式碼片段」這兩項功能,幫助你更快地撰寫程式碼。程式碼片段可提供有關關鍵字的建議並消除重複輸入程式碼的工作。如果這還不夠的話,Navicat 還提供了一個很有用的工具「查詢建立工具」來讓你視覺化地建置查詢。它使你僅憑一點 SQL 知識就可以建立和編輯查詢。雖然查詢建立工具主要以新手程序員為目標群,但精通 SQL 的程序員仍然可以於某些工作從查詢建立工具中受益。其中一項工作就是選擇欄。

在查詢建立工具中,在資料表上按一下滑鼠右鍵並選取「選取全部欄位」。然後你可以簡單地取消勾選 original_language_id 欄位以將其從欄清單中刪除:

query_builder

按一下「建置」按鈕來關閉對話方塊並將 SQL 程式碼加到編輯器:

code_in editor

與手動撰寫程式碼相比,使用查詢建立工具建立查詢具有一些優點:

  • 減少輸入錯誤
  • 產生易於閱讀的格式化 SQL

總結

在今天的文章中,我們學習了幾種技術來選取資料表中除一兩欄外的所有欄。

有興趣了解有關 Navicat for MySQL 的更多資訊嗎?你可以免費試用 14 天!

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