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。
| //使用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,