oracle入门学习笔记(三)

2014-11-24 14:18:32 · 作者: · 浏览: 4
工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。

Select ename,sal,dept from emp where sal>all(select sal from emp where deptno=30);

在多行查询中使用any操作符。显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号。
select ename,sal,dept from emp where sal>any(select sal from emp where deptno=30);

多列子查询。查询与smith的部门和岗位完全相同的所有雇员。

Select deptno,job from emp where ename=’smith’;

Select * from emp where (deptno,job)=(select deptno,job from emp where ename =’smith’);

显示高于自己部门平均工资的员工的信息:

(1.查询各部门的平均工资)Select deptno,avg(sal) mysal from emp group by deptno;

(2.将上面的查询看做是一张子表)select a2.ename,a2.sal,a2.deptno from emp a2, (Select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;

在from中使用子查询的时候,该子查询会被当做成一个视图对待,成为内前视图。在from中使用子查询时必须制定别名。

4. 分页查询。例如,按照雇员的id号升序取出。

Oracle分页查询一共有三种:

A.rownum分页:select a1.*, rownum from (select * from emp) a1;

select a1.*, rownum from (select * from emp) a1 where rownum <=10;不能再rownum>=6,oracle规定rn只能用一次。

Select * from (select a1.*, rownum from (select * from emp) a1 where rownum <=10) where rownum>=6;修改查询只需要在里层改动。

B.ROWID:效率很高

C.按照分析函数来分。效率太差。

5.用查询结果创建新表:

Create table mytable(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;

6.合并查询。使用集合操作符union,union,all,intersect,minus。

A.union:取集合的并集

Select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job=’manager’;

B.union all:不取消重复行,不排序

C.intersect:取两个集合的交集。

D.minus:取两个集合的差集。显示前面的不现实后面的。

19. 创建数据库的两种方法:

1.通过oracle提供的向导工具

2.手工步骤直接创建。

20. Java操作oracle。

”);

Out.println(“

”);

Out.println(“

”);

Out.println(“

”);

}

//打印总页数

For(int i=1;i<=pageCount;i++)

{

Out.pirntln(“jsp pageNow=> ”+i+” ”);

}

//使用jdbc_odbc桥连接oracle(使用数据源),不能远程连接。

Public class TestOra

{

Public static void main()

{

//加载驱动

Class.froName(“sun.jdbc.odbc.JdbcOdbcDriver”);

//得到连接,需要配置数据源。假设数据源名为:test

Connection ct = DriverManager.getConnection(

“jdbc:odbc:test”,”scott”,”tiger”);

//

Statement sm=ct.createStatement();

ResultSet rs = sm.executeQuery(“select * from emp”);

While(rs.next())

{

System.out.println(rs.getString(2));//默认从1开始编号

}

Sm.close();

Ct.close();

}

}

//使用jdbc

Public class TestOra

{

Public static void main()

{

//加载驱动

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connection ct = DriverManager.getConnection(

“jdbc:oracle:thin:@localhost:1521:MyDB”,”scott”,”tiger”);

Statement sm=ct.createStatement();

ResultSet rs = sm.executeQuery(“select * from emp”);

While(rs.next())

{

System.out.println(rs.getString(2));//默认从1开始编号

}

Sm.close();

Ct.close();

}

}

//分页查询:

String s_pageNow = (String)request.getParameter(“pageNow”);

If(s_pageNow!=null)

{

pageNow=Integer.parseInt(s_pageNow);

}

Int pageCount=0; //计算值

Int rowCount=0; //共有几条记录

Int pageSize=0; //每页显示几条记录

Result rs = sm.executeQuery(“select count(*) from emp”);

If(rs.next())

{

rowCount=rs.getInt(1);

}

If(rowCount%pageSize==0)

{

pageCount = rowCount/pageSize;

}

Else

{

pageCount = rowCount/pageSize+1;

}

Rs=sm.executeQuery(“elect * from (select a1.*, rownum rn from (select * from emp) a1 where rn <=”+pageNow*pageSize+”) where rn>=”+((pageNow-1)*pageSize+1));

While(rs.next())

{

Out.println(“

”+rs.getString(2)+” ”+rs.getString(2)+”

21. Oracle中操作数据

1.使用to_date函数:to_date(‘1988-04-16’,’yyyy-mm-dd’);

2.使用子查询插入数据:导入emp表中10号部门到新表kkk中。

Insert into kkk (MyID,MyName) select empo,ename,detpno from emp where deptno=10;

3.使用子查询更新数据:更新员工scott的岗位、工资和smith员工一样

Update emp set (job,sal)=(select job,