22-Oracle入门之总结
重要知识点:
基本语法 select a,b,cfrom tab1,tab2 where col = 10 where col > 10 where col between 1000 and 2000 where col in (10,20,null) wehre col not in (10,null) order by col1 asc,col desc order by 别名 表达 3 order by nulls last group by a,c having .... 字符串-->数字 select '111' + 222 from dual ; ===>333 数字--->字符串 select '111' || 222 from dual ; ===> 111222 字符串-->日期 日期--->字符串 select * from emp where to_char(hiredate,'yyyy-mm-dd') > '1981-01-01' select * from emp where hiredate > to_date('1981-01-01','yyyy-mm-dd' ) ; select * from emp where hiredate > '1-1月 -81' --查询员工的薪水:两位小数 本地货币代码 千位符 select ename,to_char(sal,'L9,999.99') from emp ; ¥1,600.00 select to_number('¥1,600.00 ',999.99') from dual -----外连接 eg:按部门统计员工人数: 部门号 部门名称 各部门人数 1 10 20 30 分组 2 多表 3 count() 组函数 步骤1 select d.deptno,d.dname,count(e.empno) from dept d,emp e where d.deptno = e.deptno group by d.deptno,d.dname 步骤2 select d.deptno,emp e where e.deptno (+) = d.deptno group by d.deptno,d.dname order by 1
常见操作
1 求所有部门的平均奖金
常见面试题:
1 select empno,sal from emp order by sal desc 2 select rownum,empno,sal from emp ROWNUM EMPNO ENAME SAL ---------- ---------- ---------- ---------- 1 7369 SMITH 800 2 7499 ALLEN 1600 3 7521 WARD 1250 4 7566 JONES 2975 5 7654 MARTIN 1250 6 7698 BLAKE 2850 7 7782 CLARK 2450 8 7788 SCOTT 3000 9 7839 KING 5000 10 7844 TURNER 1500 11 7876 ADAMS 1100 12 7900 JAMES 950 13 7902 FORD 3000 14 7934 MILLER 1300 已选择14行。 select rownum,sal from emp order by sal desc select rownum,sal from emp where rownum <= 3 order by sal desc oracle的ROWNUM机制 1 ROWNUM就是这么设计 rownum是属于服务器返回的结果集的固有属性 2 where rownum<=3 不能使用 where rownum>=3 生成结果集是1行1行的生成的. 没有第1行 就没有第2行 没有第2行 就没有第3行 没有第3行 就没有第4行 =====>Top-N select * from (select empno,sal from emp order by sal desc) / select rownum,sal from (select empno,sal from emp order by sal desc) where rownum<=3 =======分页问题 1 select rownum,sal from emp order by sal desc) where rownum>=5 and rownum<=8 select r,sal from ( select rownum r,sal from emp order by sal desc) where rownum<=8 ) where r>=5 解决分页的思路 总的原则: 内层:排序 外层选... (内层排序 外层选,需要三层查询) 内:排序。 中:使用rownum选择前n条;并给rownum指定一个别名,以供最外层过滤使用。 外:去掉前m条结果。 查找 员工表中 薪水 大于 本部门平均薪水 的员工。 第一种方法 多表查询 分析1 10 20 30 要分组 select deptno,avg(sal) avgsal from emp group by deptno 分析2 可以把部门平均薪水的数据 看成一个表 多表查询 分析3 组函数 分析4 连接条件 分析5 别名 select e.empno,d.avgsal from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and e.sal > d.avgsal 第二种方法 相关子查询 子查询分为2种 一般子查询 相关子查询 找到员工表中 薪水 大于 本部门平均薪水 的员工。 1 select empno,sal,(员工所在部门的平均工资) avgsal from emp where sal > (员工所在部门的平均工资) avgsal 员工所在部门的平均工资==> select avg(sal) avgsal from emp where deptno = 10 2 select e.empno,( select avg(sal) avgsal from emp where deptno = e.deptno) avgsal from emp e where sal > (select avg(sal) avgsal from emp where deptno = e.deptno ) ===总结 主查询 通过别名 把主查询的值 传递给 子查询 .. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |