[b]有用的SQL收集:[/b]
[b]Oracle创建一个表空间:[/b]
[b]Oracle创建一个用户并授权:[/b]
grant connect, resource,dba to zas;
[b]查看空间占用情况[/b]
[b]Oracle重复数据删除:[/b]
假设emp有大量的重复数据,重复条件为:empno相同
通过rowid来删除:
通过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]
--只查两个表中ENAME 一致的数据。
[b]左联接:[/b]
[/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]