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。