数据库常用sql

来源:互联网 发布:js input 选中事件 编辑:程序博客网 时间:2024/06/06 19:59
1.Oracle.查看存储过程:
select *  from user_objects where object_type ='PROCEDURE';


2.Oracle.查看存储过程源代码:
select text from user_source where  name='CAL_BJCHMIDDATA';




3.Oracle.分页查询:(rownum)
从数据库表中第M条记录开始检索N条记录
     SELECT * 
           FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
           where t2.r >= M
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,
依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。


oralce是边执行笛卡尔集运算,边应用选择条件,所以rownum>n(n>1=)永远不成立




4.Oracle,随机查询20条
select * from( select * from 表名 order by dbms_random.value)
where rownum <= 20;




5.删除重复记录: (rowid)
select *  from TEST  t1 where  rowid <> (select  max(rowId) from TEST t2  where t1.col1=t2.col1 );


在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,
可能所有列的内容都相同,但rowid不会相同。


6.外连接
LEFT OUTER JOIN:左外关联 , 条件用ON //左表的所有记录都显示,而用(+)时恰好在显示在右边,要注意区分。
RIGHT OUTER JOIN:右外关联 条件用ON  //右表的所有记录都显示,而用(+)时恰好在显示在左边,要注意区分。
FULL OUTER JOIN:全外关联 条件用ON   //显示左表对应右表的所有记录



7.分组统计
select f.NAME ,
sum(case when f.TYPE='0'  then  1  end )  as jzTotal, 
sum(case when f.TYPE='1'  then  1  end )  as kcTotal, 
sum(case when f.TYPE='2'  then  1  end )  as jwTotal,
count(f.TYPE)  as Total 
from r_test f  group by  f.NAME ;




8.查询每个月的最大值
统计每个月xxxx最大的前三条记录
select  ID,YEARMONTH,xxxx
from (
select  r.ID,r.YEARMONTH,r.CSN  ,
ROW_NUMBER() OVER (PARTITION BY r.YEARMONTH ORDER BY r.CSN  DESC )   aaa  
from xxxx  r 
)  ds
where ds.aaa <=3


9.oracle树型结构查询
树型表结构:
节点ID  上级ID  节点名称
公式: 
select 节点ID,节点名称,level
from 表
connect by prior 节点ID=上级节点ID
start with 上级节点ID=节点值

10.DECODE函数
DECODE函数的作用:它可以将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值
语法如下:
 DECODE(control_value,value1,result1[,value2,result2…][,default_result]);
 
 select decode( x , 1 , ‘x is 1 ’, 2 , ‘x is 2 ’, ‘others’) from dual
 当x等于1时,则返回‘x is 1’。
 当x等于2时,则返回‘x is 2’。
 否则,返回others’。
 
 11.复制表
只复制表结构的sql
create table b as select * from a where 1<>1 
即复制表结构又复制表中数据的sql
create table b as select * from a 
复制表的制定字段的sql
create table b as select row_id,name,age from a where 1<>1 
insert into 会将查询结果保存到已经存在的表中
insert into t2(column1, column2, ....)
select column1, column2, .... from t1