分页查询
按雇员的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. 使用 .NET 平台,如何玩转 Universal Windows 应用?

    2015年7月30日 本文作者是 Managed Languages 团队项目经理 Lucian Wischik. 不久前,Visual Studio 2015上新增 Windows 10 应用的开发 ...

  2. Android 模拟登陆 保存密码(信息)到手机中 文件信息读取

    package com.wuyou.login; import java.io.IOException; import java.util.Map; import android.app.Activi ...

  3. Android软件开发之发送短信与系统短信库解析

    今天我和同学们讨论一下Android平台下如何调用系统方法发送短信.接收短信.系统的短信库相关的问题.进入正题,我们先使用Eclipse工具模拟给自己的模拟器发送一条短信.在Eclipse下打开DDM ...

  4. [LeetCode] 306. Additive Number [Medium]

    306. Additive Number class Solution { private: string stringAddition(string &a, string &b) { ...

  5. 矩阵, 矩阵 , Android基础控件之ImageView

    天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原 ...

  6. POJ_1631_Bridging_Signals_(动态规划,LIS)

    描述 http://poj.org/problem?id=1631 铁路左右相连,要求去掉一些边,使得剩下的边不交叉,求剩余边数的最大值. Bridging signals Time Limit: 1 ...

  7. Discuz! x 2.5-3.0 beta 存储型跨站漏洞

    漏洞版本: Discuz x 2.5 - 3.0 漏洞描述: Discuz! 已拥有11年以上的应用历史和200多万网站用户案例 是全球成熟度最高.覆盖率最大的论坛软件系统之一,淘帖处发表评论,直接插 ...

  8. 【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 三)

    原文网址:http://www.cnblogs.com/ChinaKingKong/p/4964745.html 前言部分 part三 部分主要讲解 Xcode关联绑定发布证书的配置.创建App信息. ...

  9. (转载)Total Commander 常用快捷键(并附快捷键大全)

    (转载)http://blog.chinaunix.net/uid-532511-id-3051990.html Total Commander 常用快捷键 喜欢用Total Commander的人, ...

  10. 初学acm感想

    初学acm,觉得大部分题对我来说都是陌生的,好多类型没见过,好多题没思路,打击确实不小,或许这个阶段正是比较能考验人的时候吧,因为只有坚持下来才有收获,没有人生下来就是大神,所以不能气馁更不能放弃,有 ...