搜尋

首頁  >  問答  >  主體

Mysql语句,on,where,having..区别

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

PHP中文网PHP中文网2934 天前704

全部回覆(7)我來回復

  • PHP中文网

    PHP中文网2017-04-17 14:01:07

    sql是一個標準,不是mysql定義的。

    當然,mysql有自己定義的部分,也有沒有實現的標準。但你問的這幾個確實是標準的部分。

    至於為什麼,抱歉我沒能回答你的問題的,你可以去搜尋一下英文的內容。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:01:07

    有些時候,having可以替代where,但where不能取代having,where針對行級過濾,用於選擇資料庫中特定的行,having針對分組過濾,用於選擇結果集中特定的分組(一個或多個)。 。 。

    回覆
    0
  • 阿神

    阿神2017-04-17 14:01:07

    這樣說吧,有一張表是學生科目成績表,我們要查出學生總成績且總成績大於500分的學生來,這時候就要用到having了,select sum(score) as score from subjects group by user_id having score >500

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:01:07

    SQL語法是有標準的,mysql肯定要遵守基本的標準,而且這三個關鍵字有不同的語意:
    ON, 定義表連接的條件
    WHERE,定義表格行記錄的過濾條件
    HAVING,定義分組的的篩選條件

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:01:07

    我自然是知道的。
    那也就只能用sql語句標準解釋這個問題了

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:01:07

    既然有這個問題,那麼一定有sql基礎。

    sql定義了一個標準的關鍵字順序,例如查詢肯定第一個關鍵字是select;另外還有一個是執行順序。

    1.(left) join 表 on 關聯條件;on決定了表和前邊表的關聯的條件,是標準語法

    2.where 執行順序在join on 之後後,也就是說,where條件篩選是在join完了之後,比如是left join a,你在where之後加a表條件,這個left join 效果就類似join.

    3.having 這個是為減少子查詢存在的條件篩選,常用於報表;例如經過統計後再次篩選

    回覆
    0
  • 迷茫

    迷茫2017-04-17 14:01:07

    樓主好問題, 我也這麼覺得從語意上來說。
    join後面加 join條件 條件可以用where吧。
    當分組後要篩選,where也符合語義,為什麼要用having。
    可能是為了區分吧。

    回覆
    0
  • 取消回覆