分页查询
按雇员的id号升序取出
oracle的分页一共有三种方式 .根据rowid来分
  select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_xiaoxi order by cid desc) where rownum<) where rn>) order by cid desc;
执行时间0.03秒
.按分析函数来分
  select * from (select t.*, row_number() over(order by cid desc) rk from t_xiaoxi t) where rk< and rk>;
执行时间1.01秒
.按rownum来分
  select * from (select t.*,rownum rn from(select * from t_xiaoxi order by cid desc)t where rownum<) where rn>;
执行时间0.1秒 其中t_xiaoxi为表名称,cid为表的关键字段,取按cid降序排序后的第9981-9999条记录,t_xiaoxi表有70000多条记录。
个人感觉1的效率最好,3次之,2最差。 //测试通过的分页查询okokok
select * from (select a1.*, rownum rn from(select ename,job from emp) a1 where rownum<=)where rn>=; 下面最主要介绍第三种:按rownum来分
. rownum 分页
   SELECT * FROM emp;   
 . 显示rownum[oracle分配的]
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e;
(SELECT * FROM emp) e中的(SELECT * FROM emp) 当成内嵌视图,取了一个别名叫e,
e.*表示把后面子查询的信息在重新取出来,
 ROWNUM rn相当于Oracle分配的每行的ID号
.挑选出6—10条记录
先查出1-10条记录
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= ;
如果后面加上rownum>=6是不行的,
. 然后查出6-10条记录
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= ) WHERE rn >= ;
. 几个查询变化
a. 指定查询列,只需要修改最里层的子查询(SELECT * FROM emp)
只查询雇员的编号和工资
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= ) WHERE rn >= ;
b. 排序查询,只需要修改最里层的子查询(SELECT * FROM emp)
工资排序后查询6-10条数据
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp ORDER by sal) e WHERE ROWNUM <= ) WHERE rn >= ;
用查询结果创建新表
这个命令是一种快捷的建表方式
CREATE TABLE mytable (id, name, sal, job, deptno) as SELECT empno, ename, sal, job, deptno FROM emp;
创建好之后,desc mytable;和select * from mytable;看看结果如何? 合并查询
合并查询
有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,union all,intersect,minus
多用于数据量比较大的数据局库,运行速度快。
). union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。
SELECT ename, sal, job FROM emp WHERE sal >
UNION
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
).union all
该操作符与union相似,但是它不会取消重复行,而且不会排序。
SELECT ename, sal, job FROM emp WHERE sal >
UNION ALL
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。
). intersect
  使用该操作符用于取得两个结果集的交集。
SELECT ename, sal, job FROM emp WHERE sal >
INTERSECT
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
). minus
使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。
SELECT ename, sal, job FROM emp WHERE sal >
MINUS
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
(MINUS就是减法的意思)

创建数据库有两种方法: 
1). 通过oracle提供的向导工具。√ 
   database Configuration Assistant  【数据库配置助手】 
2).我们可以用手工步骤直接创建。

七:java操作oracle

java连接oracle 
 介绍:前面我们一直在plsql中操作oracle,那么如何在java 程序中操作数据库呢? 下面我们举例说明,写一个java,分页显示emp表的用户信息。

Java代码

  1. package com.sp;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. //演示  如何使用 jdbc_odbc桥连接方式
  7. public class TestOracle {
  8. public static void main(String[] args) {
  9. try {
  10. // 1.加载驱动
  11. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  12. // 2.得到连接
  13. Connection ct = DriverManager.getConnection(
  14. "jdbc.odbc:testConnectOracle", "scott",
  15. "tiger");
  16. // 从下面开始,和SQL Server一模一样
  17. Statement sm = ct.createStatement();
  18. ResultSet rs = sm.executeQuery("select * from emp");
  19. while (rs.next()) {
  20. //用户名
  21. System.out.println("用户名: "+rs.getString(2));
  22. //默认是从1开始编号的
  23. }
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }

package com.sp;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

//演示  如何使用 jdbc_odbc桥连接方式

public class TestOracle {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection(

"jdbc.odbc:testConnectOracle", "scott",

"tiger");

// 从下面开始,和SQL Server一模一样

Statement sm = ct.createStatement();

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

while (rs.next()) {

//用户名

System.out.println("用户名: "+rs.getString(2));

//默认是从1开始编号的

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

在得到连接那里,要去配置数据源,点击控制面板-->系统和安全-->管理工具-->数据源(ODBC),打开后点添加,如图:

可以看到,有个Oracle in OraDb10g_home1的驱动,它是Oracle安装完后自动加上去的。 选中后,点完成,再填如下信息,如图:

这样配好后基本就可以了,但为了安全起见,建议大家测试一下,点击 Test Connection按钮, 测试通过后点ok,然后数据源就生成了,如图:

然后把数据源名称写进jdbc.odbc:里。

这里要注意:jdbcodbc能不能远程连接呢?不能远程连接,也就是你这样写的话就意味着java程序和oracle数据库应该是在同一台机器上,因为这里没有指定IP地址,肯定默认就是本地。如果要远程连,就用jdbc,jdbc是可以远程连的。

运行TestOracle.java,控制台输出.......................

可惜我没运行成功,说

java.sql.SQLException: No suitable driver found for jdbc.odbc:testConnectOracle 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at com.sp.TestOracle.main(TestOracle.java:18) 
不知道为什么。。。

接下来讲解用JDBC的方式连接Oracle

Java代码

  1. package com.sp;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. //使用 jdbc连接oracle
  7. public class TestOracle2 {
  8. public static void main(String[] args) {
  9. try {
  10. // 1.加载驱动
  11. Class.forName("oracle.jdbc.driver.OracleDriver");
  12. // 2.得到连接
  13. Connection ct = DriverManager.getConnection
  14. ("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
  15. // 从下面开始,和SQL Server一模一样
  16. Statement sm = ct.createStatement();
  17. ResultSet rs = sm.executeQuery("select * from emp");
  18. while (rs.next()) {
  19. //用户名
  20. System.out.println("用户名: "+rs.getString(2));
  21. //默认是从1开始编号的
  22. }
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. }

package com.sp;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

//使用 jdbc连接oracle

public class TestOracle2 {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection

("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");

// 从下面开始,和SQL Server一模一样

Statement sm = ct.createStatement();

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

while (rs.next()) {

//用户名

System.out.println("用户名: "+rs.getString(2));

//默认是从1开始编号的

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

记得要把驱动包引入,classes12.jar 
运行,。。。。 再次可惜,我还是没运行成功,错误是: 
java.sql.SQLException: Io 异常: The Network Adapter could not establish the

connection 
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) 
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) 
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334) 
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:418) 
at oracle.jdbc.driver.OracleDriver.getConnectionInstance

(OracleDriver.java:521) 
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:325) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at com.sp.TestOracle2.main(TestOracle2.java:18) 
我也不知道为什么。。。 幽怨了。。

接下来建个web project,来测试oracle的分页,挺麻烦,不记录了。。

在oracle中操作数据 - 使用特定格式插入日期值 
 使用 to_date函数n 
请大家思考: 如何插入列带有日期的表,并按照年-月-日的格式插入? 
insert into emp values  (9998,  'xiaohong',  'MANAGER',  7782,  to_date('1988-12-

12', 'yyyy-mm-dd'),  78.9,  55.33,  10);

注意: 
insert into emp values  (9998,  'xiaohong',  'MANAGER',  7782,  '12-12月-1988',

78.9,  55.33,  10); 
这句语句是可以成功运行的

使用子查询插入数据 
 介绍n 
当使用valus子句时,一次只能插入一行数据,当使用子查询插入数据时,一条inset语句可以插

入大量的数据。当处理行迁移或者装载外部表的数据到数据库时,可以使用子查询来插入数据。 
把emp表中10号部门的数据导入到新表中 
create table kkk(myId number(4), myName varchar2(50), myDept number(5));

update emp set job=(select job from emp where ename='SMITH') where ename='SCOTT';

update emp set sal=(select sal from emp where ename='SMITH') where ename='SCOTT';

insert into kkk (myId, myName, myDept)  select empno, ename, deptno from emp where

deptno = 10;

介绍n 
使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改

数据。 
问题:希望员工SCOTT的岗位、工资、补助与SMITH员工一样。 
update emp set(job, sal, comm)=(select job, sal, comm from emp where ename='SMITH') where ename='SCOTT';

oracle4的更多相关文章

  1. Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器

    初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在  笔记 在pl/sql中可以继续使用的sql关键字有:update del ...

  2. kvm

    硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...

  3. oracle组件

    目前在用的四个oracle版本 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Parti ...

  4. linux服务之ssh

    架构:c/s 开发语言:c语言 服务器端:在linux平台下部署 客户端:一般是cli界面下的ssh命令 官网:http://www.openssh.com/portable.html 25个必须记住 ...

  5. linux服务之svn

    架构:c/s 开发语言:python 服务器端:在linux平台下部署 客户端:分gui与cli两种操作界面 相关包: http://blog.sina.com.cn/s/blog_53b95aec0 ...

  6. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

  7. sudo的使用和配置

    1 sudo是什么 Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像 ...

  8. oracle故障解决

    修改了字符集,修改错了,然后不能启动 alter system set nls_language='AMERICA'; shutdown immediate; startup 报错 [oracle@o ...

  9. Atitit.常用分区api的attilax总结

    Atitit.常用分区api的attilax总结 1. Api 来源与oracle与mysql1 1.1. 分区定义partition by range (uid)  使用VALUES LESS TH ...

随机推荐

  1. Tomcat基础教程(四)

    一.将Web应用部署到Tomcat中 为什么要部署?将Web应用部署到Tomcat中,那么Tomcat就能找到相应的Web应用,当Tomcat启动时就会加载和初始化Web应用,而在Tomcat启动后, ...

  2. 一篇文章让你读懂 OpenStack 的起源、架构和应用

    OpenStack 是一个面向 IaaS 层的开源项目,用于实现公有云和私有云的部署及管理.拥有众多大公司的行业背书和数以千计的社区成员, OpenStack 被看作是云计算的未来.目前 OS 基金会 ...

  3. SPRING IN ACTION 第4版笔记-第二章-004-Bean是否单例

    spring的bean默认是单例,加载容器是会被化,spring会拦截其他再次请求bean的操作,返回spring已经创建好的bean. It appears that the CompactDisc ...

  4. WCF Host中的BaseAddress 和 Endpoint中的Address的区别

    http://stackoverflow.com/questions/18720810/wcf-service-base-address-vs-endpoint-address baseAddress ...

  5. 【Bower】

    Bower Bower:客户端库管理工具 Day 1: Bower —— 管理你的客户端依赖关系 bower解决js的依赖管理

  6. JavaScript向表格中添加按钮和文本输入框

    例子: <?php ?> <html> <head> <meta http-equiv="Content-Type" content=&q ...

  7. HDU-2548 两军交锋

    两军交锋 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. Leveraging the Power of Asynchrony in ASP.NET [转]

    Asynchronous programming has had a lot of attention in the last couple of years and there are two ke ...

  9. HDOJ 1004题 Let the Balloon Rise strcmp()函数

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  10. Unity给力插件之MeshBaker

    这是一个用来合并网格.材质.贴图的插件. 其实网上也有一些比较详细的使用说明,但是真实操作起来时,总是有一些搞不清bug.而且,作为功能比较全的插件,在Unity版本更新时,也难免会一些不兼容的地方. ...