SQL 透過 SELECT *(SELECT ALL) 子句令選取資料表中的所有欄位變得非常簡單。不幸的是,一旦你從清單中省略了一欄,SELECT ALL 語句就會消失。寫出每個欄的名稱很快就會變得乏味,尤其是當你碰巧要處理有數十個欄的資料表時。如果我們選取除一欄以外的每一欄(透過排除而不是包含進行選取)應怎麼辦呢?可以做到的。實際上,有兩種方法可以做到,一種簡單,另一種則更簡單一些。這些將是本文的重點。
方法 1:使用 INFORMATION_SCHEMA.COLUMNS 資料表
INFORMATION_SCHEMA 提供存取資料庫的中繼資料、有關 MySQL 伺服器的資訊(例如資料庫或資料表的名稱、欄的資料類型或存取權限)的途徑。具體而言,COLUMNS 資料表提供有關資料表中欄的資訊,包括欄名稱。
Sakila 範例資料庫的 film 資料表擁有最多欄數,總共有 13 欄。
這是我們使用 INFORMATION_SCHEMA.COLUMNS 資料表來擷取除 original_language_id 欄以外的所有欄的方式:
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;
在查詢中插入欄、資料表和結構描述資訊會產生我們想要的結果:
方法 2:使用 Navicat
Navicat 等資料庫開發和管理工具的主要目標是提高生產力。因此,Navicat 的設計在於使你的工作盡可能快速和輕鬆。為此,SQL 編輯器借助「自動完成程式碼」和可自訂的「程式碼片段」這兩項功能,幫助你更快地撰寫程式碼。程式碼片段可提供有關關鍵字的建議並消除重複輸入程式碼的工作。如果這還不夠的話,Navicat 還提供了一個很有用的工具「查詢建立工具」來讓你視覺化地建置查詢。它使你僅憑一點 SQL 知識就可以建立和編輯查詢。雖然查詢建立工具主要以新手程序員為目標群,但精通 SQL 的程序員仍然可以於某些工作從查詢建立工具中受益。其中一項工作就是選擇欄。
在查詢建立工具中,在資料表上按一下滑鼠右鍵並選取「選取全部欄位」。然後你可以簡單地取消勾選 original_language_id 欄位以將其從欄清單中刪除:
按一下「建置」按鈕來關閉對話方塊並將 SQL 程式碼加到編輯器:
與手動撰寫程式碼相比,使用查詢建立工具建立查詢具有一些優點:
- 減少輸入錯誤
- 產生易於閱讀的格式化 SQL
總結
在今天的文章中,我們學習了幾種技術來選取資料表中除一兩欄外的所有欄。
有興趣了解有關 Navicat for MySQL 的更多資訊嗎?你可以免費試用 14 天!