- 浏览: 1229905 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
1、使用dual表:
select 2*3 from dual;
2、使用||符号作字符串连接
select ename || 'dddddd' from emp;
3、如果字符串里有单引号则用两个单引号
使用select ename || 'sfss''sfdd' from emp;
4、使用distinct去除重复的元组,注意MSSQL需要括号
select distinct deptno from emp;
5、修饰多个字段时去除组合起来的重复元组
select distinct deptno,job from emp;
6、使用rownum指定返回的行数
select ename,hiredate from emp where rownum<2;
结果:
ENAME HIREDATE ---------- -------------- SMITH 17-12月-80
注意oracle默认的日期类型:上面结果可以看出默认日期格式输出:17-12月-80
select ename,hiredate from emp where hiredate>'15-12月-80';
注意条件。。
7、使用union查询两个结果集,如果结果集中有重复的则只保留其中一个。
select deptno from emp union select deptno from dept;
结果
DEPTNO
---------
10
20
30
40
8、使用union all查询两个结果集中所有行。
select deptno from emp union all select deptno from dept;
在emp表中有14行,而dept表中有4行,结果返回了18行。
9、使用转义字符:
如select * from emp where ename like '%\%%';
第一个和第三个%表示有0个或多个字符,而我们要查询字段中含有%的记录,那么中间的%就必须用\进行转义
可以使用
select ename from emp where ename like '%$%%' escape '$';
上面的$符号经过escape '$'声明之后就可以使用$进行转义了。也就是说使用$代替了\
10、使用函数
大小写转换:
select lower(ename) from emp;
select upper(ename) from emp;
字符串截取:
select substr(ename,1,3) from emp;
从第一个字母开始,共3个字母被截取如。SIMP截取后变成SIM
从ASCII码变成字符
select chr(65) from dual; 返回字母A,
从字符变成ASCII
select ascii('a') from dual; 返回97
四舍五入:
select round(23.62) from dual; --24
select round(23.652,2) from dual; --23.65
select round(23.65,0) from dual; -- 24
select round(23.65,-1) from dual; --20
select round(26.4434,-1) from dual; --30
Oracle中round() 函数与trunc()函数的比较
to_char:
数据转换:
select sal from emp; --1600.00
select to_char(sal,'$99,999.9999') from emp; -- $1,600.0000
select to_char(sal,'L99,999.9999') from emp; -- ¥1,600.0000
select to_char(sal,'L00,000.0000') from emp; -- ¥01,600.0000
99,999.9999中的9就代表一个数字位,对于整数位如果该位没有数字则不显示,但小数位如果没有这个位数则显示0
而'L00,000.0000'中的0代表一个数字位,不同的是如果位数不足则都用0补上。
时间转换:
首先说明一下:
在命令行的Sqlplus得到的系统时间:
select sysdate from dual;
结果为:
SYSDATE
--------------
07-6月 -10
而在P/L SQL DEVELOPER中得到的却是
2010-6-7 17:19:09
那么不管怎么样,使用时间时我们要进行转换:
如下:
select to_char(sysdate,'yyyy-MM-dd HH:mm:ss') from dual; --2010-06-07 05:06:48
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual; --2010-06-07 17:06:41
注意区分24小时格式。
to_date
转换成日期格式进行时间比较:
select * from emp where hiredate> to_date('1985-06-07 05:06:48','YYYY-MM-DD HH:MI:SS');
to_number
转换成特殊格式进行比较
select sal from emp where sal > to_number('$1,250.00','$9,999.99');
select to_number('$1,250.00','$9,999.99') from dual; --1250
select sal from emp where sal > to_number('$1,250.00','$9,999.99');
NVL
在emp表中comm字段有的值为空值,那么计算的时候所有与它相运算的结果值都为空。如
select sal*2+comm from emp;
SAL*2+COMM
----------
3500
3000
3900
3000
那么这样的计算显然不是我们想要的结果。
select sal*2+NVL(comm,0) from emp;
结果如下:
SAL*2+NVL(COMM,0)
-----------------
1600
3500
3000
5950
3900
5700
4900
6000
10000
3000
2200
组函数,统计函数--读取多条记录,但只返回一个结果
select max(sal) from emp; --5000
select min(sal) from emp; --800
select avg(sal) from emp; --2073.21428571429
select to_char(avg(sal),'9999,9999.9999') from emp; -- 2073.2143
select sum(sal) from emp; --29025
select count(*) from emp;
select count(distinct deptno) from emp; --3个
select count(comm) from emp; --计算非空的行数
11.Group by
分组求每个部门的平均值:
select deptno,to_char(avg(sal),'999,9999.9999') from emp group by deptno
根据deptno与job的不同组合求平均值:
select deptno,job,to_char(avg(sal),'999,9999.9999') from emp group by deptno,job
共有9种不同的组合。
12.子查询
查询员工表中薪水最多的人的信息
select * from emp where sal = (select max(sal) from emp )
13、having 子句
对分组进行条件查询
select avg(sal) from emp group by deptno having avg(sal)>2000
14.子查询
查询各部门中薪水最高的人的信息
错误写法:select * from emp where sal in (select max(sal) from emp group by deptno)
正确写法如下(两个查询结果一样):
select e.* from emp e,(select max(sal) sal,deptno from emp group by deptno) m where e.deptno = m.deptno and e.sal = m.sal
select e.* from emp e join (select max(sal) sal,deptno from emp group by deptno) m on (e.deptno = m.deptno and e.sal = m.sal);
查询每个部门平均薪水的等级
员工表emp
薪水等级表salgrade
GRADE LOSAL HISAL
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
select a.deptno,a.sal,b.grade from (select deptno, avg(sal) sal from emp group by deptno ) a join salgrade b on a.sal between b.losal and b.hisal
结果:
DEPTNO SAL GRADE
1 30 1566.66666666667 3
2 20 2175 4
3 10 2916.66666666667 4
查询每个人的薪水等级
select a.*,b.grade from emp a join salgrade b on a.sal between b.losal and b.hisal
查询每个部门的平均薪水等级
先查每个人的薪水等级,再按部门分组求平均值
select avg(c.grade) from (select a.*,b.grade from emp a join salgrade b on a.sal between b.losal and b.hisal) c
group by c.deptno
连接已表
如求emp表中员工的管理者姓名
EMPNO ENAME MGR
----- ---------- -----
7369 SMITH 7902
7499 ALLEN 7698
7521 WARD 7698
7566 JONES 7839
7654 MARTIN 7698
7698 BLAKE 7839
7782 CLARK 7839
7788 SCOTT 7566
7839 KING
7844 TURNER 7698
7876 ADAMS 7788
7902 FORD 7566
员工7369 的管理者7902的姓名是FORD
以下通过连接自己查询得到
select a.empno,a.ename,a.mgr,b.empno,b.ename from emp a join emp b on a.mgr = b.empno
或者
select a.ename,b.ename from emp a ,emp b where a.mgr=b.empno;
14.面试题
不使用组函数,查询emp表中sal的最大值。
使用自我连接。
select sal from emp where sal not in (select distinct a.sal sal from emp a,emp b where a.sal<b.sal)
上面实际上使用select distinct a.sal sal from emp a,emp b where a.sal<b.sal查询出所有非最大值的记录。
求平均薪水最大值的部门编号:
select deptno,sal from (select avg(sal) sal,deptno from emp group by deptno) where sal = (select max(sal) from (select avg(sal) sal,deptno from emp group by deptno))
求平均薪水等级最低的部门的部门名称:
select d.dname,d.deptno from dept d join
(
select m.deptno,m.grade from (select s.grade ,b.sal,b.deptno from salgrade s join (select avg(sal) sal,deptno from emp group by deptno) b on b.sal between s.losal and s.hisal
) m join
(select min(t.grade) mingrade from (select s.grade ,b.sal,b.deptno from salgrade s join (select avg(sal) sal,deptno from emp group by deptno) b on b.sal between s.losal and s.hisal) t) n
on m.grade= n.mingrade
) y on d.deptno = y.deptno
求比普通员工最多薪水还高的管理员名称
select ename from emp where empno in (select distinct mgr from emp where mgr is not null) and sal>(select max(sal) from emp where empno not in (select distinct mgr from emp where mgr is not null))
求薪水最高的第6到第10名员工
一定要注意在使用order by 的时候rownum的问题
关于rownum请看文章:http://quicker.iteye.com/blog/687821
select ename from emp where rownum<5 order by ename
返回结果:
ALLEN
JONES
SMITH
WARD
而实际上:我们使用select ename from emp order by ename
前五行是:
ADAMS
ALLEN
BLAKE
CLARK
FORD
显然使用rownum<5是不对的。必须用子查询:
下面列出不排序和排序后的两种取前6到10条数据的语句:
select * from ( select rownum m,e.* from emp e where rownum<=10 ) where m>=6 select * from ( select rownum m,e.* from (select * from emp order by ename) e where rownum<=10 ) where m>=6
那么取薪水最高的6-10名员工:
select * from ( select rownum m,e.* from (select * from emp order by sal desc) e where rownum<=10 ) where m>=6
在排序字段上加上rowid避免性能缺陷
select * from ( select rownum m,e.* from (select * from emp order by sal desc, rowid) e where rownum<=10 ) where m>=6
15、DML
备份一张表:
create table emp2 as select * from emp
为对应表增加主键与外键
alter table S2
add constraint pk_ck primary key (CNO);
alter table S2
add constraint sk_sk foreign key (SNO)
references s1 (SNO);
增加字段及修改字段
alter table s2 add cname varchar2(200)
alter table s2 modify cname varchar2(100)
创建索引:
create unique index pk_i on S2 (sno);
drop index pk_i
视图:
create or replace view l_view as
select s1.sno,s1.age,s2.sname,s2.cno
from s1,s2
drop view l_view
创建序列:
-- Create sequence
create sequence seq
start with 1
increment by 1;
发表评论
-
Jdbc执行很慢,而PLSQL执行快的问题解决
2016-04-14 13:51 12205最近在检查一方法时发现程序执行SQL查询时非常慢,但使用P ... -
org.apache.commons.dbcp.DbcpException: java.sql.SQLException: 不能在 UTF8 和 UCS2 之间
2016-04-07 14:13 1014今天生产环境tomcat启动后,用户登录时系统报错:java ... -
rollup()和rollup(())的区别
2015-08-21 14:50 719引用:http://blog.csdn.net/damen ... -
Oracle hint
2014-09-25 12:31 630转自:http://www.cnblogs.com/ebs ... -
Oracle hint用法
2014-09-25 12:12 4881. /*+ALL_ROWS*/ 表明对语 ... -
Oracle表与索引的分析及索引重建
2014-09-25 12:09 756转自:http://www.cnblogs.co ... -
Oracle的优化器的RBO和CBO方式
2014-09-25 11:30 434转自:http://www.blogjava.net/wx ... -
P6Spy SQL语句拦截工具
2013-08-20 15:58 2053P6Spy P6Spy 是一个可 ... -
ORACLE快照原理及实现总结
2013-03-18 13:23 4220转:http://blog.csdn.net/lingo0 ... -
plsql developer 使用技巧
2013-01-25 17:48 1207plsql developer 使用技巧 Oracle数据 ... -
Oracle字符集查看及修改
2012-12-12 17:04 815Oracle字符集查看及修改 http://blog.csd ... -
Oracle性能优化系列
2012-12-04 13:41 871Oracle删除重复数据的一种高效的方法 Oracle性能优化 ... -
java.sql.SQLException: Io 异常: Got minus one from a read call
2012-12-04 11:14 36168Tomcat服务器下的应用连接Oracle时报错,出现以下异常 ... -
Oracle中round() 函数与trunc()函数的比较
2012-11-29 14:32 921转:http://blog.sina.com.cn/s/blo ... -
Oracle百万记录sql语句优化技巧
2012-11-12 14:56 920转:http://www.cnblogs.com/er ... -
Oracle 获取当前日期及日期格式
2012-11-05 16:26 997转自:http://blog.sina.com.cn/s/bl ... -
Oracle CASE WHEN 用法介绍
2012-11-05 16:19 758转:http://www.cnblogs.com/eshizh ... -
ORACLE 日期加减操作
2012-11-05 15:14 755转自:http://www.cnblogs.c ... -
update关联更新在sqlserver和oracle中的实现[转]
2012-09-18 16:23 1018from: http://www.webjx.com/html ... -
plsql developer导入导出数据库方法
2012-06-15 14:23 1264转:http://blog.csdn.net/leeli198 ...
相关推荐
### Oracle 10g 常用命令:数据库的备份与恢复 #### 一、基础知识与环境准备 在深入探讨 Oracle 10g 数据库的备份与恢复之前,我们需要了解一些基本概念和环境配置。 ##### 1. 连接到 Oracle 10g 数据库 - **连接...
《Oracle9i: SQL3入门指南》一书深入探讨了Oracle9i数据库系统中的SQL语言高级应用,旨在为读者提供全面、深入的SQL知识体系,适用于Oracle认证专业人员(OCP)的学习与备考。以下是对该书籍核心知识点的详细解析: ...
以下是一些Oracle中的常用命令,涵盖了数据库的启停、查询、数据定义、数据操作以及用户管理和权限控制等方面: 1. **关闭和启动数据库**: - `SHUTDOWN IMMEDIATE`:立即关闭数据库,等待所有活动事务结束。 - `...
在日常管理和维护Oracle数据库时,掌握一些常用的命令是必不可少的。以下是一些Oracle数据库管理中的关键命令,它们涵盖了数据查询、系统监控、数据库备份与恢复等多个方面。 1. 登录Oracle数据库: 使用`sqlplus`...
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
然而,直接在函数中执行DML操作会触发Oracle的错误ORA-14551,这是因为函数内部的DML操作默认是在当前事务中执行的,而SELECT语句不能在同一个事务中同时包含DML操作。 为了解决这个问题,需要在函数中声明`pragma ...
### Oracle日常检查命令详解 #### 一、Oracle表空间使用情况查询 在Oracle数据库管理过程中,经常需要查看各个表空间的使用情况,以便及时发现并处理表空间将满的问题。以下是一个查询表空间使用率的SQL示例: ``...
### Oracle SQL*Plus 常用命令解析 #### 一、概述 Oracle SQL*Plus 是一个功能强大的命令行工具,用于与 Oracle 数据库交互。它不仅支持标准 SQL 语句,还提供了许多实用的增强功能,如脚本执行、变量管理、格式化...
在Oracle数据库管理中,熟悉和掌握一系列常用的命令是至关重要的。Oracle是一种关系型数据库管理系统,广泛应用于企业级数据存储和管理。以下是一些Oracle数据库管理员经常使用的命令,这些命令可以帮助进行数据查询...
- SELECT语句:学习如何使用SELECT来从一个或多个表中检索数据,包括选择特定列、筛选行、排序结果、使用聚合函数(如COUNT、SUM、AVG)以及连接多个表。 4. 表的创建与修改: - CREATE TABLE语句:定义表的结构...
本文将详细介绍Oracle中常用的SQL命令,特别关注数据控制语句(DML)和数据定义语句(DDL)。 1. 数据控制语句 (DML) - INSERT:这是向表中插入新记录的基本命令。有两种形式: - 直接插入指定的值:`INSERT ...
这本书会详细介绍SQL的SELECT语句、DML操作、数据库对象的管理等内容。 最后,"PLSQL基础.pdf"涵盖了Oracle的PL/SQL编程语言。PL/SQL是Oracle特有的过程化语言,结合SQL,用于编写复杂的数据库程序。学习PL/SQL,你...
### Oracle DDL、DML、DCL、TCL 基础概念 #### DDL (Data Definition Language) 数据定义语言 数据定义语言(DDL)主要用于创建、修改或删除数据库对象,如表、索引、视图等。这些操作通常涉及数据库结构的变更。 ...
本资料主要聚焦在“ORACLE常用命令”,旨在帮助用户掌握日常操作中必备的一些命令,解决记不住Oracle指令的困扰。以下是Oracle数据库管理中一些常见的、实用的命令,这些内容基于提供的"ORACLE常用命令.doc"文档。 ...
### Oracle SQLPlus 常用命令详解 #### 1. 显示系统信息与用户信息 - **`show all`**:此命令用于显示系统级别的设置信息,包括但不限于环境变量、当前会话设置等。 - **`show user`**:显示当前登录数据库的用户名...
### Oracle数据库操作命令详解 #### 一、SQLPlus启动与用户连接 - **启动SQLPlus:** - 在DOS环境下通过`sqlplus 用户名/密码 as sysdba`来启动SQLPlus并登录到Oracle数据库。例如,登录系统账户时可使用`c:>...
无论是数据的定义、操纵还是查询,Oracle都有一套完整且强大的命令集来支撑其操作。对于学习者而言,掌握这些命令是非常重要的,它们不仅能够帮助解决实际工作中的问题,还能够提高工作效率和数据管理能力。
1. **Oracle常用命令**: - **SQL*Plus**:Oracle的命令行工具,用于执行SQL语句和PL/SQL块。 - **STARTUP / SHUTDOWN**:启动或关闭数据库实例。 - **ALTER DATABASE**:用于修改数据库的配置,如打开或关闭...
本文将详细介绍Oracle中与表操作相关的常用命令,包括创建、复制、临时表、存储参数调整、空间分配、表移动、释放未使用空间、截断、删除以及修改列等操作。 1. 创建表 创建表是数据库设计的起点。使用`CREATE ...