`
duyouhua1214
  • 浏览: 238061 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ORACLE笔记

阅读更多

SQL-----------关系数据库的基本操作语言,是应用程序与数据库进行交互操作的接口

 

DESC(describe) 表----查看某表的结构

 

SQL包括:

数据查询语言(SELECT)

数据操纵语言DML(INSERT,UPDATE,DELETE)--------用于操纵表和视图的数据

事务控制语言(COMMIT,ROLLBACK,SAVEPOINT)

数据定义语言(CREATE,ALTER,DROP)

数据控制语言(GRANT,REVOKE)

 

SELECT注意:

1.SELECT出来的日期默认显示格式为"DD-MM-YY",若要显示"YYYY-MM-DD"格式的字段内容,则在SELECT后要查询的字段使用TO_CHAR函数---------TO_CHAR(date字段,"YYYY-MM-DD")

2.DISTINCT(取消重复行)(distinct截然不同的意思)

   默认的SELECT查询是保留重复行的,若想取消重复行则使用SELECT DISTINCT +字段名

3.给列取别名时,AS可用可省略,若别名中包含特殊字符或空格,则必须要用“”把别名引起来

4.NULL----表示未知值,即不是空格也不是0.若插入数据时没有给某列提供数据且该列没有默认值,则其值为NULL,算数表达式中若包含NULL其结果也为NULL

若想将值为NULL(值为NULL的列内容不显示数据)的数据有所显示,可使用NVL或NVL2函数

NVL(X,0)即当X为NULL时显示为0,若不为NULL时显示X(即正常显示原值)

NVL2(X,e1,e2)即当X不为NULL时显示e1(即正常时),为NULL时显示e2

5.连接字符串-------用||

即在SELECT后面,将要查询的字段名及一些字符串连接起来,显示的时候会显示查询出的字段值及所连接的字符串结合的整个字符串,注意:使用||连接数字直接加上数字即可,若连接字符串和日期则要使用单引号''引起来

6.在WHERE条件子句中可使用UPPER或LOWER来避免由于查询条件的大小写不匹配引起的问题

如WHERE LOWER(name)='gaga'

7.在WHERE条件中使用日期值----------------WHERE date>'日期常量'(要使用单引号)

注:日期值必须要符合默认的日期显示格式,否则要使用TO_DATE函数进行转换

如:符合默认日期显示格式------WHERE date>'01-1月-10'

      不符合默认日期显示格式----WHERE date>TO_DATE('2010-01-01','YYYY-MM-DD')

8.模糊查询LIKE--------------

通配符%:表示0个或多个字符

          _:表示1个字符

注:若字符串原值本身包含%或_这两个特殊字符,则要在ESCAPE后使用转义字符(oracle中默认\为转义字符)

如:WHERE name LIKE '%a_%' ESCAPE 'a'

查询姓名中包含_字符的记录,ESCAPE后的字符a为转义字符

9.IS (NOT )NULL-----判断是否为NULL,不要使用=NULL,如WHERE name=NULL,则WHERE条件句不管什么情况都返回false

10.查询结果显示的顺序默认是按照数据插入的先后顺序来显示,ORDER BY x ASC|DESC用于排序,默认是ASC升序排列

当包含有GROUP BY,WHERE,ORDER BY多个子句时,ORDER BY必须在最后

注:升序排列(ASC)--------排序列值为NULL的记录显示在最后面,(即视NULL为无限大)

      降序排列(DESC)------排序列值为NULL的记录显示在最前面,(即视NULL为无限大)

 

INSERT注意:

1.INSERT插入日期值

插入日期值时,日期值(日期常量,用''括起)必须符合默认日期格式、日期语言.若用习惯方式(即YYYY-MM-DD格式)插入日期数据,则使用TO_DATE函数进行转换,例:

INSERT INTO TABLE1 (id,date) VALUES ('1',TO_DATE('2012-12-21','YYYY-MM-DD'))

2.INSERT插入数据时可使用DEFAULT关键字,如:INSERT INTO T1 (id,name) VALUES ('1',DEFAULT)

****即当name列有默认值则使用默认值,若没有则自动使用NULL(*****等同于不给该列提供数据???)

3.使用子查询插入数据------INSERT INTO TABLE [(field1,field2,....)] +子查询语句(即SELECT)

将INSERT列的数据类型和个数必须要与子查询列的数据类型和个数完全匹配.

例:

//使用子查询插入数据

INSERT INTO employee (id,name) SELECT id,name FROM emp

//使用子查询执行直接装载

INSERT /*+APPEND*/ INTO employee (id,name) SELECT id,name FROM emp

以上两种方式执行结果一样,但方式2使用/*+APPEND*/表示采用直接装载方式,当要装载大批量数据时速度要远远优于方式1

4.使用多表插入数据------将子查询或某个表的数据同时插入到多张表中

使用INSERT ALL/FIRST************************待整理

 

 

UPDATE注意:

1.更新日期列数据,日期格式必须与默认日期格式、日期语言相匹配。如果使用习惯格式(YYYY-MM-DD)修改日期数据,则需要使用TO_DATE函数进行转换,如UPDATE table1 SET date=TO_DATE('2012-12-21','YYYY-MM-DD')

2.使用子查询更新数据(有时可减少网络开销,比如多次对数据库的操作可由此变为对数据库的一次操作)

比如:希望使员工A的岗位、工资、补助与员工B的完全相同------

原始做法:先查询出员工B的信息:SELECT job,sal,comm FROM emp WHERE name='B'(查询结果为x,y,z)

               然后修改员工A的信息与B相同:UPDATE emp SET job='x',sal='y',comm='z' WHERE name='A'

使用子查询更新的数据的做法:

UPDATE emp SET (job,sal,comm)=(SELECT job,sal,comm FROM emp WHERE  name='B')WHERE name='A'

3.复制表数据*******待整理,触发器****???

 

DELETE注意:

1.删除表中所有的数据:DELETE FROM table1(不释放表的空间,可回退)

   截断表:                  TRUNCATE table1 (速度更快,释放表的空间,不可回退)

DELETE删除表中所有的数据,但不释放表所占用的空间;TRUNCATE不仅删除表中所有数据,还会释放表占用的空间
DELETE操作可回退,TRUNCATE不可回退

2.使用子查询删除数据(即使用子查询作为删除条件)

删除/解雇SALES部门所有的员工:DELETE FROM emp WHERE deptno=

                                                                            (SELECT deptno FROM dept WHERE dname='SALES')

3.删除主表数据的注意事项:当删除主表数据时,必须确保从表不存在相关记录。

 

 

使用事务控制语句-----事务---用于确保数据库数据的一致性,它由一组相关的DML语句组成。(如:INSERT,DELETE,

                                        UPDATE或SELECT...FOR UPDATE)

                                        该组DML语句所执行的操作要么全部成功,要么全部取消。

                                        (比如帐户转帐,两帐户金额一增一减两个操作要么全部执行,要么全都不执行)

                       在应用程序中当执行第一条SQL语句时,开始事务;当执行COMMIT或ROLLBACK时结束事务

 

1.当执行事务操作(DML语句)时,Oracle会在被作用表上加表锁,以防止其他会话更改表的结构;同时会在被作用行上加行锁,

以防止其他事务在相应行上执行DML操作

2.为确保数据库数据的读一致性,不允许其他会话读取脏数据(即事务还未提交的数据)

例事务A修改了一数据D,在事务A提交之前,另一事务B访问数据D时,获得的是事务A修改数据D之前的数据

(在事务A修改数据D后事务提交之前,修改后的数据D为脏数据,其他会话是不充许读取的)

3.提交事务代表着事务结束、删除保存点、释放锁.当下列情况出现时会自动提交事务:

                                   1)当执行DDL(Data Definition Language)语句时,如CREATE TABLE,ALTER TABLE,DROP

                                   2)当执行DCL(Data Control Language)语句时,如GRANT,REVOKE.

                                   3)当退出SQL*Plus时*****???

4.保存点:事务中的一点,当ROLLBACK时,通过指定保存点可以回退部分事务

设置保存点:savepoint a;(使用SQL命令)

               或exec dbms_transaction.savepoint('a') (使用包DBMS_TRANSACTION的过程SAVEPOINT设保存点)

 回退事务:    rollback to a;(使用rollback命令,回退部分事务)

               或exec dbms_transaction.rollback_savepoint('a')(使用包DBMS_TRANSACTION的过程rollback_...)

                  rollback;        (使用rollback命令,回退全部事务)

               或exec dbms_transaction.rollback (使用包DBMS_TRANSACTION的过程ROLLBACK)

5.当出现系统灾难时会自动回退其事务变化

6.只读事务----只允许查询操作,不允许执行任何DML操作的事务.----使用只读事务可取得特定时间点的数据,如:

在特定时间设置只读事务,即不允许DML操作,因此不会担心该特定时间之后的DML操作对数据查询造成影响

设置只读事务:SET TRANSACTION READ ONLY

                或exec dbms_transaction.read_only(使用过程READ_ONLY设置只读事务)

注意:设置只读事务时,该语句必须是事务开始的第一条语句

7.顺序事务----可以使用户取得特定时间点的数据,且允许执行DML操作.

会话A在时间点1设置顺序事务:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE(必须为事务开始的第一条)

会话B在时间点2更改数据:

会话A在时间点3查询被更改的数据:获得的是时间点1的数据,而不是时间点2更改后的数据(注意但是更改操作已经执行)

 

 

数据分组(分组函数,GROUP BY,HAVING共同实现)

1.分组函数(多行函数)----与单行函数不同,分组函数作用于多行,并返回一个结果.以下是最常用的7个分组函数

  MAX,MIN,AVG,SUM,COUNT,VARIANCE(方差),STDDEV(标准方差)

2.分组函数只能出现在选择列表(用来显示统计的数据),HAVING子句(统计数据用来作为筛选条件),ORDER BY子句(在此

   不作为统计的结果,而是作为列名,如avg(sal),指按该列排序)

3.使用分组函数时,除了COUNT(*)之外,其它分组函数都会忽略NULL行,COUNT(列名)也忽略NULL行

   即COUNT(name)指表中name列的值不为NULL的个数

4.当执行SELECT语句时,如果选择列表同时包含列、表达式和分组函数,则这些列和表达式必须出现在GROUP BY子句中

5.分组函数中可指定ALL/DISTINCT选项,默认为ALL即包括重复项;DISTINCT只会统计不同行值

   如统计员工表中所有员工不同的姓名的个数:

   SELECT count(distinct name) FROM emp

   等同于:SELECT count(*) FROM (SELECT DISTINCT name FROM emp)

6.GROUP BY进行多列分组,例:员工表emp中有岗位(job),部门编号(deptno),工资(sal)等字段,若想显示每个部门每个岗

                                          的平均工资和最高工资

                                      SELECT deptno,job,avg(sal),max(sal) FROM emp GROUP BY deptno,job

                                      (每个部门有多个岗位,这样每个部门的每个岗位为一条记录)

7.使用HAVING子句限制分组显示结果

   例:SELECT deptno,avg(sal) FROM emp GROUP BY deptno HAVING avg(sal)<2000

8.使用GROUP BY子句统计数据时,会自动按照分组列的升序方式显示统计结果,通过ORDER BY子句可改变数据分组的顺序

   例:SELECT deptno,avg(sal) FROM emp GROUP BY deptno ORDER BY avg(sal) (此处avg(sal)相当于列名)

9.若SELECT子句中同时包含GROUP BY,HAVING,ORDER BY子句,则必须将ORDER BY子句放在最后.

10.ROLLUP/CUBE操作符---产生横向/纵向的统计小计

分享到:
评论

相关推荐

    Oracle笔记

    这个是我学习网上的视频做的oracle笔记,对于oracle一窍不通的菜鸟可能有用吧,大家有需要可以看看

    2011Oracle笔记(李兴华视屏教程笔记)

    标题“2011Oracle笔记(李兴华视屏教程笔记)”揭示了文档的用途,它是作为2011年李兴华Oracle教学视频课程的学习笔记。这种笔记通常包括了课程中的重点概念、Oracle数据库基础知识、实际操作案例以及配合视频教程的...

    史上最全的oracle笔记

    这篇史上最全的Oracle笔记将为你提供全面的学习指导。 一、数据库基础 数据库(DataBase)是存储数据的系统,Oracle数据库允许用户以表格的形式组织和管理数据。在Oracle中,数据主要以表的形式存在,表是数据库中...

    韩顺平oracle笔记(免费)

    ### 韩顺平Oracle笔记知识点详解 #### 一、Oracle认证及与其他数据库的比较 - **Oracle认证**:Oracle提供了多种级别的认证体系,包括OCA(Oracle Certified Associate)、OCP(Oracle Certified Professional)、...

    MLDN最经典的ORACLE笔记

    《MLDN最经典的ORACLE笔记》是李兴华老师倾力打造的一份全面而深入的Oracle学习资源,专为对数据库技术感兴趣的读者精心准备。Oracle作为全球广泛使用的数据库管理系统,其强大功能和复杂性使得深入理解和掌握Oracle...

    oracle笔记

    以下是对"Oracle笔记"中的关键知识点的详细说明: 1. **Oracle认证与安装**:Oracle提供了一系列的认证,如OCP(Oracle Certified Professional),表明用户具备相应级别的Oracle数据库技能。在安装Oracle时,系统...

    oracle笔记+资料.rar

    本资源“oracle笔记+资料.rar”包含了丰富的Oracle学习资料,适合不同水平的学习者,无论你是初学者还是资深DBA,都能从中受益。下面将详细解析其中可能涵盖的知识点。 1. **Oracle基础知识**:这部分内容可能会...

    oracle笔记创建和管理表

    oracle笔记创建和管理表,增加列,删除列,修改列,修改列名和数据类型和长度,修改表名等等操作,有代码案例!

    马士兵oracle笔记

    马士兵oracle笔记,浅显易懂。

    达内,tarena,oracle笔记,oraclePPT课件,达内oracle笔记

    在达内的Oracle笔记中,可能会详细讲解SELECT语句用于数据检索,INSERT、UPDATE、DELETE用于数据增删改,以及CREATE、ALTER、DROP用于数据库对象管理的语法和用法。 3. **数据库设计**:良好的数据库设计是确保系统...

    详细oracle 笔记

    oracle笔记!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    韩顺平老师oracle笔记

    根据给定的文件信息,以下是从“韩顺平老师oracle笔记”中提炼出的关键知识点,主要涉及Oracle数据库的基础概念、用户管理以及SQL*Plus的基本操作。 ### Oracle数据库基础 1. **Oracle数据库的角色与权限**: - *...

    Oracle 笔记 详解 资料 用例

    这份"Oracle笔记详解资料用例"涵盖了Oracle数据库的核心概念、安装配置、SQL语言、表和索引、存储结构、备份恢复、性能优化等多个方面,是学习和掌握Oracle数据库的宝贵资源。 首先,Oracle数据库的基础部分包括...

    oracle笔记html版本

    首先,Oracle笔记可能涵盖的基础概念包括数据库的结构,如表空间、段、区和块等,这些都是Oracle存储数据的基本单元。表空间是数据库中最大的逻辑存储单位,用于组织和存储数据文件。段是表空间内的逻辑存储结构,如...

    oracle笔记.docx

    在Oracle学习笔记中,我们关注的关键概念主要包括以下几个方面: 1. **数据缓冲区**:这是Oracle内存架构的重要组成部分,用于存储从磁盘数据文件中读取的数据。所有用户共享这个缓冲区,当数据被服务器进程读入后...

    oracle 笔记.doc

    在Oracle笔记中,我们首先看到关于安装和删除Oracle数据库的部分,特别是Oracle 9i的9.0.1.1和9.2.1.1版本。在这个过程中,有两位重要的超级用户:sys和system。sys类似于SQL Server的sa账户,拥有最高权限,而...

    oracle笔记.rar

    这份“Oracle笔记”包含了对Oracle数据库系统的基本学习资料,非常适合初学者入门。 一、Oracle数据库基础 Oracle数据库是由Oracle公司开发的,它采用SQL语言进行数据操作,并支持分布式数据库、实时交易处理、...

    韩顺平最新Oracle笔记及PPT

    《韩顺平最新Oracle笔记及PPT》是针对Oracle数据库技术的一套全面的学习资源,由知名IT讲师韩顺平提供。这些资料包含了2011年韩顺平的最新教学内容,适合对Oracle有兴趣或者需要提升Oracle技能的IT专业人士。 ...

    oracle笔记.pdf

    其中,“i”在Oracle8i中表示增加了对Internet的支持,Oracle9i则是Oracle8i的稳定版本,而Oracle10g是基于网格计算技术的版本,Oracle11g是10g的稳定版本,Oracle12C则是支持云计算概念的最新版本。在初学者阶段,...

Global site tag (gtag.js) - Google Analytics