oracle笔记6 子查询 分页 order by group any

select * from global_name;(查询数据库全名)
select * from v$database;


修改文件edit文件名 commit提交即保存
恢复删掉的emp表 flashback table emp to before drop;

nvl(a,b)判断a是否为null是的话返回b的值 不是的话返回a的值
数字类型的连接用a+nvl(b,0)+nvl(c,0); 字符型的连接 a||b;

order by
select name,(sal+nvl(jiangjin,0)) as “年薪” from emp order by “年薪”;
order by xxx nulls first 空值排最前面
order by xxx nulls last 空值排最后面
对于汉字
select userenv('language') from dual; 查询当前数据库的语言
select * from htp order by nlssort(HTP_1 ,'NLS_SORT=SCHINESE_PINYIN_M'); 使用nlssort强制按照拼音排序
select * from htp order by nlssort(htp_1,'NLS_SORT=SCHINESE_RADICAL_M');强制按照“部首”(第一顺序)和“笔画数”(第二顺序)排序的方法
select * from htp order by nlssort(htp_1,'NLS_SORT=SCHINESE_STROKE_M');按照“笔画数”(第一顺序)和“部首”(第二顺序)排序的方法

max min avg sum(求和) count(求总数)
1查询最大工资和最小工资分别是谁 select ename,sal from emp where sal=(select max(sal) from emp) or sal= (select min(sal) from emp); or是或的关系 and是且的关系
2 查工资大于平均工资的人的总人数 select count(ename) from emp where sal> (select avg(sal) from emp);
3.修改入职年份小于1982工资小于平均工资的人的工资提高2倍update emp set sal=sal*2 where hiredate4 group by 字段可以与函数分组在一起 select avg(sal),max(sal),deptno,job from emp group by deptno,job; 因为deptno和job没有函数 才分组
5 having 就相当于where 用group by时当判断用 先group by 再 having 再order by
6 group by与over区别 over 是分析函数 group是分组 over不用对非聚合函数都分组比较方便 over就是聚合函数和分析函数的区别所在

多表查询的查询条件至少要不小于(表数-1) 如果没条件限制 查询条数为 a表行数*b表行数条数据
必须学会给表起别名 分成一块一块的(后面直接写上你想起的名字就好了 别名)

分页查询三种
1.rownum 是oracle给它自动分的一个编号
select a1.*,rownum rn from (select * from emp) a1; a1是它的别名 a1.*是查询别名为a1这个表的所有 不能写* rn是rownum的别名
分配的编号在4-10之间的人的所有信息 select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<10) where rn>4; 把大于10的这个大语句看成一张新(rownum<10写大于10就一个也查不到)如果不想查所有信息 把想查的信息写在最里面的select查询中即可(select ename,job from emp) 排序和其它操作也都写在最里面那个即可

注意:给表起别名的时候不用as 但是给列取别名
查询工资的等级 select

a1.ename,a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.losal and a2.hisal; between and是在什么什么之间
一张表中查询某个人的老板是谁 可以看成是两张表 select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno;
查询SMITH这个人的部门的所有人 select ename from emp where deptno=(select deptno from emp where ename='SMITH');
查询和部门10的工作相同的雇员的名字、岗位、工资 select distinct ename,job,sal from emp where job in (select job from emp where deptno=10); distinct清除重复的部门 注意子查询书输出多行不能用等号 要用in
查询大于30号部门的最高工资的所有人select ename,sal from emp where sal> all (select sal from emp where deptno=30);
或者 select ename,sal from emp where sal>(select max(sal) from emp deptno=30);
查询大于30号部门任意一个人工资的人(大于最小值)select ename,sal from emp where sal> any (select sal from emp where deptno=30);
查询每个部门高于自己部门平均工资的人的姓名,工资,部门号,以及它部门的平均工资
select a1.ename,a1.sal,a1.deptno,a2.a3 from emp a1,(select avg(sal) a3,deptno from emp group by deptno) a2 where a1.deptno=a2.deptno and a1.sal>a2.a3;
select count(*) from emp;查询所有数据的条数
创建一张格式一样的表 数据也有create table dept2 as select * from dept;
delete emp 值删除表中内容表仍然存在 drop table emp 删除表结构
去除一些重复的数据 select * from sal>2500 union select * from job='MANAGER';
把所有记录拼接起来 不删除 select * from sal>2500 union all select * from job='MANAGER';
取两个集合的交集 select * from sal>2500 intersect select * from job='MANAGER';
minus差集 select * from sal>2500 minus select * from job='MANAGER';包含A不包含B




相关文档
最新文档