有用的数据库相关内容收集

[b]有用的SQL收集:[/b]

[b]Oracle创建一个表空间:[/b]
create tablespace zastablespace datafile 'filePath' size 200m autoextend on next 10m;

[b]Oracle创建一个用户并授权:[/b]

create user zas identified by zas default tablespace zastabspace temporary tablespace temp profile default;

其中identified后跟的密码区分大小写

grant connect, resource,dba to zas;

[b]查看空间占用情况[/b]


SELECT segment_name AS TABLENAME,
BYTES B,
BYTES / 1024 KB,
BYTES / 1024 / 1024 MB
FROM user_segments order by bytes desc



[b]Oracle重复数据删除:[/b]

假设emp有大量的重复数据,重复条件为:empno相同

通过rowid来删除:

 delete from emp t where t.rowid <> (select max(rowid) from emp a where t.empno = a.empno);

通过rownum来删除:

delete from emp t where t.empno = ? and t.rownum > 1;

[b]删除操作一般为危险操作,在生产环境通过数据库端处理时一定要做好备份工作。[/b]


[b]Oracle的连接[/b]
两个表或结果集,定义为两个集合A、B,最直接的连接就是笛卡尔积,即AxB。[b]笛卡尔积是两个集合之间的交叉乘积,记录数为|A|x|B|。[/b]
笛卡尔积一般不用,但也是有实际意义的,比如查询本月正常工作日每天有哪些人没有打卡,就可以用(本月工作日)x(人员名单)-(打卡记录)。
更有意义的是笛卡尔积的子集,包括内连接、左联接、右连接、全连接。连接就是将两个表(或结果集)接在一起,成为一个信息更全面的结果集。
以ORACLE 中的SCOTT用户下的表EMP, BONUS为例,将这两个表联接起来:
[b]内联接:实际上应该理解为交联接[/b]
select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b where a.ename=b.ename;

--只查两个表中ENAME 一致的数据。
[b]左联接:[/b]
 select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b where a.ename=b.ename(+);   
--只要左边有就行了,右边是否存在对应的没关系。或者可写为:
 Select a.*,b.sal b_sal,b.comm b_com From emp a left join bonus b on a.ename=b.ename; 
[b]右联接:[/b]
select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b where a.ename(+)=b.ename;  
--与左联接相反,或者可写为:
 Select a.*,b.sal b_sal,b.comm b_com From emp a right join bonus b on a.ename=b.ename; 
[b]完全联接:实际上应理解为并联
[/b]
 select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b where a.ename=b.ename(+) union select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b where a.ename(+)=b.ename;
[b]笛卡尔联接:[/b]
 select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b;    
[b] 各联接之间的数字关系:左联接+右联接=内联接+全联接[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值