sql_01

From ... Where ... Select... ordey by

oracle

连接列值
select 'a'||'b'||null||'c' from duall -- abc

case when .. then ..
     when .. then ..
     ...
     else ..
end
else子句可选,如果没有使用else,对于不满足判断条件的行,case表达式会返回null

rownum<=5
1.oracle执行查询
2.oracle获取第一个符合条件的行,将它叫做第1行
3.有5行了么?如果没有,那么oracle就再返回行,因为它要满足行号小于等于5的条件,如果到了第5行,那么,oracle就不再返回行
4.oracle获取下一行,并递增行号(2..3..4..)
5.返回第3步
oracle的rownum数值是在获取每行之后才赋予的,所以,通过rownum=5来返回第5行,是错误的。

从表中随机返回n条记录
select * from (select * from tb_employee_mst t order by dbms_random.value()) where rownum <=5
在order by子句中指定数字常量时,是要求根据select列表中相应位置的列排序,在order by子句中使用函数时,则按函数在每一行计算结果排序

is null&is not null

like '%a%'   %匹配任何字符序列  
like '_a'    _匹配单个字符

order by(asc) 升序排序  order by desc 降序排列
order by中,优先次序是从左到右,如果使用select列表列的数字位置排序,那么这个数值不能大于select列表中项目的数目。如果按照select列表中没有的列排序,必须显式的给出排序的列名。如果在查询中使用group by或distinct,则不能按照select列表中没有的列来排序

select substr('abcdefg',3),substr('abcdefg',3,4),substr('abcdefg',length('abcdefg'))from dual
-- cdefg    cdef   g

replace('将要更改的字符串','被替换掉的字符串','替换字符串')
select  replace ('111222333444','222','888') from dual --'111888333444'

TRANSLATE(char, from, to)
返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。若from比to字符串长,那么在from中比to中多出的字符将会被删除。
select translate('abcdefgab','abc','wo')  from dual -- wodefgwo
select translate('abcdecfgbc','abc','wo')  from dual -- wodefgo
select translate('abcdecfgbc','abc','wowerty')  from dual -- wowdewfgow

处理排序空值
select * from tb_employee_mst t order by t.dimission_dt nulls first
select * from tb_employee_mst t order by t.dimission_dt nulls last

根据数据项的键排序--例如 如果job是salesman,根据comm排序,否则,根据sal排序
order by case when job = 'salesman' then comm else sal end

猜你喜欢

转载自kangkan.iteye.com/blog/1558088
今日推荐