集合运算主要有三种方式:
并集,union 两个集合相同的部份只保留一份,不同部份全部保留
union all 两个集合全部保留
交集,intersect 两个集合保留相同的部份
差集,minus A差集B 保留 A中不在B中出现的部份
集合运算的注意事项:
1,参与运算的各个集合必须列数相同,且类型一致!
2,采用第一个集合的表头作为最终使用的表头,(别名也只能在第一个集合上起)
3,可以使用括号(),先执行后面的语句。
使用示例:
select * from emp where deptno=10 union select * from emp where deptno=20;
select *from emp where deptno in(10,30)
minus
select * from emp where deptno in( 20,10);
难题分析,下面是最终执行结果:
分析后,可知道,有三个集合:
各个部门各个工种的工资总额 = 集合1
各个部门的工资总额 = 集合2
工资总额 = 集合3
最后将三个集合取并集:
发现得到上面的错误,这里需要注意集合运算的注意事项
select deptno,job,sum(sal) from emp group by deptno,job union
select deptno,to_char(null),sum(sal) from emp group by deptno union
select to_number(null),to_char(null),sum(sal) from emp ;
在这里,为了达到与题意一样的效果,需要设置报表显示样式:
break on deptno skip 2;
不使用时,记得关闭显示效果:
break on null;
最终结果如下图:
数据处理,SQL语言分类如下:
1,DML,即date manipulation language 数据操作语言,含:insert,update,delete,select
2,DDL,即date definition language 数据定义语言,含:create,alter,truncat
3,DCL,即date control language 数据控制语言,含:grant赋权,revoke回收权限
insert插入语句:
语法 : insert into tablename[(col1,col2,…)] values(val1,val2,…)|查询结果集;
比如:
//隐式插入null
insert into dept(deptno,dname) values(60,'60name');
//显示插入null
insert into dept values(70,'70name',null);
还可以使用地址符号 &
可以继续使用 / 调用上次使用的语句,继续输入值插入数据,非常方便 !
批量插入数据:
//创建表,并复制表结构:
create table emp10 as select * from emp where 1 = 2;
//一次性插入10号部门的员工
insert into emp10 select * from emp where deptno =10;
update 修改数据,语法:
update tablename set col1=val1,col2=val2… where cond..;
例子如下:
update dept set loc='60loc' where deptno = 60;
//注意,同样可以使用&取址符号,对所有DML语句都通用。
delete 删除数据,与update一样
这里需要注意,delete删除数据是逐条删除,而truncate是先摧毁表,再重建,将数据全部清除
truncate table emp10;
当数据量较大的时候,建议使用truncate
delete与turncate的区别:
1,delete逐条删除,truncate推毁表重建
2,Delete不会释放空间,truncate会释放
3,delete 可以rollback,truncate不能回滚
最后补充一点:
语句执行时间记录开关:
set timing on/off
回显开关:
set feedback on/off