常用oracle sql函数及语句积累

SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数:

以上四个函数都是用于如何处理字段为空的情况。

SQL Server / MS Access中,使用ISNULL()函数,isnull(字段名,0)意思是当这字段为空时返回0值。

在Oracle中,使用NVL()函数,nvl(字段名,0)意思一样

在Mysql中,使用IFNULL() 和 COALESCE(),用法和意思也和上面的函数一样。

DECODE()函数,

DECODE(value,'a','b','c'),意思为,若value为a,则返回b,否则返回c

DECODE(value,if1,then1,if2,then2,if3,then3,...,else) ,意思为, 若value为if1,则返回1,若value为if2,则返回2。。。

exists判断条件是否存在

用法:update waitscore b set b.effect='1' where exists (select 1 from member a where b.member_no=a.member_no and b.createdt<sysdate and b.effect='0');  意思为:更新在b表中满足(b.member_no=a.member_no and ...)条件的记录中的effect字段

exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:
  select name from student where sex = 'm' and exists(select 1 from grade where ...) ,只要
exists引导的子句有结果集返回,那么exists这个条件就算成立了,注意返回的字段始终为1,如果改成“select 2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。
与in的区别,in只能限制一个字段是否存在

trunc处理日期格式
参考网址http://blog.csdn.net/oracle1858/article/details/7162765
insert into select 语句:从一个表复制数据,然后把数据插入到一个已存在的表中
我们可以从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
或者我们可以只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

查询数据库表中重复数据

select id,count(*) from table_name group by id having count(*)>1

结果只取n记录

SELECT *  FROM Persons  WHERE ROWNUM <= n 

delete删除表中的记录,从另一表中取条件
Delete From Tbl_Acc_User A where A.Userid in(select u.useremployid From tbluser u where U.Useremployeestatus = '0');
或DELETE Tbl_Acc_User A where exists (select 1 from tbluser B where A.Userid=B.useremployid and B.Useremployeestatus = '0');
如果是删除表a记录,可以使用: truncate table 表a,意思是清空表a所有数据
如果是连表结构一起删除可以用:drop table 表a
错误用法:delete Tbl_Acc_User from Tbl_Acc_User A,tbluser B where A.Userid=B.useremployid and B.Useremployeestatus = '0';

多表更新:
update at1 a set a.bb(select b.dd from at2 b where a.aa=b.cc) where a.aa in (select cc from at2);

Update At3 C Set C.sup=(Select distinct A.sup From At1 A Left Join At2 B On A.Account=B.Account Where B.Cc=C.Cc) Where C.Cc In (Select b.Cc From At2 b right join At1 a on a.account=b.account);

类似于账号工号-上下级-账号上级 三表,如果返回无法更新,单查询返回多个值说明同一个账号下的工号对应的上级工号不唯一

update多列select from:update t_table a  set (f1,f2,f3)=(select f1,f2,f3 from test b where a.id=b.id)  where id=2;


查询数据库某天的全部操作
select t.SQL_TEXT, t.FIRST_LOAD_TIME
From V$sqlarea T
 Where T.First_Load_Time Like '2016-10-19%'
 order by t.FIRST_LOAD_TIME desc
查询数据库某个时间点的数据
select *   from test_tmp as of timestamp to_timestamp('2014-05-28 11:00:00','yyyy-mm-dd hh24:mi:ss')
union与union all
默认地,UNION 操作符选取不同的值。如果允许重复的值,使用 UNION ALL。


数值型字段操作

round(m,n)可以四舍五入
trunc(m,n)直接丢弃,不四舍五入
m值,n保留几位


索引:如果希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX index_name
ON table_name (column_name)
删除索引oracle:DROP INDEX index_name


视图:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
更新视图:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
删除视图:DROP VIEW view_name


sql表关联语句:

参考网址:http://www.nowamagic.net/librarys/veda/detail/936

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值