Oracle中的一些查詢語句及其執行順序
查詢條件:
1)LIKE:模糊查詢,需要借助兩個通配符,%:表示0到多個字符;_:標識單個字符。
2)IN(list):用來取出符合列表范圍中的數據。
3)NOT IN(list): 取出不符合此列表中的數據記錄。
4)BETWEEN…AND…:用來查詢符合某個值域范圍條件的數據,最常見的是使用在數字類型的數據范圍上,但對字符類型和日期類型數據也同樣適用。for example: SELECT ename, sal FROM emp WHERE sal BETWEEN 1500 AND 3000;
5)IS NULL:空值NULL是一個特殊的值,比較的時候不能使用”=”號,必須使用IS NULL,否則不能得到正確的結果。
6)IS NOT NULL:與5相反。
7) >ANY : 大於最小 <ANY:小於最大 >ALL:大於最大 <ALL:小於最小
for example: SELECT empno, ename, job, sal, deptno FROM emp WHERE sal > ANY (345,3333,123)
8)DISTINCT:過濾重復。for example: SELECT DISTINCT deptno FROM emp
9)ORDER BY:對查詢出的數據按一定規則進行排序操作,ASC指定升序,DESC指定降序。
10)GROUP BY:把得到的數據按照給定的字段進行分組,例如:把整個數據表按部門劃分成一個個小組。
11)HAVING:HAVING子句用來對分組後的結果進一步限制,比如按部門分組後,得到每個部門的最高薪水,可以繼續限制輸出結果。必須跟在GROUP BY後面,不能單獨存在。例如: SELECT deptno, MAX(sal) max_sal FROM emp GROUP BY deptno HAVING MAX(sal) >4000;
查詢語句的執行順序:
1、FROM 子句:執行順序為從後往前、從右到左。數據量較少的表盡量放在後面。
2、WHERE子句:執行順序為自下而上、從右到左。將能過濾掉最大數量記錄的條件寫在WHERE 子句的最右。
3、GROUP BY:執行順序從左往右分組,最好在GROUP BY前使用WHERE將不需要的記錄在GROUP BY之前過濾掉。
4、HAVING 子句:消耗資源。盡量避免使用,HAVING 會在檢索出所有記錄之後才對結果集進行過濾,需要排序等操作。
5、SELECT子句:少用*號,盡量取字段名稱。ORACLE 在解析的過程中, 通過查詢數據字典將*號依次轉換成所有的列名, 消耗時間。
6、ORDER BY子句:執行順序為從左到右排序,消耗資源。