假设如下应用:
两张表——用户表TDefUser(userid,address,phone)和消费表 TAccConsume(userid,time,amount),需要查消费超过5000的用户记录。
用exists:
select * from TDefUser where exists (select 1 from TAccConsume where TDefUser.userid=TAccConsume.userid and TAccConsume.amoun
30
2016
11
SQL exists与in
30
2016
11
oracle - SQL优化规则
1.CBO模式下,表从右到左查询,右边第一个为基础表,选择行数的少作为基础表,三个及三个以上的表,需要选择交叉表(连接另外两个表的表)作为基础表,
2.数据量大的时候,使用exists 而非 in
3.where,自下而上的解析where子句,过滤数据记录的条件写在where字句的尾部,以便在过滤了数据之后在进行表连接处理(即 a.name='张三'的写后面,再让a表中字段name为'张三'的数据去跟b表关联)
select
30
2016
11
oracle - 批处理(sql语句块格式)
declare
msg varchar2(32);
p_name varchar2(32);
outresult varchar2(64);
begin
p_name := 'xxxx';
select loginname into MSG from
30
2016
11
oracle - jobs(定时器)
--创建调度任务
declare
jobno number;
begin
dbms_job.submit(jobno, --定时器ID,系统自动获得
what =>'p_update_T_BS;'
30
2016
11
oracle - 超有用的小脚本
1、由表名得到对应的实体类--APPLICANT为表名
select 'private ' || decode(a.DATA_TYPE,
'VARCHAR2',
 
30
2016
11
oracle - 关于日期的函数
当用到函数时,日期转换里面的格式化参数是不区分大小的,例如,Select to_char(t.vdate,'dd'),t.vdate From test_student t;
'yyyy-mm-dd hh24:mi:ss' 和'YYYY-MM-DD HH24:MI:SS'、'yyyy-MM-dd hh24:mi:ss'、'dd'、'DD'等都没区别
1.日期到字符:
30
2016
11
TRUNCATE,DORP,DELETE的异同
相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的
30
2016
11
Oracle导出DMP文件的两种方法
方法一:利用PL/SQL Developer工具导出:
菜单栏---->Tools---->Export Tables,设置相关参数即可;
可以设置导出的内容,如果不是全表导出,可以设置导出的条件;
方法二:利用CMD命令导出导入:
数据导出:
1 将数据库XXX完全导出,用户名system 密码aaa, 实例名XXX 导出到D:\DATA.dmp中
exp
作者:Wendy | 分类:资源备份 | 浏览:806 | 评论:0
19
2016
10
19
2016
10
插入CLOB字段的方法
DECLARE
REALLYBIGTEXTSTRING CLOB := '待插入的海量字符串';
BEGIN
INSERT INTO test_table VALUES('test', REALLYBIGTEXTSTRING, '0');
end ;
/
commit;