Oracle学习笔记4 稍复杂的查询和分页
仍然使用SCOTT用户来操作:
1、 显示工资比部门30的所有员工的工资都高的员工的信息:
Select * from emp where sal>all(select sal from emp where deptno=30);
2、 显示工资比部门30的任意一个员工的工资高就可以的员工的信息:
Select * from emp where sal>any(select sal from emp where deptno=30);
其实,换种方法也是可以的:
Select * from emp where sal>(select min(sal) from emp where deptno=30);
3、 找出和SMITH的部门号、工作都相同的员工的信息:
Select * from emp where (deptno,job)=(Select deptno,job from emp where ename=’SMITH’);
4、 如何显示高于自己部门平均工资的员工的信息
解决这个复杂一点的查询,我们可以这样考虑:
先找出每个部门的平均工资:
Select deptno,avg(sal) avg_sal from emp group by deptno;结果如下:
SQL> select deptno,avg(sal) avg_sal from emp group by deptno;
DEPTNO AVG_SAL
------ ----------
30 1566.66666
20 2175
10 2916.66666
然后我们就可以把这张表当成一张子表使用:
select a2.ename,a2.sal,a2.deptno,a1.avg_sal from emp a2,(select deptno,avg(sal) avg_sal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.avg_sal;
结果为:
ENAME SAL DEPTNO AVG_SAL
---------- --------- ------ ----------
ALLEN 1600.00 30 1566.66666
JONES 2975.00 20 2175
BLAKE 2850.00 30 1566.66666
SCOTT 3000.00 20 2175
K
相关文档:
PL/SQL是对Oracle数据库进行操作的一种过程性编程语言,它可以在SQL * plus中执行,也可以嵌入到JAVA或者C++中。其基本组成为:
DECLARE
...
BEGIN
...
EXCEPTION
...
END
可用来将对数据库的各种操作封装为一个代码块,为了加强可重用性,还可将重复性代码写成函数与存储过程,� ......
1.Oracle为客户端开启会话有两种方式:共享服务和专用服务。在专用服务情况下,监听器为连接请求创建新进程(Unix环境下是Process,Windows下我想应该是Thread吧);共享服务情况下,监听器将客户请求交给Dispatcher,由Dispatcher安排多客户的作业。SQL Server在默认情况下自动为客户端连接创建线程,当有非常多的客 ......
先建了张测试表
SQL> select * from test_a;
ID PLAYNAME SCORE
-------------------- --- ......
未实验
ORACLE数据库自带的DBMS_JOB功能可以实现定时执行PL/SQL的存储过程,但是如果SQL语句很复杂,
SQL语句很多,以及经常要改变SQL语句的写法,用写PL/SQL存储过程的方法再定时执行会比较繁琐。何
况还有一些UNIX系统管理员不会写PL/SQL存储过程,所以我介� ......
一.Oracle数据库中常用的数据类型
varchar2(长度)可变长字符串
char(长度) 定长
number()表示整数或者浮点数number(8) number(8,2)
clog 字符的大对象
blog 二进制的大对象
二.数据库查询
1)SELECT语句
从表中提取查询数据.语法为SELECT [DISTINCT] {column1,column2,…} from tablename WHERE {con ......