2015-10-15 53 views
-3

如何修改此查詢以獲得更好的增強效果?如何更改此查詢以獲得更好的增強效果?

select * from employee 
where emp_id like '0%' 
    and emp_id not like '00%' 
    or emp_id like '1%' 
    or emp_id = '999'; 

我想與像 '0xxxxxxx', '1xxxxxx',999 emp_id的員工的所有細節,而不是像 '00xxxxxx'。

+0

是什麼你的查詢有問題嗎? –

+0

如果您只有少數員工,則不需要進行性能優化。如果你有一大堆僱員,那麼你的查詢可能會返回很多很多的行,所以全表掃描不是什麼大問題。 –

+1

在擔心性能之前,請確保在您的條件下使用括號來獲得您想要的結果:'(emp_id像'0%'和emp_id不像'00%')或....' – Lamak

回答

0

您可以使用oracle 10g中引入的regexp_like函數。

你的語句可能看起來像這樣到底

select * 
from (select '1xxxxx' d from dual union 
     select '0xxxxx' d from dual union 
     select '00xxxx' d from dual union 
     select '999' d from dual union 
     select '9999' d from dual union 
     select '555' d from dual union 
     select '5xxxxx' d from dual) 
where regexp_like(d, '(^0[^0]|^1)|^999$'); 

|起OR和讀取等,與0其次是不0開頭或以1開頭或等於999