- 浏览: 1529196 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
一、分隔符
(1) 单符号分隔符
符号 |
含义 |
+ |
加法操作符 |
% |
属性提示符 |
‘ |
字符串分隔符 |
. |
组件分隔符 |
/ |
除法操作符 |
( |
表达式或列表分隔符 |
) |
表达式或列表分隔符 |
: |
非 PL/SQL 变量提示符 |
, |
项分隔符(表名、列名等分隔符) |
* |
乘法操作符 |
“ |
双引号变量分隔符 |
= |
相符操作符 |
< |
小于操作符 |
> |
大于操作符 |
@ |
远程数据库访问操作符 |
; |
语句终止符 |
- |
减法操作符或负数操作符 |
(2)组合分隔符
符号 |
含义 |
:= |
赋值操作符 |
-> |
关联操作符 |
|| |
连接操作符 |
** |
幂操作符 |
<< |
标号开始分隔符 |
>> |
标号线束分隔符 |
/* |
多行注释开始分隔符 |
*/ |
多行注释结束分隔符 |
.. |
范围操作符 |
<> |
不等操作符 |
!= |
不等操作符 |
^= |
不等操作符 |
<= |
小于等于操作符 |
>= |
大于等于操作符 |
-- |
单行注释提示符 |
二、Oracle SQL DML(INSERT、UPDATE、DELETE)
1、INSERT
(1)使用子查询插入数据
示例一:
insert into employee(empno,ename,sal,deptno) select empno,ename,sal,deptno from emp where deptno=20;
示例二:
insert /* +APPEND */ into employee(empno,ename,sal,deptno) select empno,ename,sal,deptno from emp where deptno=20;
注意,尽管以上两条语句的执行结果一样,但第二条语句使用/* +APPEND */
表示采用直接装载方式。当要装载大批量数据时,采用第二种方法装载数据的速度要远远优于第一种方法。
(2)使用多表插入数据
在Oracle9i之前,当执行INSERT语句插入数据时,只能为单个表插入数据。从Oracle9i开始,使用INSERT语句可以将某张表的数据同时插入到多张表中。
语法如下:
INSERT ALL insert_into_claus [value_clause] subquery;
INSERT conditional_insert_clause subquery;
如上所示, insert_into_claus用于指定INSERT子句;value_clause用于指定值子句;subquery用于指定提供数据的子查询;conditional_insert_clause用于指定INSERT条件子句。
示例一:使用ALL操作符执行多表插入
当使用ALL操作符执行多表插入时,在每个条件子句上都要执行INTO子句后的子查询。
INSERT ALL WHEN deptno=10 THEN INTO dept10 WHEN deptno=20 THEN INTO dept20 WHEN deptno=30 THEN INTO dept30 WHEN job='CLERK' THEN INTO clerk ELSE INTO other SELECT * FROM emp;
示例二:使用FIRST操作符执行多表插入
当使用FIRST操作符执行多表插入时,如果数据已经满足了先前条件,并且已经被插入到某表,那么该行数据在后续插入中将不会被再次使用。
INSERT FIRST WHEN deptno=10 THEN INTO dept10 WHEN deptno=20 THEN INTO dept20 WHEN deptno=30 THEN INTO dept30 WHEN job='CLERK' THEN INTO clerk ELSE INTO other SELECT * FROM emp;
2、UPDATE
(1)使用子查询更新数据
当使用UPDATE语句更新数据时,不仅可以使用表达式或数值直接更新数据,也可以使用子查询更新数据。某些情况下,使用子查询执效率更好。另外,当使用触发器复制表之间数据时,使用子查询可以更新相关表的数据。下面通过示例说明使用子查询更新数据的方法。
<1>更新关联数据
当更新关联数据时,使用子查询可以降低网络开销。假设你希望雇员SCOTT的岗位、工资、补助与雇员SMITH完全相同,如果使用表达式或列值进行修改,那么需要取得SMITH的岗位、工资、补助,然后执行UPDATE语句进行修改。
示例如下:
select job,sal,comm from emp where ename='SMITH'; JOB SAL COMM -------------------- CLERK 2200 200 update emp set job='CLERK',sal=2200,comm=200;
在存在可以确定的条件时,通过使用子查询只需要编写一条语句就可以完成这项任务,从而降低了网络开销。
示例如下:
UPDATE emp SET (job,sal,comm)=(SELECT job,sal,comm FROM emp WHERE ename='SMITH') WHERE ename='SCOTT';
<2>复制表数据
当使用触发器复制表数据时,如果表A数据被修改,那么表B数据也应该修改。通过使用子查询,可以基于一张表修改另一张表的数据。
示例如下:
UPDATE employee SET deptno=(SELECT deptno FROM emp WHERE empno=7788) WHERE job=(SELECT job FROM emp WHERE empno=7788);
3、DELETE
(1)使用子查询删除数据
当使用DELETE语句删除数据时,可以直接在WHERE子句中指定值,并根据条件来删除数据。另外,也可以在WHERE子句中使用子查询作为条件。假定要解雇SALES部门的所有雇员,那么在WEHERE子句中需要使用子查询。
示例如下:
DELETE FROM emp where deptn= (SELECT deptno FROM dept WHERE dname='SALES');
(2)使用TRUNCATE TABLE截断表
当使用DELETE语句删除表的所有数据时,不会释放表所占用的空间。如果用户确定要删除表的所有数据,那么使用“TRUNCATE TABLE”语句速度更快。
示例如下:
TRUNCATE TABLE emp;
如上所示,使用TRUNCATE TABLE语句不仅会删除表的所有数据,而且还会释放表所占用的空间。注意,DELETE语句的操作可以回退的,但TRUNCATE TABLE语句的操作是不能回退。
三、分组函数
(GROUP BY)
分组函数用于统计表的数据。与单行函数不同,分组函数作用于多行,并返回一个结果,所以有时也被称为多行函数。一般情况下,分组函数要与GROUP BY子句结合使用。在使用分组函数时,如果忽略了GROUP BY子句,那么会汇总所有行,并产行一个结果。Oralce数据库提供了大量的分组函数,在这里给大家介绍最常用的七个分组函数:
<1>MAX
:该函数用于取得列或表达式的最大值,它适用于任何数据类型。
<2>MIN
:该函数用于取得列或表达式的最小值,它适用于任何数据类型。
<3>AVG
:该函数用于取得列或表达式的平均值,它适用于数字类型。
<4>SUM
:该函数用于取得列或表达式的总和,它适用于任数字类型。
<5>COUNT
:该函数用于取得总计行数。
<6>VARIANCE
:该函数用于取得列或表达式的方差,并且该函数只适用于数字类型。当只有一行数据时,其返回值为0;当存在多行数据时,方差是按照如下公式计算取得:
(SUM(expr)2
- SUM(expr)2
/COUNT(expr))/(
COUNT(expr)-1)
<7>STDDEV
:该函数用于取得列或表达式的标准偏差,并且该函娄只适用于数字类型。当只有一行数据时,其返回值为0;当存在多行数据时,Oracle按照方差的平方根来计算标准偏差。
示例:
SELECT variance(sal),stddev(sal) FROM emp;
1、ROLLUP和CUBE
当直接使用GROUP BY执行数据统计时,只会生成列的相应数据统计。例如,如果要统计不同部门不同岗位的平均工资,那么直接使用GROUP BY子句。
示例:
select deptno,job,avg(sal) from emp group by deptno,job;
其统计结果如下表格:
部门号 岗位 |
CLERK |
ANALYST |
MANAGER |
PERSIDENT |
SALESMAN |
10 |
1300 |
|
2450 |
5000 |
|
20 |
2050 |
3500 |
2975 |
|
|
30 |
950 |
|
2850 |
|
1400 |
合计 |
|
|
|
|
|
在实际应用中,如果以上统计结果还不能满足需求,还希望产生横向、纵向的统计结果,此时可以使用ROLLUP和CUBE操作符。当使用ROLLUP操作符时,在生成原有统计结果的基础上,还会生成横向的小计结果(部门平均工资、所有雇员平均工资)。
示例
select deptno,job,avg(sal) from emp group by rollup(deptno,job);
其统计结果如下表格:
部门号 岗位 |
CLERK |
ANALYST |
MANAGER |
PERSIDENT |
SALESMAN |
部门平均工资 |
10 |
1300 |
|
2450 |
5000 |
|
2916 |
20 |
2050 |
3500 |
2975 |
|
|
2815 |
30 |
950 |
|
2850 |
|
1400 |
1566 |
合计 |
|
|
|
|
|
2301 |
当使用CUBE操作符时,在原有ROLLUP统计结果的基础上,还会生成纵向小计结果(岗位平均工资)。
示例:
select deptno,job,avg(sal) from emp group by cube(deptno,job);
其统计结果如下表格:
部门号 岗位 |
CLERK |
ANALYST |
MANAGER |
PERSIDENT |
SALESMAN |
部门平均工资 |
10 |
1300 |
|
2450 |
5000 |
|
2916 |
20 |
2050 |
3500 |
2975 |
|
|
2815 |
30 |
950 |
|
2850 |
|
1400 |
1566 |
岗位平均工资 |
1587 |
3500 |
2758 |
5000 |
1400 |
|
合计 |
|
|
|
|
|
2301 |
2、GROUPING SETS
当使用GROUP BY子句执行数据分组统计时,默认情况下只会显示相应列的分组统计结果。在编写应用程序时,有些情况可能需要生成多种分组数据结果。在早期Oralce版本中,显示多个分组统计的结果,必须要编写多条数据分组语句来实现;从Oracle9i开始,使用GROUPING SETS操作符可以合并多个分组的结果。
下面以示例说明GROUPING SETS操作的作用及使用方法:
示例一:显示部门平均工资
select deptno,avg(sal) from emp group by deptno;
结果:
DEPTNO AVG(SAL) ------------------------ 10 2916.66667 20 2175 30 1566.66667
示例二:显示岗位平均工资
select job,avg(sal) from emp group by job;
结果:
JOB AVG(SAL) ------------------------ ANALYST 30000 CLERK 1037.5 MANAGER 2758.333 PERSIDENT 5000 SALESMAN 1400
示例三:显示部门平均工资和岗位平均工资
为了显示多个分组统计结果,可以使用GROUPING SETS操作符合并分组统计结果。例如,如果既要显示部门的平均工资,也要显示岗位的平均工资,那么可使用GROUPING SETS操作符合并分组结果。
示例如下:
select deptno,job,avg(sal) from emp group by job;
结果:
DEPTNO JOB AVG(SAL) ------------------------ 10 2916.66667 20 2175 30 1566.66667 ANALYST 30000 CLERK 1037.5 MANAGER 2758.333 PERSIDENT 5000 SALESMAN 1400
四、连接查询
连接查询是指基于两个或两个以上表或视图的查询。在实际应用中查询单个表可能无法满足应用程序的实际需求,在这种情况下就需要进行连接查询。
- 当使用连接查询时,必须在FROM子句后指定两个或两个以上的表。
- 当使用连接查询时,应该在列名前加表名作为前缀。但是,如果不同表之间的列名不同,那么不需要在列名前加表名作为前缀;如果不同表之间的存在同名列,那么在列名之前必须要加表名作为前缀,否则会因为列的二义性而报错。
- 当使用连接查询时,必须在WHERE子句中指定有效的连接条件(在不同表的列之间进行连接)。如果不指定连接条件,或者指定了无效的连接条件,那么导致生成笛卡儿积(X*Y)。
- 当进行连接查询时,使用表别名可以简化连接查询语句。当指定表别名时,别名应该跟在表名后面
内连接和外连接
内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且会还返
回满足连接条件的记录。
SELECT table1.column,table2.column FROM table [INNER | LEFT | RIGHT | FULL] JOIN table2 ON table1.column1=table2.column2;
注意,如果使用FROM子句指定内、外连接,则必须要使用ON子句指定连接条件;如果使用(+)操作符指定外连接,则必须使用WHERE子句指定连接条件。
- 左外连接:LEFT [OUTER] JOIN;
- 右外连接:RIGHT [OUTER] JOIN;
- 完全外连接:FULL [OUTER] JOIN
使用(+)操作符
在Oracle9i之前,当执行外连接时,都是使用连接操作符(+)来完成的。尽管可以使用操作符(+)执行外连接操作,但Oracle9i
开始Oracle建议使用OUTER JOIN执行外连接。使用(+)操作符执外斩首的语法如下:
SELECT table1.column,table2.column FROM table1,table2 where table1.column1(+)=table2.column2;
当使用(+)操作符执行外连接时,应该将该操作符放在显示较少行(完全满连接条件行)的一端。使用时必须注意以下事项。
- (+)操作符只能出现在WHERE子句中,并且不能与OUTER JOIN语法同时使用。
- 当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
- (+)操作符只适用于列,而不能用在表达式上。
- (+)操作符不能与OR和IN操作符一起使用。
- (+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
(1) 使用(+)操作符执行左外连接。
当使用左外连接时,不仅会返回满足连接条件的所有行,而且还会返回不满足连接条件的左另表的其他行。因为(+)操作符要放在行数少的一端,所以在WHERE子句中应当将该操作符放在右表的一端。
实现左外连接,要把(+)放在右表的列,使结果集的右边行数变少,下面示例当中是emp表或emp表的别名b。
示例如下:
SELECT a.dname,b.ename FROM dept a, emp b WHERE a.deptno=b.deptno(+) AND b.deptno(+)=10;
DNAME ENAME ------------------------------- ACCOUNTING CLARK ACCOUNTING KING ACCOUNTING MILLER SALES OPERATIONS PESEARCH
(2)使用(+)操作符执行右连接。
当使用右外连接时,不仅会返回满足连接条件的所有行,而且还会返回不满足连接条件的右另表的其他行。因为(+)操作符要放在行数少的一端,所以在WHERE子句中应当将该操作符放在左表的一端。
实现右外连接,要把(+)放在左表的列上,使结果集的左边行数变少,下面示例当中是dept 表或dept 表的别名a。
示例如下:
SELECT a.dname,b.ename FROM dept a, emp b WHERE a.deptno(+) =b.deptnoAND a.deptno(+)=10;
DNAME ENAME ------------------------------- ACCOUNTING CLARK ACCOUNTING KING ACCOUNTING MILLER JAMES TURNER
发表评论
-
oracle的split函数(转)
2014-03-14 00:06 2139--声明的长度要长点 create or replace ... -
使用Ubuntu的oracle问题
2012-09-26 21:50 7541、在oracle用户用使用dbca命令后出现No p ... -
oracle 多表删除 同时删除多表中关联数据
2012-09-19 16:30 5399DELETE from COMIC_ANIMATION_ENT ... -
面试时 遇到一个数据库SQL 成绩排名
2012-07-17 09:55 10391、累积排名 SELECT NAME ... -
ORA-12519: TNS:no appropriate service handler found 解决
2012-06-07 11:37 890转自:http://www.cnblogs.com/ungsh ... -
Oracle 删除外键约束 禁用约束 启用约束
2012-04-23 12:39 1121执行以下sql生成的语句即可 删除所有外键约束 selec ... -
pl/sql developer中关于TIMESTAMP显示格式的疑问和学习
2012-04-03 18:01 1973ORACLE中的TIMESTAMP数据类 ... -
Oracle 时间戳 触发器
2012-03-23 00:36 3613create table time_test( ... -
Oracle SQL 函数
2012-03-02 09:25 919NVL(expr1,expr2) 如 ... -
Oracle SQL 变量
2012-03-01 08:50 6002一、定义标题变量 当编写PL/SQL程序 ... -
Oracle SQL 学习
2012-02-29 14:57 895一、创建 存储过程 的方法: ... -
ubuntu 11.04 安装 oracle 10g Enterprise Edition 错误信息
2012-02-23 22:10 2630网上下了个zip版的 , ... -
SQL 分组统计 两个字段 行转列
2012-02-08 17:20 4148select c.MRL,c.OPERATION_ID,c. ... -
Oracle 触发器 创建
2012-02-07 09:42 1774在创建Oracle 触发器的时候需要注意一点,需要触发器的末尾 ... -
Oracle 去掉重复字符串
2011-06-02 16:29 4133砝码 create or replace function ... -
在Navicate中使用 提示输入 方式输入SQL的参数。
2011-03-01 17:56 972select [$输入A] 输入参考: sele ... -
高效删除Oracle数据库中重复数据的方法
2010-08-17 10:58 1151转自:http://www.builder.com.cn/20 ...
相关推荐
### DBA对Oracle SQL编写规范的总结 #### 一、引言 在Oracle数据库开发过程中,遵循一套标准化的SQL编写规范对于提升代码质量、增强可读性和可维护性至关重要。本文档由一位经验丰富的数据库管理员(DBA)撰写,旨在...
Oracle SQL是数据库管理员和开发人员在处理Oracle数据库系统时必须掌握的一种语言。它用于查询、更新、插入和删除数据,以及执行复杂的数据库管理和分析任务。本资料“Oracle.SQL必备参考”将深入探讨Oracle SQL的...
- **SQL编码标准**:遵循一定的编码规范有助于提高SQL语句的可读性和可维护性。 - **性能问题**: - **常见问题**:SQL语句执行效率低、资源占用过高、响应时间过长等。 - **原因分析**:开发人员往往只关注查询...
性能管理 性能问题 调整的方法 SQL优化机制 应用的调整 SQL语句的处理过程 共享SQL区域 SQL语句处理的阶段 共享游标 SQL编码标准 Oracle 优化器介绍 SQL Tunning Tips 优化Tools
然而,在导入过程中可能会出现编码问题,因为 Oracle 使用 UTF-8 编码,而 Sql Server 不支持 UTF-8,所以无法导入。解决办法是:先从 Oracle 中把数据复制出来到 Excel,然后从 Excel 中粘贴到 Sql Server 中。 ...
说明: ...Oracle SQL Developer 2.1.0.63.73 for 32bit-windows-with-jdk1.6.11下载地址: part1: http://download.csdn.net/source/1988257 part2: http://download.csdn.net/source/1988297 part3: ...
### Oracle10g US7ASCII 编码中文无法导入 SQL Server 问题解决 #### 背景介绍 在跨数据库平台的数据迁移过程中,经常会遇到由于源数据库与目标数据库编码不一致而导致的数据导入失败问题。本篇文章主要针对的是从...
SQL语句的处理过程包括共享SQL区域、SQL语句处理的阶段(如解析、执行和返回结果)、共享游标、SQL编码标准等。Oracle的优化器是决定执行计划的关键,它有多种策略,如基于成本的优化器(CBO),用于选择最优的执行...
- **SQL编写规范**:遵循最佳编码习惯,避免性能陷阱。 通过《Oracle 19C SQL调优指南》,DBA能够深入理解Oracle 19C的新特性,掌握SQL调优的理论和实践,有效提升系统的整体性能,为企业的业务运行提供强有力的...
确保SQL语句尽可能参数化,避免硬编码。 ##### 3.4 减少访问数据库的次数 通过一次查询获取所有所需数据,减少数据库往返次数。合理使用存储过程或函数,可以在服务器端处理数据,减少网络传输。 ##### 3.5 使用...
突然想到Oracle有一个编码转换的函数叫Convert,如果一个字符串编码转换前后不一样表示字符串里面含有非ASCII字符,这样得到结果。后写出来测试了一下,确实可行,5500万记录10秒钟扫描结束。以下是测试用例: ...
- **SQL优化机制**:理解SQL语句的处理过程,包括共享SQL区域、SQL处理阶段、共享游标和SQL编码标准。 - **Oracle 优化器**:Oracle优化器是决定SQL执行计划的关键组件,通过分析和选择最佳的执行路径。 2. **...
本篇文章将详细探讨如何将ORACLE数据库中的BLOB(Binary Large Object)字段导入到SQL SERVER中的IMAGE字段,这通常涉及到数据转换、数据迁移以及可能的数据类型兼容性问题。 首先,让我们了解BLOB和IMAGE字段的...
24. Oracle字符集问题讨论了字符编码和字符集对数据库的影响。 25. 随机值查询处理在数据库中生成随机数据的需求,如随机数或随机抽取记录等。 在学习这些高级SQL技能的过程中,建议通过大量的实践练习,结合具体...
标题中的“SQL loader and oracle sql study”涉及到两个关键的Oracle数据库管理工具——SQL*Loader和SQL语言的学习。本文将深入探讨这两个主题,并结合提供的压缩包文件名称,主要关注SQL*Loader的相关FAQ。 **SQL...
### Oracle查看编码格式 在Oracle数据库管理中,正确地理解和设置字符集是非常重要的,它直接影响到数据的存储、检索和处理。本篇文章将详细介绍如何在Oracle数据库中查看和理解编码格式,包括基本概念、常用查询...
ORACLE 培训 SQL 性能优化 在本课程中,我们将深入探讨 SQL 语句执行的过程、ORACLE 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容,帮助大家逐步掌握 SQL 优化的过程。 首先,让我们了解...
网上基本找不到,sqlserver2012版本链接oracle乱码问题解决实测版。
Oracle数据库和SQL驱动是IT行业中两个非常重要的概念,它们在数据管理和应用程序开发中扮演着核心角色。Oracle是一种关系型数据库管理系统(RDBMS),而SQL驱动则是连接应用程序和数据库之间的桥梁。 Oracle数据库...
本文将详细比较SQL Server和Oracle数据库之间的数据类型对应以及常用函数的转换。 首先,我们来看SQL Server和Oracle的数据类型对照: 1. **数值类型**: - `bigint`在SQL Server中对应Oracle的`NUMBER(19)`,...