oracle查询锁表语句不对称查询语句,该怎么解决

Oracle子查询语句
子查询语句
就是在一个select语句中套了另一个子查询语句:
在emp中工资最高的人的名字:
SQL&select ename ,sal from emp where sal=(select max(sal) from emp);
工资高于平均工资的人:
SQL&select ename,sal from where sal&(select avg(sal) from emp);
查询每个部门中工资最高的人:
SQL&select ename,sal from emp&
join (select max(sal) max_sal,deptno from emp group by deptno) t
on(emp.sal = t.max_sal and emp.deptno = t.deptno);
查询部门的平均工资:
SQL&select &avg(sal),deptno from
查询雇员编号,和姓名以及雇员的经理:
SQL&select empno,ename,
查询每一个雇员的经理是谁:
SQL&select e1.ename ,e2.ename from emp e1 ,emp e2 &where e1.mgr = e2.
对于雇员的工资进行等级划分:
SQL&select ename ,dname,grade from emp e,dept d,salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal and job&&'CLERK';
部门平均薪水的等级:
SQL&select deptno ,avg_sal,grade from,
(select deptno ,avg(sal) avg_sal from emp group by deptno )t
join salgrade s on (t.avg_sal between s.losal and s.hisal);
部门平均的薪水等级:
SQL&select avg(grade) from&
(select deptno ,ename,grade from emp join salgrade s
on (emp.sal between s.losal and s.hisal))
SQL&select deptno,avg(grade) from&
(select deptno,ename,grade from emp join salgrade) s
on (emp.sal between s.losal and s.hisal))
雇员中那些人是经理人:
SQL&select ename from emp where empno in(select mgr from emp);
不准用组函数,求薪水的最高值:
(这个是中没有最大值:)
SQL&select distinct e1.sal from emp e1 join emp e2
on(e1.sal & e2.sal);
(除去没有最大值的就是最大值)
SQL&select distinct sal from emp where sal not in(select distinct e1.sal from emp e1 join emp e2)
on(e1.sal &e2.sal&);
求平均薪水最高的部门的部门编号:
求出每一个部门的平均工资:
SQL&select deptno,avg(sal) from
求出所有部门中平均工资最高的:
SQL&select max(sal_avg) from&
(select avg(sal) sal_avg ,deptno from emp group by deptno);
求出平均最高工资的部门号:
SQL&select deptno,avg_sal from&
(select avg(sal) avg_sal,deptno from emp &group by deptno)
where avg_sal =(select max(avg_sal) from
& (select avg(sal) avg_sal,deptno from emp group by deptno));
求出最高平均工资的部门名称:
SQL&select dname from dept where deptno=
select deptno from
(select avg(sal)avg_sal,deptno from emp group by deptno)
where avg_sal =
(select max(avg_sal) from
(select avg(sal) avg_sal,deptno from emp group by deptno)));
求出平均薪水的等级最低的部门的名称:
求出了每个部门的平均薪水:
SQL&select deptno,grade,avg_sal from&
(select deptno,avg(sal)avg_sal from emp group by deptno) t
join salgrade s on(t.avg_sal between s.losal and s.hisal);
求出了最低薪水的部门:
SQL&select min(grade) from
select deptno,grade,avg_sal from
(select deptno,avg(sal) avg_sal from emp group by deptno)t
join salgrade s on(t.avg_sal between s.losal and s.hisal)
求出平均薪水的等级最低的部门的名称:
创建视图可以简化这个过程:
部门经理人中平均薪水最低的部门
比普通员工的最高薪水还要高的经理人名称:
(求出普通员工中的最高工资)
select &max(sal) from emp &where empno not in&
& & (select distinct mgr from emp where mgr is &not null);
select ename from emp&
& & where empno in(select distinct mgr from emp where mgr is not null)
& & select &max(sal) from emp &where empno not &in&
& & &(select distinct mgr from emp where mgr is &not null)
&面试题:比较这两个语句的效率:
select * from emp where deptno = 10 and ename like '%A%';
select * from emp where ename like '%A%' and deptno=10;
第一个效率会高点(通过数字就可以排除很多项);
薪水最高的前五名雇员:
select empno,
rownum :相当于每一行的行号:只能和小于和小于等于一起使用;不能和大于或等于使用:
select empno,ename from emp where rownum&5;
select empno.ename from emp where rownum&=5;
(查询大于行号大于10的)
select rownum r,
select ename from (select rownum r,ename from emp) where r&10;
(查询工资最高的人,按倒序排列)
select ename,sal from e
select ename,sal from&
(select ename,sal from emp order by sal desc )where rownum &=5;
薪水最高的第六个人到第十个人:
(查看rownum)
select ename ,sal ,rownum r from e
(对rownum 进行排序)
select ename ,sal ,rownum r from (select ename,sal from emp order by sal desc);
select ename,sal from(select ename ,sal ,rownum r from (select ename,sal from emp order by sal desc));2011年3月 Oracle大版内专家分月排行榜第二2011年2月 Oracle大版内专家分月排行榜第二
2010年10月 Oracle大版内专家分月排行榜第三
2010年7月 Oracle大版内专家分月排行榜第二2010年3月 Oracle大版内专家分月排行榜第二
2010年6月 Oracle大版内专家分月排行榜第三
2011年4月 Oracle大版内专家分月排行榜第二
2011年2月 Oracle大版内专家分月排行榜第三2010年11月 Oracle大版内专家分月排行榜第三
2010年9月 Oracle大版内专家分月排行榜第二
2011年4月 Oracle大版内专家分月排行榜第三2011年3月 Oracle大版内专家分月排行榜第三2011年1月 Oracle大版内专家分月排行榜第三
2010年9月 Oracle大版内专家分月排行榜第三2010年7月 Oracle大版内专家分月排行榜第三
2011年4月 Oracle大版内专家分月排行榜第二
2011年2月 Oracle大版内专家分月排行榜第三2010年11月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Oracle 中的条件查询语句及函数(实例说明) -
- ITeye技术网站
博客分类:
Oracle 中的条件查询语句及函数(实例说明)
Oracle 中的函数
Sql--plus函数:
字符串函数是oracle使用最广泛的一种函数.
? LOWER:小写
? UPPER:大写
? INITCAP:首字母大写
? CONCAT:连接
? SUBSTR:截取
(参数,开始,数目)
? LENGTH:返回字符串的长度
? INSTR:(参数,字母) 返回字母出现的位置
? LPAD:(参数,长度,在前补齐参数字母)
? |RPAD:(参数,长度,在后补齐参数字母)
? REPLACE:(参数,参数[,参数]):第一个参数操作数,第二是要查找的字符,第三个是替换的字符,如果没有第三个就删除查找的字符。
//查询名称为的员工信息 (不区分大小写)
SQL& select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
where lower(ename)='scott';
SQL& select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
where upper(ename)='SCOTT';
//查询员工信息 把员工名称与工作连接在一起
SQL& select empno,concat(ename,job),mgr,hiredate,sal,comm,
//查询员工信息 把员工名称与工作连接在一起
SQL& select empno,concat(ename||'is work:',job),mgr,hiredate,sal,comm,
//查询员工名称中含有字符的位置
SQL& select empno,instr(ename,'O'),job,mgr,hiredate,sal,comm,
//查询员工名称中含有字符的位置并且求出了员工名称字符长度
SQL& select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,
//在查询上面结果中过滤出员工工作从第三字母开始为员工信息
SQL& select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3)='ERK';
备注:当含有两个参数的时候,从开始位置直接到参数结束的结束为止
//在效果同上的同时指明了截取个数为
SQL& select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3,3)='ERK';
//查询员工信息
薪资是位位数不够在左部分补填充
SQL& select empno,ename,job,mgr,hiredate,LPAD(sal,10,'*'),comm,
//查询员工信息
薪资是位位数不够在右部分补填充
SQL& select empno,ename,job,mgr,hiredate,RPAD(sal,10,'*'),comm,
//查询员工信息
把员工名称中含有字符去除掉
SQL& select empno,TRIM('S' from ename),job,mgr,hiredate,10,comm,
SQL& select empno,TRIM( both 'S' from ename),job,mgr,hiredate,10,comm,
//查询员工信息
把员工名称中前面有字符去除掉
SQL& select empno,TRIM( Leading 'S' from ename),job,mgr,hiredate,10,comm,
SQL& select empno,LTRIM( ename,'S'),job,mgr,hiredate,10,comm,
//查询员工信息
把员工名称中后面有字符去除掉
SQL& select empno,TRIM( trailing 'S' from ename),job,mgr,hiredate,10,comm,
SQL& select empno,RTRIM( ename,'S'),job,mgr,hiredate,10,comm,
数字函数:
? ROUND: 四舍五入
ROUND(45.926, 2) 45.93
TRUNC(45.926, 2) 45.92
? MOD: 求余
? ABS:绝对值
? CEIL:返回大于或等于value的最小整数
? FLOOR:返回小于或等于value的最大整数
? SQRT :返回value的平方根 负数无意义。
//四舍五入 结果为
SQL& select round(45.56)
//绝对值 结果为
SQL& select abs(-45.56)
//大于等于最小整数 结果为
SQL& select ceil(-45.56)
//小于等于最大整数 结果为
SQL& select floor(-45.56)
//求余数 结果为
SQL& select mod() from dual
//截取的数的操作数是正数的情况下:只操作小数位
SQL& select trunc(,2)
//截取的数的操作数是负数的情况下:操作的是小数点之前的位把操作位小数点之前的位数全部改写成结果就是
SQL& select trunc(,-3)
日期时间函数
? Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.日期时间函数用来返回当前系统的日期和时间、以及对日期和时间类型的数据进行处理运算。
? add_months(date,count);在指定的日期上增加count个月
? last_day(date);返回日期date所在月的最后一天
? months_between(date1,dates);返回date1到date2之间间隔多少个月
? new_time(date,this’,’other’);将时间date从this时区转换成other时区
? next_day(day,’day’);返回指定日期或最后一的第一个星期几的日期,这里day为星期几
? sysdate();获取系统的当前日期
? current_timestamp();获取当前的时间和日期值
? round:日期的四舍五入
? trunc 日期的截取
日期的数学运算:
l 在日期上加上或减去一个数字结果仍为日期。
l 两个日期相减返回日期之间相差的天数。
l 可以用数字除24来向日期中加上或减去小时。
//获取系统的当前时间 显示的格式采用默认格式 显示结果:07-4月 -11 11.15.38.390000 上午 +08:00
SQL& select current_
//获取系统的当前日期值
显示结果: 11
//为当前日期加上个月 显示的结果:2011-7-7 11:18:36
select add_months(sysdate,3)
//返回当前月的最后一天 显示的结果: 11:19:4
select last_day(sysdate)
//返回两个日期之间的间隔月是几: 结果为:
SQL& select months_between(add_months(sysdate,4),sysdate)
//从时区转换成时区的日期结果
SQL& select new_time(sysdate,'GMT','AST')
//返回下一个星期一的日期值
必须写成星期几
SQL& select next_day(sysdate,'星期一')
转换函数:
隐式转换:在运算过程中由系统自动完成的
显式转换:在运算过程中需要调用相应的转换函数实现。
隐式转换:是oracle自己装换的形式,在这里不做研究
to_char(date,’format’):按照指定的格式format把数字或日期类型的数据转换成字符串
必须包含在单引号中而且大小写敏感。
可以包含任意的有效的日期格式。
日期之间用逗号隔开。
//把当前日期转换成的格式
SQL& select to_char(current_timestamp,'YYYY/MM/DD')
//把当前日期转换成YYYY/MM/DD HH24/MI/SS AM的格式
SQL& select to_char(current_timestamp,'YYYY/MM/DD HH24/MI/SS AM')
//DD “of” MONTH
SQL& select to_char(current_timestamp,'YYYY DD "of" MONTH
HH/MI/SS AM')
//把当数字按照这种方式返回字符串
并且操作数的位数不能够大于即后边的位数位否则话结果会是
SQL& select to_char(11111,'$99,999')
to_number(char);把包含了数字格式的字符串转换成数字数据
to_date(string,’format’);按照指定格式的format把字符串转换成日期数据,如果省略了foramt格式,那么就采用默认的日期格式(DD-MON-YY);
//把当前字符串转换成日期
SQL& select to_date('','YYYY-MM-DD')
//求出两个日期之间相差的天数
SQL& select to_date('','YYYY-MM-DD')-to_date('','YYYY-MM-DD')
//求出两个日期之间相差的周次
SQL& select (to_date('','YYYY-MM-DD')-to_date('','YYYY-MM-DD'))/7
//对周次进行向上取整
SQL& select ceil((to_date('','YYYY-MM-DD')-to_date('','YYYY-MM-DD'))/7)
chartorowid(char);把字符串转换成rowid类型
rowidtochar(x);把rowid类型转换成字符类型数据
这些函数适用于任何数据类型,同时也适用于空值:
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
将空值转换成一个已知的值: fon
javawangli
浏览: 135784 次
来自: 北京
这个只能正对数据量少的批量打印,当你打印10000张数据的时候 ...
官网的文档明确说明 是五种 你的默认和no应该是同一种
图片上传的东西呢?
地址不对了
在数据库配置里面增加字符编码就可以了。characterEnc ...}

我要回帖

更多关于 oracle 查询死锁语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信