Oracle创建一个表空间:
create tablespace zastablespace datafile 'filePath' size 200m autoextend on next 10m;
Oracle创建一个用户并授权:
create user zas identified by zas default tablespace zastabspace temporary tablespace temp profile default;其中identified后跟的密码区分大小写
grant connect, resource,dba to zas;
查看空间占用情况
SELECT segment_name AS TABLENAME, BYTES B, BYTES / 1024 KB, BYTES / 1024 / 1024 MB FROM user_segments order by bytes desc
Oracle重复数据删除:
假设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;
删除操作一般为危险操作,在生产环境通过数据库端处理时一定要做好备份工作。
Oracle的连接
两个表或结果集,定义为两个集合A、B,最直接的连接就是笛卡尔积,即AxB。 笛卡尔积是两个集合之间的交叉乘积,记录数为|A|x|B|。
笛卡尔积一般不用,但也是有实际意义的,比如查询本月正常工作日每天有哪些人没有打卡,就可以用(本月工作日)x(人员名单)-(打卡记录)。
更有意义的是笛卡尔积的子集,包括内连接、左联接、右连接、全连接。连接就是将两个表(或结果集)接在一起,成为一个信息更全面的结果集。
以ORACLE 中的SCOTT用户下的表EMP, BONUS为例,将这两个表联接起来:
内联接:实际上应该理解为交联接
select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b where a.ename=b.ename;
--只查两个表中ENAME 一致的数据。
左联接:
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;右联接:
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;完全联接:实际上应理解为并联
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;笛卡尔联接:
select a.*,b.sal b_sal,b.comm b_com from emp a,bonus b;各联接之间的数字关系:左联接+右联接=内联接+全联接