第一篇:oracle日期格式总结
select to_char(sysdate,'yyyy')||'年'||to_char(sysdate,'mm')||'月'||to_char(sysdate,'dd')||'日'||to_char(sysdate,'hh24')||'时'||to_char(sysdate,'mi')||'分'||to_char(sysdate,'ss')||'秒’from dual 在oracle中处理日期大全 TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998 24小时格式下时间范围为: 0:00:0012:59:59....1.日期和字符转换函数用法(to_date,to_char)2.select to_char(to_date(222,'J'),'Jsp')from dual 显示Two Hundred Twenty-Two 3.求某天是星期几和设置语言格式
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day')from dual;星期一 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American')from dual;monday 设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样
TO_DATE('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4.两个日期间的天数
select floor(sysdateto_date('2002-02-01','yyyy-mm-dd')+1)where to_char(to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D')not in('1', '7')在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).9.select months_between(to_date('01-31-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY'))“MONTHS” FROM DUAL;1 select months_between(to_date('02-01-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY'))“MONTHS” FROM DUAL;1.03225806451613 10.Next_day的用法 Next_day(date, day)Monday-Sunday, for format code DAY Mon-Sun, for format code DY 1-7, for format code D 11 select to_char(sysdate,'hh:mi:ss')TIME from all_objects 注意:第一条记录的TIME 与最后一行是一样的 可以建立一个函数来处理这个问题 create or replace function sys_date return date is begin return sysdate;end;select to_char(sys_date,'hh:mi:ss')from all_objects;12.获得小时数
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40')from offer SQL> select sysdate ,to_char(sysdate,'hh')from dual;SYSDATE TO_CHAR(SYSDATE,'HH')-----------------------------------------2003-10-13 19:35:21 07 select sysdate ,to_char(sysdate,'hh24')from dual;SYSDATE TO_CHAR(SYSDATE,'HH24')-------------------------------------------2003-10-13 19:35:21 19 获取年月日与此类似 13.年月日的处理
select older_date, newer_date, years, months, abs(trunc(newer_date-add_months(older_date,years*12+months)))days from(select trunc(months_between(newer_date, older_date)/12)YEARS, mod(trunc(months_between(newer_date, older_date)), 12)MONTHS, newer_date, older_date from(select hiredate older_date,add_months(hiredate,rownum)+rownum newer_date from emp))14.处理月份天数不定的办法
select to_char(add_months(last_day(sysdate)+1,-2), 'yyyymmdd'),last_day(sysdate)from dual 16.找出今年的天数
select add_months(trunc(sysdate,'year'), 12)60*TRUNC(A*24))Minutes, TRUNC(A*24*60*60100*TRUNC(A*24*60*60))mSeconds from(select trunc(sysdate)Days, sysdate6 first_day from(select substr('2004-33', 1, 4)yy, to_number(substr('2004-33', 6))ww
from dual)
select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')last_day from dual
select max(v_date)from(select(to_date('200408','yyyymm')+ rownum)v_date from all_tables where rownum < 370)where to_char(v_date,'yyyy-iw')= '2004-33'
3.查询某周的日期
select min_date, to_char(min_date,'day')day from(select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd')min_date
from all_tables where rownum <= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)union
select to_date(substr('2004-33',1,4)-1||
decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd')min_date
from all_tables
where rownum <= 7 union select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd')min_date
from all_tables
where rownum <= 7)where to_char(min_date,'yyyy-iw')='2004-33'
oracle中时间运算
论坛中常常看到有对oracle中时间运算提问的问题,今天有时间,看了看以前各位兄弟的贴子,整理了一下,并作了个示例,希望会对大家有帮助。
首先感谢ern、eric.li及各版主还有热心的兄弟们
内容如下:
1、oracle支持对日期进行运算
2、日期运算时是以天为单位进行的
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可
4、进行时间进制转换时注意加括号(见示例中红色括号),否则会出问题
SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';
会话已更改。
SQL> set serverout on SQL> declare 2 DateValue date;3 begin 4 select sysdate into DateValue from dual;5 dbms_output.put_line('源时间:'||to_char(DateValue));6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1));7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24));8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60)));9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6 0)));10 end;11 / 源时间:2003-12-29 11:53:41 源时间减1天:2003-12-28 11:53:41 源时间减1天1小时:2003-12-28 10:53:41 源时间减1天1小时1分:2003-12-28 10:52:41 源时间减1天1小时1分1秒:2003-12-28 10:52:40
第二篇:ORACLE培训总结
篇一:oracle培训班总结(听课笔记)oracle北京培训
第一章 oracle10g的安装与基本设置
一、数据库基础部分。
oracle数据库应用系统结构与产品。
sql语言:操作数据库,同时用于数据库管理。(通用部分)sql*plus语言:对sql的扩充,主要增加一些报表。pl/sql语言:过程化语言。数据库分区存储技术。
1、oracle数据库应用系统结构与产品
oracle数据字典有4.2万个。数据字典只记录标识。
结构方面:sql与oracle完成不同,sql可建多个库,结构与oracle明显不同。i:代表internet.c语言结构性最好,计算能力最强。指纹识别系统只能用c.2、pl:procedural language:过程化语言,条件、判断、循环。sql属非过程化语言,只关心结果,不关心过程。
3、数据库分区存储技术(一个表存到多个表空间上)数据库存储数据的最小单位:表。
逻辑空间——>表空间(在物理上与磁盘对应)1 ——>多个磁盘。
一个表可以存在多个磁盘上,但不能存到多个表空间上。集中式存储:安全性不好,i/o不平衡。
数据库的分区存储技术:range、list(oracle 11自动增加)range:可以比大小。
list:不能比大小,例如:人口住址等。
4、数据库存取权限控制。
5、oracle 10g flashback:数据闪回。恢复前提:归档和备份。(1)基于时间的恢复:从5楼到4楼。必须从5楼下到一楼,再从1楼到4楼。逻辑备份: 物理备份:常说的备份点。
不完全恢复:向回倒,不可逆转,日志自动清0,有的数据要丢失。exp、import.(1)基于时间的恢复(2)基于中止(撤消)的恢复。(3)基于事务的恢复。完全恢复。
delete from,rollback能100%恢复。drop,flashback不一定能恢复。
二、程序设计
pl/sql程序设计。存储过程(procedure),函数(function),包(package),数据库触发器(data triggers(枪栓))。
三、系统管理(dba)
1、oracle核心软件安装与产品升级。sun solaris hp ux 国税 aix 银行 tru64 电力 数据库的排序:在临时表空间中进行。8i和9i排序完不释放。10g可自动释放。640万人无人居住,不发生电费。
命令行模式运行速度快,容易发现问题的存在。
oracle占用可用内在的55-57%,所以不要建两个以上的库,oracle按表空间划分用户,sql可建多个库,结构与oracle明显不同。
2、创建主要的数据库存储结构。
划分磁盘空间。
3、数据库权限与角色管理。角色:权限的组合。
4、监视与控制用户对于数据库的操作。
5、数据库的启动与关闭。
6、数据库性能优化与调整。
7、数据库的备份与恢复。
四、基于web应用开发(会话进程)。
会话数(在线数)< 用户数< 进程数在(windows称为服务)< 操作系统核心参数 如何查看修改连接数,进程数及用户数,三者之间有什么关系? show parameter session;最大session数 show parameter process;最大进程数
select count(1)from all_users;查看已安装数据库的用户数 select * from all_users;oracle自带的用户数如何查。
默认的情况下系统中的最大session = min(session ,process * 1.1 + 5)
1、我们把它称为一次对话,或者叫会话。同样,在我们用电脑工作时,打开的一个窗口或一个web页面,我们也可以把它叫做一个“会话”,扩展到一个局域网里面,所有用户要通过防火墙上网,要打开很多个窗口或web页面(即会话),那么,这个防火墙,所能处理的最大会话数量,就是“并发连接数”。
(1)查看oracle 10g数据库会话数 select * from v$session;当前总会话数:select count(*)from v$session;可用总会话数:在sqlplus里查询,show parameter session
2、查看已安装数据库的用户数:select count(1)from all_users;sql>select * from all_users;
3、查看进程数
使用sys,以sysdba权限登录:sql> show parameter processes;
4、$ps –ef | grep oracle 进程,在windows称为服务。实例包括一个内存和进程(在windows中为服务)
按我的理解来说session就等价与一个客户端,它是用户经过用户进程到oracle事例的特定连接.它从用户连接开始一直持续到用户断开连接或退出数据库为止.进程,笼统地认为一个程序有若干进程组成,从os角度讲程序是静态的,而进程是动态的罢了.进程可以分为user process和oracle process.说穿了,进程就是用来执行程序的时候产生的,是一个动态过程.第二章 oracle安装
一、asm(automatic storage management)自动存储管理。oracle10g 新内容。镜像:oracle 10g以后才支持。磁盘组:diskmap 逻辑设备
裸设备:只做分区,不做格式化。看不到文件,在磁盘管理器中才能看到设备,u盘拷贝不了。只能用逻辑手段拷贝:exp rman.二、oltp_数据仓库_全局数据库名_(nts适配器错误_在windows中清理oracle)
1、t----->oltp(on line transaction processing)在线事务处理。网上数据传输量比较大,数据库数据改动大,数据库负荷重,oracle 会设比较大的回退段(rollback segments)和空闲率(pctfree 10%)oracle的块为:8k.它使用了所有的所谓数据的操作 crud(创建、读取、更新、删除)。当数据存储达到一定量的时候,规模就会几乎保持不变,因为可以从存储中删除过期数据。
2、数据仓库
数据仓库改动少,主要为查询速度快服务,用于存历史数据,用来构造决策支持系统。他的回退段和空闲率留的比较少。
数据仓库就完全是一种不同种类的应用程序。它并不是用来运行当前的操作,例如发送邮件。它是用来分析数据并且从现有数据中发现新的价值,主要是用来预测未来的情况。数据仓库并不是解决所有问题的通用结构。它必须集中于某一问题领域,例如航空服务、顾客收益等。数据仓库也有有趣的一面,那就是本身是稳定增长的。数据没有被删除,也不发生变更。我们不需要将冗余数据置于数据库之外(因为加入仓库中的数据经过了数据净化的过程,该过程检查了数据的正确性)来减少复杂性同时增强读取操作的性能。
为了能够对数据仓库中的数据进行分析,数据存储于一个多维结构中,叫做星型模式。如果将星型模式扩展,就会得到雪花模式。
3、全局数据库名:以字母打头,不超过8个。
数据库名不能重名,否则复制数据和同步数据时会出麻烦,数据库安装完后,数据库名不能更改,起名时要慎重。
4、oracle字符集。zh16gbk.5、nts适配器错误。
d:oracleproduct10.2.0db_1networkadminsqlnet.ora 把sqlnet.ora文件中的(nts)改为none,再重新启动oracleconfigudration and mirdatabase config.6、在windows中清理oracle。(1)删除注册表:
regedit-> local machine--> software-->oracle(2)删除oracle服务
regedit-> local machine-->system?currentcontrolset?services?ora*(3)删除oracle事件日志
(4)删除windows安装磁盘中program filesoracle目录。(5)删除oracle菜单。(6)删除oracle环境变量。
控制面板—>系统——>高级——>环境变量。总共删除2项。(7)重新启动操作系统
(8)删除oracle磁盘文件。篇二:oracle数据库学习总结 oracle数据库学习总结 时间过的还真快,不知不觉中就在这里呆了半个月了。这段时间里都在学习oracle数据库的编程,毕竟这是家软件外包公司。像我们这样的新员工也就只能接触到些curd的操作。废话不多说,赶紧来梳理下这半月来学习的知识点.在来公司之前一直都是使用sql server数据库,用sql server也开发了3个小型项目。所以对sql语句以及在数据库中扮演重要作用的存储过程,触发器,视图,主键/外键约束都很熟。但oracle是一个全新的环境,记得刚装上oracle的时候,我都不知道在哪查看自己已经建立好的表格。还好有师傅的帮忙,要不然我还真没这么快就能入门oracle。
学习东西就要学习些能改变自己思维的东西,只有这样才能让自己的眼光比别人更独到,思维比别人更深邃,oracle就是这样的东西。当然做这样的事是要很大的驱动力的呀,如果公司不是都采用oracle来写程序的话,我估计也就懒得学啦。
对于一位程序员来说并不需要完全掌握oracle的所有知识,毕竟自己不是dba。在日常开发中也用不到那些命令和工具,但是有些知识点我们还是必须得熟练的掌握它们。比如:一些基本的ddl和dml语句,存储过程,函数,视图,触发器,序列,游标,自定义类型和包。下面我就把这段时间里学习oracle获得的知识点罗列出来,一是为了方便以后查阅,二是为了和搭档交流学习经验。要适应的一些细节
从sql server转到oracle进行数据库编程,第一道门槛就是语法问题。很多很多的问题都是因为语法而产生的,现将它们统统集合起来并将它们一网打尽之。pl结构。在sql server中,采用的是批处理执行任务的方式,所以可以将多条sql语句选中批量执行,而不用顾忌要在专门的地方声明变量,在专门的地方进行逻辑编码。在oracle中采用的是pl编程方式,必须在专门的地方声明变
循环结构,要达到循环在oracle中有3种方式,各有各的好处,你懂的。它们分别如下: pl结构中的错误处理
就像c#中的try{} catch{}语句块 能捕获错误。写几个例子: helloworld级别的错误抛出例子record类型
oracle中的record类型类似于c语言中的结构体,主要用来接收select语句或游标中返回的数据,下面写个例子:ddl语句
这里的ddl语言主要是指能完成如下工作的ddl语言:创建表,创建表的主/外 键及级联效果,dml语句
select语句。oracle中的select语句的使用方法与sql server差不多,但还是有些不同之处。
篇三:oracle培训心得 oracle培训心得
2010年x月x日至x月x日,我有幸参加了工业和信息化部软件与集成电路促进中心主办的“oracle数据库高级实战培训班”学习交流。首先感谢学校领导给予了我这次学习机会。通过短暂的几天培训,我不仅对oracle知识有了部分的了解,也接受了很多最新的信息。在这次培训中,上课的老师有非常丰富dba经验,他结合他自身的dba工作经历,从oracle体系结构与网络配置、访问控制、事务处理与日志、闪回特性、数据库的备份与恢复和数据库性能监测与调整优化等几个方面对oracle进行了讲解。对课程讲解十分的详细。通过案例示范以及演示,指导我们一步步操作。
oracle主要以操作命令行为主,在学习的过程中,对老师的每一步操作都做好了记录。课堂上按照老师的要求一步步操作,课后按记录的操作步骤和命令反复多次的练习。以此到达了对oracle反复学习,熟悉掌握老师所传授的知识。
短短5天的高强度集中学习,我通过“xxxx”考试,取得了“xxxx”的认证。但是我知道依靠这几天的培训对oracle学习是不行的,还必须在实践中不断地努力,提升自身的专业技术能力。只有在不断的实践练习,才能够深刻了解它的原理和方法。在以后的工作中,我仍会继续学习各种关于oracle数据库的知识、持之以恒,在今后的工作中不断实践、总结、深入学习,全面掌握oracle知识。
第三篇:Oracle数据库总结范文
创建表及命名规则?
表名和列名:
必须以字母开头 必须在1–30个字符之间
必须只能包含A–Z, a–z, 0–9, _, $, 和# 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 Oracle默认存储是都存为大写
增删改查语法?
增加: 例如:使用INSERT语句往customers表中插入数据,指定相关列和值 INSERT INTO customers(customer_id, first_name, last_name, dob, phone)VALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
如果为表所有列都指定值,那么可以忽略列清单
INSERT INTO customersVALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
可以使用NULL为某些列指定空值
INSERT INTO customersVALUES(8, 'Sophie', 'White', NULL, NULL);
查询:select * fromcustomers;或者select字段 fromcustomerswhere条件 删除:deletefromcustomerswhere条件
更改:update customersset name = 'xiaoming',age = ‘16’(更改多个字段时候用逗号隔开)where 条件
对查询结果进行排序?
语句:select * fromcustomersorderby字段 desc;
(asc(升序),desc(降序)如果不写,默认升序)
NULL值了解么?
NULL值表示未知的值。它是一个特殊的值,但并不是空字符串,NULL值表示该列是未知的。当某些查询语句在输出结果列上看不到值的时候,可能就是NULL值
NVL()和NVL2():
NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,这可以通过NVL()函数来进行处理
NVL(x,value)是有value显示本身,null显示为替换的value NVL2(x,value1,value2)是如果x不为NULL值,返回value1,否则返回value2 例程:
select name,nvl2(email,'已知','未知')from student;【代码含义:代表如果email字段中有值,则显示已知,null则显示未知,如果想显示本来的查询结果select name,nvl(email,'未知')from student;】 update student set name = replace(name,'小','大');【代码含义:代表将STUDENT表中NAME 字段中如果含有小字,那么就将小字替换为大字(操作的不是显示结果,而是将表中数据进行更改)】
Oracle中的简单函数?
字符串函数
concat:将x和y拼接起来,并返回新字符串
例程:
select concat(first_name,'-'||last_name)姓名 from customers; Instr字符查找,从1开始。
select instr('asdbcrdbewqrbmde','b')from dual;select instr('asdbcrdbewqrbmde','b',5,2)from dual;【代表从第5个字符开始,第二个b所在的位置】
Ltrim : LTRIM(x,[trim_string])从x字符串左侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除左侧空白字符
Rtrim RTRIM(x,[trim_string])从x字符串右侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除右侧空白字符 Trim TRIM(trim_string FROM x)从x字符串两侧去除trim_string字符串
Replace REPLACE(x, search_string, replace_string)从字符串x中搜索search_string字符串,并使用replace_string字符串替换。用select执行并不会修改数据库中原始值,但是用update执行可以修改。
Substr SUBSTR(x, start,[length])返回字符串中的指定的字符,这些字符从字符串的第start个位置开始,长度为length个字符;如果start是负数,则从x字符串的末尾开始算起;如果length省略,则将返回一直到字符串末尾的所有字符
例程:
select substr('abcd月fg',4,2)from dual;(结果:d月)select substr('abcdefg',-2)from dual;(结果:fq)
日期函数
Sysdate 例程:
Selectsysdatefromdual;
Select to_char(sysdate, 'yyyy-mm-dd-hh-mm-ss')from dual;
Add_months(d1,n1) last_day():
转换函数
To_char TO_CHAR(x,[ format])将x转化为字符串。format为转换的格式,可以为数字格式或日期格式
select to_char(sysdate,'yyyy-mm-dd')from dual;【一般在查询时候使用,使返回的值成为指定格式】
to_date TO_DATE(x,[format])将x字符串转换为日期
insert into student values(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);【一般在添加使用】 返回所查询的值中最后一个日期数据。
聚合函数
Avg:平均数 Sum:求和 Max:最大值 Min:最小值 Count:返回统计的行数 Round:四舍五入
例程:
select round(avg(bid),1)from bug;分组了解么?
有时需要对表中的行进行分组,然后统计每组的信息,可以使用GROUP BY进行分组,然后再对每组进行统计。
(1)可以使用GROUP BY对多个列进行分组
例:
SELECT product_id, avg(customer_id)FROM purchases GROUP BY product_id;
(2)可以对分组后的行使用聚集函数,聚集函数会统计每组中的值,对于每组分别统计后返回一个值 例:
SELECT
product_type_id,BY
COUNT(ROWID)FROM
BY
productsGROUP product_type_id;注意:
product_type_idORDER a)如果查询中使用了聚集函数,被查询的列未使用聚集函数处理,那么这些列必须出现在GROUP BY子句后,否则,会提示ORA-00937错误
b)不能使用聚集函数作为WHERE子句的筛选条件,否则,会提示ORA-00934错误
c)可以使用HAVING子句过滤分组后的行
SELECT...FROM...WHERE GROUP BY...HAVING...ORDER BY...;(GROUP BY使用时可以不使用HAVING,但是使用HAVING时必须有GROUP BY才有意义)
(3)同时使用WHERE, GROUP BY和HAVING
a)首先,执行WHERE筛选掉不符合条件的行 b)然后,将符合条件的行使用GROUP BY进行分组 c)最后,使用HAVING对分组统计的结果进行再次筛选 例:
SELECT product_type_id, AVG(price)FROM products
WHERE price < 15
GROUP BY product_type_id HAVING AVG(price)> 13 ORDER BY product_type_id;
表的约束条件?
目的:
确保表中数据的完整性。
常用的约束类型: 主键约束(PRIMARY KEY):要求主键列数据唯一,并且不允许为空 非空约束(NOT NULL):指定的列的值不允许为空
唯一键约束(UNIQUE):要求该列唯一,允许为空,但只能出现一个空
值
检查约束(CHECK):指定表中一列或多列可以接受的数据值格式 默认约束(DEFAULT):指定某列的默认值
外键约束(FOREIGN KEY):用于建立和加强两个表数据之间连接的一
列或多列。通过将表中的主键列添加到另一个表中。可以创建两个表之间的连接。这个主键的列就称为第二个表的外键。外键约束就可以确保添加到外键表中的任何行都在主表中都存在相应的行
多表查询?
不同的数据存储在不同的表中,通常要查询多张表才能找到需要的数据
例程: SELECT products.name, product_types.name FROM products, product_types WHERE
products.product_type_id
= product_types.product_type_id AND products.product_id = 3;
products表和product_types表相关字段会用在SELECT语句及WHERE子句上,可以给表起别名,提高代码可读性、降低书写难度 例程:
SELECT p.name, pt.name FROM products p, product_types pt WHERE p.product_type_id = pt.product_type_id AND p.product_id = 3 注意:
如果查询两张表,并且没有定义连接条件,那么查询的结果集是两表相乘的结果,这样的情况称之为笛卡尔乘积。总结:多表查询WHERE时,连接次数=查询时连接表的数量-1
常见的三种连接类型:
内连接:
内连接返回的行只有满足连接条件才会返回。如果连接条件的列中有NULL值,那么该行则不会返回 外连接:
外连接返回的行满足连接条件,也包括在连接条件的列包含空值的行
自连接:
连接的表为同一张表
子查询?
子查询是嵌入到另一个SELECT语句中的一个SELECT语句。通过使用子查询,可以使用简单的语句组成强大的语句。当需要从表中选择行,而选择条件却取决于该表自身中的数据时,子查询非常有用。
单行子查询:(1)可以将另外一个查询作为WHERE子句的子查询
例:查询尾名是‘Brown’的首名和尾名
SELECT first_name, last_name FROM customers
WHERE customer_id =
(SELECT customer_id FROM customers WHERE last_name = 'Brown');(2)在单行子查询还可以使用其他比较运算符,如<>、<、>、<=和>= 例:查询价格大于平均价格的商品编号、名称及价格
WHERE子句中使用>,以及子查询中使用AVG()聚集函数
SELECT product_id, name, price FROM products WHERE price >(SELECT AVG(price)FROM products);(3)在HAVING子句中使用子查询
HAVING是在分组统计后用于过滤行,同样在HAVING子句后面可以跟子查询。单行子查询将返回结果用于HAVING子句过滤分组统计的行
例如:查询平均价格小于最大平均值的商品编号及平均值
SELECT product_type_id, AVG(price)FROM products GROUP BY product_type_id HAVING AVG(price)<(SELECT MAX(AVG(price))FROM products GROUP BY product_type_id)ORDER BY product_type_id;
分页查询?
可以通过ROWNUM来实现。
序列?
序列是一个数据库对象,用于生成一系列的整数。
索引?
索引是与表关联的可选结构。可以创建索引以加快对表执行SQL语句的速度。就像书的索引可以帮助我们更快速的查找信息一样,Oracle中的索引也提供了一种更快地访问表数据的途径。
视图?
视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。数据库中只在数据字典中存储对视图的定义。
第四篇:oracle视图总结
oracle视图总结(转)
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。
视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。2.用户通过简单的查询可以从复杂查询中得到结果。3.维护数据的独立性,试图可从多个表检索数据。4.对于相同的数据可产生不同的视图。
视图的分类:
视图分为简单视图和复杂视图。
两者区别如下:
1.简单视图只从单表里获取数据,复杂视图从多表获取数据; 2.简单视图不包含函数和数据组,复杂视图包含; 3.简单视图可以实现DML操作,复杂视图不可以。
视图的创建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 其中:
OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图; FORCE:不管基表是否存在ORACLE都会自动创建该视图; NOFORCE:只有基表都存在ORACLE才会创建该视图: alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束; WITH READ ONLY : 该视图上不能进行任何DML操作。
例如: Sql代码
1.CREATE OR
REPLACE
VIEW dept_sum_vw
2.(name,minsal,maxsal,avgsal)
3.AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
4.FROM
emp e,dept d
5.WHERE e.deptno=d.deptno
6.GROUP BY d.dname;
视图的定义原则:
1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询; 2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用 ORDER BY 子句;
3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象权限。
查询视图:
视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。示例:
SQL>SELECT * FROM dept_sum_vw;
修改视图:
通过OR REPLACE 重新创建同名视图即可。
删除视图:
DROP VIEW VIEW_NAME语句删除视图。删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。视图被删除后,基于被删除视图的其他视图或应用将无效。
查询视图定义:
SELECT view_name,text from user_views;其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS 得到相关信息。
视图上的DML 操作: DML操作应遵循的原则:
1.简单视图可以执行DML操作; 2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行; 3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字; b.使用表达式定义的列; c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。WITH CHECK OPTION 子句
通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。(也就是说在执行INSERTS、UPDATES时,WHERE条件中除需要INSERT、UPDATE本身的限制条件之外,还需要加上视图创建时的WHERE条件。)
例如:
CREATE OR REPLACE VIEW vw_emp20 AS SELECT * FROM emp WHERE deptno=20 WITH CHECK OPTION constraint vw_emp20_ck;视图 已建立。
查询结果:
SELECT empno,ename,job FROM vw_emp20;EMPNO
ENAME
JOB---------------------
--------------
-------------7369
SMITH
CLERK 7566
JONES
MANAGER 7902
FORD
ANALYST 修改:
UPDATE vw_emp20 SET
deptno=20 WHERE empno=7902;将产生错误:
UPDATE vw_emp20 * ERROR 位于第一行:
ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1,Oracle是可以通过视图来修改Base table的。所谓base table就是用来构建视图的表,也就是视图的数据来源表。但是这种修改是有条件的。比如: create view v_emp as select empno,ename,job,deptno from emp where deptno=10 with check option constraint emp_cnst;如果有这个限制,那么通过视图v_emp 插入数据的deptno字段的值必须是10,否则就会报“ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句”的异常。
2,联结视图:
create view dept1_staff as select e.ename, e.empno, e.job, d.deptno, d.dname from emp e,dept d where e.deptno in(10,30)and e.deptno = d.deptno; 将两个表的数据联结起来,看起来应该是一个内联结(Inner joint)。
对于联结视图(Joint view)的修改规则稍显复杂,设计到所谓key_preserved table的概念。通过联结视图来修改基表,只有那些key_preserved 的表才能被修改。上述创建视图语句中emp和dept通过deptno进行联结构成视图时,emp就是key_preserved 表,而dept不是。为什么?因为在dept1_staff 中empno的值唯一的而deptno不是唯一的。所以emp是key_preserved 而dept不是。因此只能通过该视图来修改emp,而不能修改dept的数据。
3,Oracle视图非常强大的功能之一在于其可以创建一个带有错误的视图。比如说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。当基表里加入了该字段,或者说某个字段修改成视图里的该字段名称,那么视图马上就可以成为合法的。这个功能很有意思。例子:
创建基表: create table v_test(name varchar2(32),age number(12));创建带错误的视图:
create force view view_test as select name,age,address from v_test;(注意加上force选项)
由于address字段在v_test里不存在,所以会报warning: View created with compilation errors的警告,而且执行select * from view_test;时会报“ORA-04063: view “SCOTT.VIEW_TEST” 有错误”的异常。但是如果在v_test里加上address字段,那么视图就会合法。对基表进行修改:
alter table v_test add(address varchar2(128));
现在再执行select * from view_test;就会执行成功了。
from:http://www.blogjava.net/jinhualee/archive/2006/07/14/58115.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
其他问题总结:
1、视图上是否可以创建索引?
一般视图上不用建立索引,对视图的操作最终会转化为对表的操作。一个讨论:http://www.itpub.net/viewthread.php?tid=150019&extra=&page=1
第五篇:报关员日期总结
2小时:民航降停或起飞前2个小时通知海关。
24小时:海关对走私嫌疑人扣留时间,特殊可延长至48小时
24小时:出口货物应当在货物运抵海关监管区后,装货的24小时以前向海关申报。
24小时:进境船舶报关,应在船舶抵达口岸前或抵达口岸后24小时内申报。如果不能及时提供齐全的载货清单,出具保函后,应卸货后的24小时以内补齐交给海关。出境时,应在驶离口岸前24小时通知海关(如停泊时间不足24小时,应在抵达口岸时),办理出口岸手续。
3日:海关发现进出境货物有侵犯知识产权嫌疑的,应制作扣留凭证送达收(发)货人,并书面通知权利人,权利人自通知送达之日起3日内提出知识产权保护措施书面申请的海关予以扣留。
3日:办理出口退关手续时,应自得知货物未装上运输工具并决定不再出口之日起3天内申请。如果已缴纳出口税,可以在缴纳税款之日起1年内申请退还。
5日:纳税人应自海关签发吨税缴纳书之日起5日内缴清吨税,并由海关签发船舶吨税执照。5天:出口监管仓库的经理人应在每一个月的前5天将上月进出库及结存情况向海关核报。5天:保税仓库经营人应于每月的前5天定期向海关报送“收、付、存月报表”。
5天:提前报关的进口转关货物应在电子数据早报之日起5天内向进境地海关办理转关手续。提前报关的出口转关货物应在电子数据申报之日起5日内,运抵启运地海关监管场所办理转关手续。
7日:收货人或者发货人认为货物未侵犯权利人知识产权的,应当自海关扣留凭单送达之日起向海关提出书面说明。提出异议的,由海关通知权利人或代理人,他们在书面通知送达之日起15日内,有权将侵权争议提请知识产权主管部门处理或者向法院提起诉讼。
7天,纳费人应当自海关签发手续费缴纳证次日起7天内向海关缴纳手续费,逾期按日征收1‰的滞纳金,滞纳金起征点为10元,10元以下免于征收。
10日:进入加工区的货物因不可抗力造成短缺、损毁的,自发现之日起10日内向海关报告。
10日:加工区之间货物的往来,不能按转关运输办理的,转入区海关向收货人收取保证金。货物运入转入区经海关核对后10个工作日内退还保证金。
14日:进口货物的收货人应当自运输工具申报进境之日起14日内,出口货物的发货人除海关特准之外应当在货物运抵海关监管区,装货的24小时以前向海关申报,最后一天为法定节假日或休息日的,延至之后的第一个工作日。未申报的,自申报期限到期次日起,日征收进口货物完税价格的0.5‰的滞报金,起点为人民币10元。超过3个月海关将依法变卖货物。1年内如申请,可以返还变卖所剩金额。
14日:转关货物应当自运输工具申报进境之日起14天内向进境地海关办理转关手续,在海关限定期限内运抵指运地海关之日起14天内,向指运地海关办理手关手续。逾其按规定征收滞报金。
14日:办理直接退运手续时,如果属于应领取许可证件的进口货物,应当在运输工具申报进境之日起14日内提出书面申请;如果因错发、错运请求直接退运,应当在向海关正式申报前或海关确定查验前提出书面申请(已申报或已决定查验的,在海关查验并确认为错发、错运后提出);其他货物,应在运输工具申报进境之日起或自运输工具卸货之日起3个月内提出申请。
15日:报关员遗失报关员证应15日内向海关说明。海关在声明作废之日起3个月内补发。
15日:保税工厂或保税集团应在每季度第一个月15日前向海关报送报表。
15日:海关将在扣留嫌疑货物之日起15日内开始调查。
20天:担保期不得超过20天,特殊情况下可海关申请延期。
1个月:外资企业出资并在有关会计师事务所验资后1个月内向海关提交验资报告。否则海关将撤销减免税登记。
1个月:加工贸易合同核销时限,经营加工贸易的企业在加工贸易合同到期或最后一批成品出运后一个月内申请核销。加工装配合同、进料对口合同以出口交货的最后期限为合同期;进料非对口合同、保税工厂和保税集团加工贸易合同以海关核发《登记手册》之日起1年为合同期,也是手册的有效期。最后一批成品出运早于合同期的,应当在出运后1个月内向海关申请核销;迟于合同期,应当在合同到期1个月内申请核销。
2个月:出口加工区内使用的机器、设备、办公用品等运往区外维修、测试或检验,应自运出之日起2个月内复运进区。特殊情况下不能运回的,应于期满前7天内申请延期,延期不得超过1个月。
3个月:进口货物的收货人自运输工具申报进境之日起超过3个月未向海关申报的,其进口货物由海关提取依法变卖处理。自货物变卖之日起1年内收货人申请予以发还。
3个月:过境货物自进境之日起超过规定的3个月期限未向海关申报的,海关关提取变卖。
3个月:过境货物申报进境后6个月内不能出境的,经海关同意,可延期3个月。
3个月:外国转运货物在中国口岸存放期间,不得开拆、改换包装或进行加工,并在3个月内办理海关手续并转运出境
3个月: 进口误卸、溢卸货物,经海关确认后,由原运输工具的负责人自卸货之日起3个月内申报退运出境手续,或由收发货人办理退运或进口手续。经海关同意,可延期3个月。
3个月:暂时进境或租借进境的集装箱应在进境之日起3个月内复运出境。特殊情况下,经海关批准可以延期,但不得超过3个月。
3个月:进境行邮物品在3个月内应海关申报。
3个月:申请商品归类行政裁定应当在货物拟进出口的3个月前向海关总署或授权海关提出书面申请,海关受理之日起60日内作出行政裁定并通知申请人和对外公布。
3个月:查验货物被海关损坏后,自收到《赔偿通知单》之日起3个月内凭以向海关领取赔款。3个月:特定减免税的《进出口货物征免税证明》有效期3个月,经海关批准可以延长,最长延长期限是3个月。
3个月:转运货物、通运货物应自入境之日起3个月内出境。
6个月:保税区委托区外企业加工货物,加工期限为6个月,可申请延期,延长期不得超过6个月。6个月:过境货物应自入境之日起6个月内运输出境,经海关同意,可以延期,延期不得超过3个月。6个月:暂时(准)进出口货物的担保期限是货物进出口之日起的6个月,经海关批准可以延期6个月。
暂时进口的施工机械、工程车辆、供安装使用的仪器、工具和电影、电视摄制机械、能及装货物的容器,应自延期第一个月起每月按原进口货物的完税价格的1/48为完税价格缴纳进口税。不足一个月的按1个月缴纳。半年:加工区企业自开展出口加工业务或仓储业务之日起,每半年向海关进行一次核销手续。6个月:食糖、棉花、植物油、羊毛和天然橡胶加工贸易的制成品返销期限原则上不超过6个月。6个月:出口加工贸易的出口料件应自出口之日起6个月内复进口。
6个月:保税区企业委托非保税区企业加工期限为6个月,特殊可展延6个月。
6个月:保税区企业委托非保税区企业加工期限为6个月,特殊可展延6个月。
6个月:加工区原则上不得委托区外企业进行产品加工,在经主管海关关长批准后,由接受委托我区外企业向加工区主管海关缴纳货物等值的保证金后办理出区手续。加工期限6个月,不得延期。
6个月:在海关提出追索之日起6个月内,担保人有权向海关提供货物已复出口或ATA单证册已合法注销的证据。
6个月:进口展览品应自进境之日起6个月内复运出境,经海关批准,可以延长,延长期不得超过6个月。
6个月:暂准进口货物应于进口之日起6个月内全部复运出境。如需延期,应提前海关提出申请。延长期满后不再给予延长,如特需,应报海关总署批准。对施工机械、工程车辆、供安装使用的仪器、工具和电影、电视摄制机械以及盛装货物的容器,在延长期内,自第7个月开始按月征收进口关税及进口环节税。1年:《加工贸易业务批准证》上规定的出口制成品返销期限一般不得超过1年。
保税监管期限:
1年:进口加工贸易的进口料件应自进口之日起1年内复出口;
1年:保税仓库所存货物的储存期限为1年。延期最长不能超过1年。所存货物超过3个月未转为进口或复运出口,由海关依法变卖,自变卖之日起1年内,经货主申请予以发还。
3年:自进出口货物放行之日起3年内或者在保税货物、减免税进口货物的海关监管期内及其后3年内,海关可以对有关单位的会计账簿、凭证及其他有关资料进行稽查。
3年:无代价抵偿货物应在原进出口合同规定的索赔期内(最长不得超过3年)进出口,超过期限的,不能按无代价抵偿货物报关。
5年:特定减免税机器设备和其他设备、材料等的监管年限是5年。
6年:特定减免税机动车辆(除特种车辆即主要不是载人或载货的以外都已停止免税)和家用电器的监管年限是6年。
7年:知识产权海关保护的备案自海关总署签发《知识产权海关保护备案证书》之日起生效,有效期为7年。如果法律保护有效期不足7年,以法律保护期为准。要求续展备案的,应在期满前6个月向海关总署申请。
8年:特定减免税船舶、飞机及建筑材料(包括钢材、木材、胶合板、人造板、玻璃)的监管年限是8年。
10%:海关监管期内用于维修或用于改进已免税的仪器、仪表和设备而单独进口金额不超过整机价值10%的专用零部件及配件免税。
10%:凡ATA单证项下货物不符合暂准进口或过境条件的,海关将向担保人罚款,金额一般不超过税费的10%,即(关税 消费税 增值税)*10%
12%:目前我国关税总水平已下降到12%。
1000平方米:国家举办展览展位总面积在1000平方米以上的对外经济技术展览会,实行分级审批。
两倍:海关货物扣留后,收发货人认为未侵犯知识产权的,可提交货物到岸价(离岸价)两倍的担保金。41:目前直属海关共有41个
1983年,海关理事会通过了《商品名称及编码协调制度的国际公约》及《协调制度》并于1988年1月1日起生效。到2002年11月,缔约成员国已达101个,正式采用《协调制度》的有179个。
2002年1月,我国对进口税则税目税率进行调整,总税目数增加到7316个,其中5332个税目的税率有不同程度的降低。
2002年出口税则中一共有36个税目征收出口税,其中对23个税目实行出口暂定税率,其余的不征税。目前,我国对原油、黄酒、啤酒和胶卷等进口商品征收从量税,对录像机、放像机、报像机、数字照相机和报录一体机等进口商品征收复合税,仅对新闻纸征收滑准税。
关于税率:2002年进口税则暂定最惠国税目税率表一有164个税号,表二有45个税号;对23个税号制订了出口暂定最惠国税率。2002年我国对小麦、豆油等10种农产品和尿素等3种化肥产品实行关税配额管理,共11种56个税号。
船舶吨税:仅对行驶于我国港口的外国籍船舶、外商租用、中外合营企业租用的外国籍船舶征收。如果按30天期缴纳,按法定税级税率减半征收,按3个月期,全额征收。
海关监管手续费仅对进口减免关税的货物和保税货物征收。但赠送、救灾及残疾人物资、海关放行前受损货物、向外国索赔而准予减免税货物、进口后未经加工,保税储存不足90天即转运复出口货物、暂时进口货物、收取手续费在10元以下的减免税货物免收或暂免收手续费。
3‰:进口免税货物及其他保税货物按照海关审定价格3‰计征。进口减税货物,按照实际减除税负部分的货物价格的3‰计征:货物价格×(1-实征关税率/法定税率)×3‰
1‰:进口后保税储存90天以上未经加工即转运出口的货物,进料加工和来料加工项目,属于首饰行业进口免税的料、件及来料加工项目中的裘皮加工、机织毛衣和毛衣片、塑料玩具,按货物价格的1‰征收。
1.5‰:进料加工和来料加工项目,属于加工装配机电产品复出口的货物,按货物价格的1.5‰计征。0.5‰:出口监管仓库货物的报关,进库货物按基本报关程序办理出口报关手续,缴纳货物出口完税价格的0.5‰的监管手续费,要到货物实际离境时才能领取出口退税单。
3‰:在确定进口货物完税价格时,如果陆运、空运和海运进口货物的保险费无法确定或未实际发生,海关应当按“货价加运费”总额的3‰计算保险费。
1%:在确定进口货物完税价格时,以境外边境口岸价格条件成交的铁路或公路运输进口货物,海关应当
按照货价的1%计算运输及相关费用、保险费。
加工贸易项下出口应税商品:
出口关税 = 出口货物完税价格×出口关税税率×出口成品中使用的国产料件占全部料件的价值比例进出口货物关税从价计算公式:
进口货物应纳关税税额 = 进口货物完税价格×适用的进口关税税率
进口货物完税价格 = CIF价格 = FOB价格+运费/1-保险费率 = CFR价格/1-保险费率
出口货物应纳关税税额 = 出口货物完税价格×适用的出口关税税率
出口货物完税价格 = FOB-出口税 = FOB价格/1+出口关税税率
进出口货物关税从量计算公式:
进口货物应纳关税税额 = 进口货物数量×适用的单位税额
出口货物应纳关税税额 = 出口货物数量×适用的单位税额
进口环节税的从价计算公式:
应纳增值税税额 = 增值税组成计税价格×增值税税率
增值税组成计税价格 = 进口货物完税价格+进口关税税额+消费税税额
应纳消费税税额 = 消费税组成计税价格×消费税税率
消费税组成计税价格 = 进口货物完税价格+进口关税税额/1-消费税税率
从量计算公式:
应纳消费税税额 = 进口货物数量×消费税单位税额
特定减免税货物的估价:
完税价格=海关审定的该货物原进口时的价格×[1-申请补税时实际已使用的时间(月)/监管年限×12]需缴纳关税的暂准进出境货物的计算公式:
每月关税税额=关税总额×(1/60)
每月进口环节代征税税额=进口环节代征税总额×(1/60)
其他税费计算公式
反倾销税税额 = 完税价格×适用的反倾销税税率
应纳船舶吨税税额 = 注册净吨位×传播吨税税率
关税滞纳金金额 = 滞纳的关税税额×0.0005×滞纳天数
代征税滞纳金金额 = 滞纳的代征税税额×0.0005×滞纳天数
进口货物滞报金金额 = 进口货物完税价格×0.0005×滞纳天数
缓税利息=补征税款×计息期限×(活期存款储蓄年利息率/360)