Mysql语句,on,where,having..区别
PHP中文网
PHP中文网 2017-04-17 13:59:07
0
7
618

提出这个问题很多人会觉得这太基础了..
on为join服务,where为物理表服务,having可以为别名服务.可惜我要的不是这样的答案
我在想一个问题,为什么mysql官方要出三个筛选条件关键字?
即一个关键字不能解决吗?(单独用where放在select执行前进行一次总的筛选)
why not ?

PHP中文网
PHP中文网

认证0级讲师

全部回覆(7)
Ty80

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語句標準解釋這個問題了

Peter_Zhu

既然有這個問題,那麼一定有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。
可能是為了區分吧。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!