不久前,我們探索了你必須知道的一些 SELECT 查詢。其中包括判斷欄的最小值或最大值,以及依照類別將結果分組。今天的文章將介紹更多查詢,以及幾乎是自動撰寫查詢的一個技巧!
取得所有使用者建立的資料表
這些包括屬於使用者建立的資料庫的資料表,也就是說,它們不是系統資料庫結構描述的一部分。確切的語法因供應商而異,但這裡有幾個範例可讓你有一個概念。
在 SQL Server 中,這一行簡單的語句就可完成工作:
SELECT NAME FROM sys.objects WHERE TYPE='U'
MySQL 的語法有點冗長,因為你必須指定系統資料庫才能省略它們的資料表:
SELECT * from information_schema.tables
WHERE table_schema not in ('information_schema', 'mysql', 'performance_schema')
ORDER BY table_schema, table_name;
那為什麼要查詢使用者資料表呢?除了資料表名稱,MySQL 查詢還傳回有關每個資料表的大量有用資訊,包括列數、儲存引擎、它們的大小、最後一個 auto_increment 數值等等!
如果你只想要在 MySQL 中的資料表名稱,那就很容易了。你可以使用 WHERE 子句縮窄清單的範圍,或者,你可以發出以下命令:
SHOW FULL TABLES IN [database_name] WHERE TABLE_TYPE LIKE 'BASE TABLE';
取得所有檢視名稱
同樣,確切的語法因供應商而異,但是這幾個例子一個很好的起步點。
這是 SQL Server 的語法:
SELECT * FROM sys.views
在 MySQL 中,我們可以透過將 TABLE_TYPE 限制為 'VIEW' 來將清單縮窄至檢視。我們仍然必須排除 sys 資料庫,因為它包含許多檢視:
SELECT * FROM information_schema.`TABLES`
WHERE TABLE_TYPE = 'VIEW'
AND table_schema != 'sys';
以下是在 Navicat Premium 的結果:
要尋找特定資料庫的檢視?你只需將 WHERE 子句變更為:
AND TABLE_SCHEMA LIKE '[database_name]'
以下命令也可以做到:
SHOW FULL TABLES IN [database_name] WHERE TABLE_TYPE LIKE 'VIEW';
這將傳回檢視名稱及其類型「VIEW」:
温馨提示:使用資料表別名
撰寫 SQL 查詢既是一門藝術,也是一門科學。你可以養成一些良好的習慣,這些習慣會在生產力和/或寫作的簡易性方面帶來好處。例如,資料表(或 SQL)別名用於為資料表或資料表中的欄提供僅在查詢期間存在的臨時名稱。可以使用別名來使欄名稱更具可讀性並且更不容易出錯。
你只需在 FROM 子句中的資料表名稱後面加上「AS [alias_name]」:
SELECT column_name(s)
FROM table_name AS alias_name;
當你使用像 Navicat 這樣的查詢編輯器時,別名真的很值得使用。假設我們要從 actor 資料表中選擇一些欄位。首先,我們將欄清單留空,然後輸入 FROM 子句,並使用資料表別名:
SELECT
FROM actor as a
現在,當我們輸入較短的資料表別名時,Navicat 會顯示一個包含所有資料表欄的自動完成清單:
以這種方式撰寫查詢不僅快速,而且還減少了欄名稱拼字錯誤的可能性!
總結
在今天的文章中,我們學習了幾個查詢和技巧,使用 Navicat Premium 作為資料庫用戶端使撰寫 SELECT 語句幾乎全自動。Navicat 的自動完成程式碼和自訂的程式碼片段功能透過關鍵字建議和減少重複輸入相同的程式碼,令編碼更加快速。你可以免費試用 14 天進行評估。