SQL查詢中計算列的正確位置:WHERE還是HAVING?
在SQL中,用於檢索資料的條件可以放在WHERE或HAVING子句中。當使用計算列時,理解其正確的位置對於確保高效查詢至關重要。
WHERE與HAVING:關鍵區別
計算列的位置
計算列必須放在HAVING子句中,而不是WHERE子句中。這是因為:
範例:
考慮一個包含'id'和'value'列的表:
<code class="language-sql">CREATE TABLE `table` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `value` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `value` (`value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
要取得大於5的值,可以使用兩個查詢:
<code class="language-sql">-- WHERE 子句 SELECT `value` v FROM `table` WHERE `value` > 5; -- HAVING 子句 SELECT `value` v FROM `table` HAVING `value` > 5;</code>
這兩個查詢會傳回相同的結果,但有關鍵差異。如果使用別名'v',WHERE子句會引發錯誤,而HAVING子句則允許它。
效能影響
在大型表上對計算列使用WHERE子句可能會對效能產生負面影響。這是因為過濾是在計算之前應用的,可能導致不必要的計算。透過將計算放在HAVING子句中,僅使用過濾後的數據,從而提高效能。
結論
當使用計算列時,必須將其放在HAVING子句中,以確保正確的計算和最佳效能。 WHERE和HAVING子句之間的差異允許更大的靈活性和高效的資料過濾。
以上是WHERE 或 HAVING:SQL 中的計算列應該放在哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!