MySQL查詢關鍵詞


1.查詢中用到的關鍵詞主要包含六個,並且他們的順序依次為
select--from--where--group by--having--order by

其中select和from是必須的,其他關鍵詞是可選的,這六個關鍵詞的執行順序
與sql語句的書寫順序並不是一樣的,而是按照下面的順序來執行:
from--where--group by--having--select--order by,
from:需要從哪個數據表檢索數據
where:過濾表中數據的條件
group by:如何將上面過濾出的數據分組
having:對上面已經分組的數據進行過濾的條件
select:查看結果集中的哪個列,或列的計算結果
order by :按照什么樣的順序來查看返回的數據

2.from后面的表關聯,是自右向左解析的
而where條件的解析順序是自下而上的。
where子句--執行順序為自下而上、從右到左
ORACLE 采用自下而上從右到左的順序解析Where 子句,根據這個原理,表之間的連接必須寫在其他Where 條件之前, 可以過濾掉最大數量記錄的條件必須寫在Where 子句的末尾。
也就是說,在寫SQL文的時候,盡量把數據量大的表放在最右邊來進行關聯,
而把能篩選出大量數據的條件放在where語句的最下面。

SQL Select語句完整的執行順序【從DBMS(數據庫管理系統)使用者角度】:
  1、from子句組裝來自不同數據源的數據;
  2、where子句基於指定的條件對記錄行進行篩選;
  3、group by子句將數據划分為多個分組;
  4、使用聚集函數進行計算;
  5、使用having子句篩選分組;
  6、計算所有的表達式;
  7、使用order by對結果集進行排序。

3.select子句--少用*號,盡量取字段名稱。
ORACLE 在解析的過程中, 會將依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 使用列名意味着將減少消耗時間。
sql 語句用大寫的;因為 oracle 總是先解析 sql 語句,把小寫的字母轉換成大寫的再執行

4.group by--執行順序從左往右分組

提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。即在GROUP BY前使用WHERE來過慮,而盡量避免GROUP BY后再HAVING過濾。
having 子句----很耗資源,盡量少用
避免使用HAVING 子句, HAVING 只會在檢索出所有記錄之后才對結果集進行過濾. 這個處理需要排序,總計等操作。

5.where 也應該比having 快點的,因為它過濾數據后才進行sum,在兩個表聯接時才用on 的,所以在一個表的時候,就剩下where 跟having比較了。

在這單表查詢統計的情況下,如果要過濾的條件沒有涉及到要計算字段,那它們的結果是一樣的,只是where 可以使用rushmore 技術,而having 就不能,在速度上后者要慢。
如果要涉及到計算的字段,就表示在沒計算之前,這個字段的值是不確定的,where 的作用時間是在計算之前就完成的,而having 就是在計算后才起作用的,所以在這種情況下,兩者的結果會不同。

在多表聯接查詢時,on 比where 更早起作用。系統首先根據各個表之間的聯接條件,把多個表合成一個臨時表后,再由where 進行過濾,然后再計算,計算完后再由having 進行過濾。

由此可見,要想過濾條件起到正確的作用,首先要明白這個條件應該在什么時候起作用,然后再決定放在那里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM