提出这个问题很多人会觉得这太基础了..on为join服务,where为物理表服务,having可以为别名服务.可惜我要的不是这样的答案我在想一个问题,为什么mysql官方要出三个筛选条件关键字?即一个关键字不能解决吗?(单独用where放在select执行前进行一次总的筛选)why not ?
认证0级讲师
sql是一個標準,不是mysql定義的。
當然,mysql有自己定義的部分,也有沒有實現的標準。但你問的這幾個確實是標準的部分。
至於為什麼,抱歉我沒能回答你的問題的,你可以去搜尋一下英文的內容。
有些時候,having可以替代where,但where不能取代having,where針對行級過濾,用於選擇資料庫中特定的行,having針對分組過濾,用於選擇結果集中特定的分組(一個或多個)。 。 。
這樣說吧,有一張表是學生科目成績表,我們要查出學生總成績且總成績大於500分的學生來,這時候就要用到having了,select sum(score) as score from subjects group by user_id having score >500
SQL語法是有標準的,mysql肯定要遵守基本的標準,而且這三個關鍵字有不同的語意:ON, 定義表連接的條件WHERE,定義表格行記錄的過濾條件HAVING,定義分組的的篩選條件
我自然是知道的。 那也就只能用sql語句標準解釋這個問題了
既然有這個問題,那麼一定有sql基礎。
sql定義了一個標準的關鍵字順序,例如查詢肯定第一個關鍵字是select;另外還有一個是執行順序。
1.(left) join 表 on 關聯條件;on決定了表和前邊表的關聯的條件,是標準語法
2.where 執行順序在join on 之後後,也就是說,where條件篩選是在join完了之後,比如是left join a,你在where之後加a表條件,這個left join 效果就類似join.
3.having 這個是為減少子查詢存在的條件篩選,常用於報表;例如經過統計後再次篩選
樓主好問題, 我也這麼覺得從語意上來說。 join後面加 join條件 條件可以用where吧。 當分組後要篩選,where也符合語義,為什麼要用having。 可能是為了區分吧。
sql是一個標準,不是mysql定義的。
當然,mysql有自己定義的部分,也有沒有實現的標準。但你問的這幾個確實是標準的部分。
至於為什麼,抱歉我沒能回答你的問題的,你可以去搜尋一下英文的內容。
有些時候,having可以替代where,但where不能取代having,where針對行級過濾,用於選擇資料庫中特定的行,having針對分組過濾,用於選擇結果集中特定的分組(一個或多個)。 。 。
這樣說吧,有一張表是學生科目成績表,我們要查出學生總成績且總成績大於500分的學生來,這時候就要用到having了,select sum(score) as score from subjects group by user_id having score >500
SQL語法是有標準的,mysql肯定要遵守基本的標準,而且這三個關鍵字有不同的語意:
ON, 定義表連接的條件
WHERE,定義表格行記錄的過濾條件
HAVING,定義分組的的篩選條件
我自然是知道的。
那也就只能用sql語句標準解釋這個問題了
既然有這個問題,那麼一定有sql基礎。
sql定義了一個標準的關鍵字順序,例如查詢肯定第一個關鍵字是select;另外還有一個是執行順序。
1.(left) join 表 on 關聯條件;on決定了表和前邊表的關聯的條件,是標準語法
2.where 執行順序在join on 之後後,也就是說,where條件篩選是在join完了之後,比如是left join a,你在where之後加a表條件,這個left join 效果就類似join.
3.having 這個是為減少子查詢存在的條件篩選,常用於報表;例如經過統計後再次篩選
樓主好問題, 我也這麼覺得從語意上來說。
join後面加 join條件 條件可以用where吧。
當分組後要篩選,where也符合語義,為什麼要用having。
可能是為了區分吧。