Oracle学习中的一些细节

来源:互联网 发布:资生堂粉底霜步骤 知乎 编辑:程序博客网 时间:2024/05/17 04:59

1.      关于Select语句是否锁定数据。

Oracle中的Select语句并不锁定数据,除非使用for update字句。

好像Ms SQL ServerSelect语句会缺省的锁定数据。

 

2.      算术运算中包含了null值时的运算结果

如果算术运算中包含了null值,例如null1null1null*1null/1,返回的结果都是null。即使是计算null/0,也不会报错。

 

 

3.      控制column alias的大小写

在查询语句中,可以给查询结果的每列取一个别名。缺省的会将别名以大写的形式返回。例如:

Select sysdate system_date from dual 

 

select sysdate SYSTEM_DATE from dual

返回的结果都是

 

SYSTEM_DATE

5/12/2006 5:57:55PM

 

如果希望列名与自己输入的大小写一致,可以将别名用””括起来。例如:

Select sysdate “System_Date” from dual

会返回

System_Date

5/12/2006 5:57:55PM

 

4.      Sysdate的计算

sysdate可以进行加减计算。例如:

如果 Select sysdate from dual  返回5/12/2006 5:57:55PM

那么,Select sysdate1 from dual  返回4/12/2006 5:57:55PM,即一天前的时间。

Select sysdate1/24 from dual  返回5/12/2006 4:57:55PM,即一个小时以前的时间。

 

5.      Like子句的通配符和逃逸符

Like语句中可以使用通配符%_%代表任意多个字符,可以是0个、1个或多个。_代表一个字符。

假如现在有一个表TableA如下:

ColumnA

ColumnB

ColumnC

A11

B_1

C1

A_1

B21

C13

A31

B31

C13

Select  columna,

columnb,

columnc

from tablea

where columnc like ‘C%’

会返回所有的记录。

如果执行

Select   columna,

            columnb,

            columnc

from     tablea

where   columnc like ‘C_’

只会返回第一条记录。

执行

Select   columna,

            columnb,

            columnc

from     tablea

where   columnc like ‘C__’

(注意查询条件中是两个_符号。)

会返回后两条记录。

那么,如果我们要查询所有columnb中第一个字符是B,第二个字符是_,第三个字符为任意字符的数据,应该怎么查询呢?

如果执行

Select   columna,

            columnb,

            columnc

from     tablea

where   columnb like ‘B__’

这样会返回所有的3条记录。因为Oracle会将_当作通配符,也就是说Oracle认为你要查询的是所有以B开始的总共3个字符的值。

那么怎么让Oracle认为第一个_不是通配符呢。这就需要用到逃逸符(或者叫做转义符)。上面的查询语句应该写成

Select   columna,

            columnb,

            columnc

from     tablea

where   columnb like ‘B/__’

escape  ‘/’

这里 escape ‘/’的意思是前面的条件中’/’为逃逸符,它后面紧跟的一个字符做原意解释。也就是说它后面紧跟的’_’字符不再被认为是通配符,而被认为是’_’字符。注意这里的escape只对它前面的一个条件有效。如果在两个条件中都需要用到逃逸符,那么在每个条件后面都需要加上一个escape字句,这两个escape子句定义的逃逸符可以不一致。

 

 

 

 

6.      Char 类型和 VarCharVarChar2类型之间的区别

Char类型是定长的。例如Char20)代表一个20字节的字符串,即使是其中就存放了一个字符,也要占用20个字节。

VarCharVarChar2是变长的。VarChar20)和VarChar220)都表示最长可以存放20个字节的字符串。但是实际的长度是随着存放内容的变化而变化的。如果只存放了一个字符’A’,那么就只占用一个字节。

VarCharVarChar2目前(到Oracle10g)还没有区别。但是推荐使用VarChar2

      

7.      两个表做连接的时候,表的顺序对性能的影响。

            Oracle10g开始,顺序对性能没有影响。

           

8.      count函数

      如果表TableA中有100条记录,其中columnAnull的记录有10条。那么 select count(*) from tablea 会返回100select count(columna) from tablea会返回90

 

9.      merge语句

            语法为

            merge into table_name table_alias

            using (table|view|sub_query) alias

            on (join condition)

            when match then

                        DML

            when not match then

                        DML

            DML表示数据超作语言,例如insertupdatedelete

 

10.  synonym(同义词)

      同义词分为两个级别:public级别的和user级别的。

      不同usersynonym可以相同。例如userAuserB都可以有一个叫做mySynonym的同义词。

      public级别的synonym不可以相同。

      user级别的synonympublic级别的synonym可以同名。

      一般来说,使用synonym对性能会有一定的影响,不建议使用。

 

11.  truncatedelete的区别

            truncate用来清空一张表。使用delete删除所有记录也可以清空一张表。两者之间的区别在于:

            delete是一条条记录的删除,数度会很慢。truncate速度快。

            delete不会释放表空间。如果一张表占用2G的空间,用delete删除所有的记录之后,占用的空间还是2G

            truncate不能被rollback,因此要小心使用。


 
原创粉丝点击