Oracle学习笔记20150822分页查询sql语句分类和集合运算

来源:互联网 发布:linux系统命令 编辑:程序博客网 时间:2024/05/21 16:22
 分页查询
 MySQL中 select * from 表名 where 条件 limit 从第几条取,取几条.
 sql server中select top 1 * from 表名 where id not in(select top 4 id from 表名 where 条件);作用是排除4条取四条,就是取出了5到8条. 
 Oracle中是三层过滤机制效率极高
 例如select t2.* from (select t1.*,rownum rn from (select * from emp) t1 where rownum<=6) t2 where rn>=4;这个方法在百万级别都可以及时响应.
 测试分页查询效率
 模拟一个10w的表
 (1)create table mytest as select empnno,ename,sal,comm,deptno from emp;
 (2)自我复制insert into mytest (empno,ename,sal,comm,deptno) select empno,ename,sal,comm,deptno from mytest;(执行14次)
 如果我们需要针对不同情况分页包括多表我们都在第一层处理(最内层).
 20150818
 (3)合并查询
    union用于取两个结果集的并集,当使用该操作符时会自动去掉结果集中重复行.
    select ename,sal,job from emp where sal>2500 union
    select ename,sal,job from emp where job='MANAGER';
 (4)union all 只是单纯的将两个结果集相加不去除重复行也不排序2015/8/18.
 select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where job='MANAGER';
 (5)intersect 取两个结果的交集.
*(6)minus 差集只显示第一个结果集减去与第二个结果集交集的部分.
 (7)cube用法 select avg(sal),deptno,job from emp group by cube(deptno,job);显示按deptno分组,再显示按job分组,最后显示按deptno和job分组.
 (8)Oracle表的内连接和外连接.
 内连接就是利用where子句对两张表形成的笛卡尔集进行筛选,例如显示雇员信息和部门名称select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;特殊写法select emp.ename,dept.dname from emp inner join dept on emp.deptno=dept.deptno;
 创建两张表
 create table stu(id number,name varchar2(32));
 insert into stu values(1,'jack');
 insert into stu values(2,'tom');
 insert into stu values(3,'kity');
 insert into stu values(4,'none');
 create table exam(id number,grade number);
 insert into stu values(1,56); 
 insert into stu values(2,76);
 insert into stu values(11,80);
 内连接的特点是只有两张表都匹配这个条件才会被选中.
 使用左外连让成绩为空的学生也显示出来.
 select stu.name,stu.id,exam.grade from stu left join exam on stu.id=exam.id;等同于select stu.name,stu.id,exam.grade from stu, exam where stu.id=exam.id(+);
 入股左表的记录没有和exam记录匹配也要被选中.
 右外连同理
 select stu.name,stu.id,exam.grade from stu right join exam on stu.id=exam.id;等同于select stu.name,stu.id,exam.grade from stu, exam where stu.id(+)=exam.id;
 完全外连不管匹不匹配都显示两张表全部内容,没有就显示空.
 select stu.name,stu.id,exam.grade from stu full outer join exam on stu id=exam.id;
 ***一不小心我们就迎来了这个万众期待的用java代码实现对oracle的操作.
 sql语句分类
 dml语句(数据操作语句)[insert,update,delete]
 ddl语句(数据定义语句)[create table,drop table]
 dql语句(数据查询语句)[select]
 dtl语句(数据控制语句)[commit,rollback]
0 0