SQL的別名和SQL的執行順序和SQL優化


 SQL的別名

1、不可以在where子句中使用列名的別名,即select name t from emp where t>2999;是不允許的

2、使用別名的好處:

  提高SQL的易讀性

  提高SQL的解析執行效率

  語法檢查

  語義檢查

  共享池檢查

  生成執行樹

  執行

 3、SQL的硬解析和軟解析?

 

SQL的執行順序

1、from語句--where語句--group by語句--having語句--select語句--order by語句

 

rownum的使用

select * from emp rownum<=2  /*查找emp表的前兩條記錄*/

select * from (select rownum t,ename from emp) m

where m.t>=5 and m.t<=10 /*查詢某個范圍的記錄,先查詢出rownum並保存為臨時表m,再進行查詢*/

 

where和having的區別?

  where對分組前的小組內的詳細信息進行過濾

  having對分組后的信息進行過濾

 

 

內連接,外連接,自連接?

 

SQL優化

1、避免使用select * ,而是具體指出選擇哪些列

2、SQL大小寫,數據庫在解析sql時,先把SQL語句轉換為大寫,再進行解析操作,所以建議直接提供大寫的SQL語句。

3、過濾時,>和>=,使用>=優先,如a>2000和a>=2001,這樣可以避免過濾2000和2001之間的小數,可以調高效率

4、where子句中,不等於判斷會使索引失效。

5、where子句中,對列做運算,例如,加減乘除,會使索隱列失效。所以盡量不要在索隱列上做操作。

6、模糊查詢時,like "%abc%",前模糊會導致索引失效,后模糊不會導致索引失效。

7、in和exists的區別?

  1、in適合內表小外表大的情況,select * from emp where emp.deptno in (select deptno from dept)

  2、exists適合外表小內表大的情況.如此運用可提升效率

  注:由於兩者對表的連接方式不同,導致以上區分,in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。

8、not in 和 not exists 用法同上

9、某些情況下可以使用exists替換distinct。


免責聲明!

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



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