oracle基础笔记

查看所有表:

Select  table_name  from  user_tables;

删除表的记录:

Delete 表名 (where 条件)

删除表结构:

Drop  table 表名

向表中插入数据:

Insert  into  表名(字段1,…字段n)  values();

创建序列:

Create  sequence  序列名称;

向表中添加序列机制:

Insert  into  表名  values(序列名称.nextval);nextval代表下一个值.

更新列的值:

update 表名 set 字段值=值;

更新表字段属性:

alter table 表名 modify ( 字段  number(3)  not null)

==============================================================================

DDL:定义语言,表结构。表结构的对象在操作数据库时都要加上table字段. alter 为DDL语句.

DML:操作语言,删增。不需要加table字段.

DQL:查询语言,select

列别名:as关键字

Null:无穷大,不占空间。任何值跟null比较结构都是不确定,所以不会返回任何结果!!

而  = null 、<> null 的判断结果,仍然是不可知,不确定,所以 不会返回任何结果。

处理空值:nvl函数,nvl(p1,p2)如果p1是空值,则返回p2

消除重复行:distinct,对整条记录的去重。Distinct放在要去重行字段的前面!

ALL,AND,ANY:

 

Update:表数据更新:update 表名 set 字段值=参数 where 条件

Between..and…闭区间,表示一个范围。

In(val1,val2,val3…valn)等价于or

单引号和双引号:

双引号一般是用来转义的,如果alias里面有空格或其它保留符号,必须使用双引号。
单引号是用来特制的,比如字符串的引用,日期字符串的引用,都必须包括在单引号中,可以参与运算或其它表达式中。
两者不可混用,其中,两个单引号可以作为单引号的转义使用,意思就是一个真正的、没有特殊功能的单引号。例如 select substr('I''am a pig',1,4)。

 

Like:像,

%:0或者多个字符

_:任意单个字符

Where子句后面不能跟select后面定义的列别名。

判断某值是否为空用isnull,因为null代表未知。

Exists:判断是否存在结果。(与In类似)

等于标示符:=和<>

不等于标示符:!=和^=

In的用法:

In(a,b,c):与其中任意一个比较相等就行!相当于any.

当子查询的返回结果中包含有null值,对于not in(<>all)来说,select语句不会返回任何结果。因为任何跟null比较,结果都不是true。

Not  in(a,b,c):与所有的都进行比较,相当于all.

 

Truncate和delete的区别:

Truncate :恢复创表时候的空间,先释放空间,再清空数据。不能回滚,快,彻底删除。

Delete:不释放空间,清空数据。可以回滚,慢,需要回滚备份。只是清空数据。

只有在对表的结构进行操作的语句会加上table,比如truncate table Test

只对数据进行操作的语句不能加table,比如delete Test.

 

ASC:升序,null在最后(最大)

Desc:降序

Select语句执行顺序:

1 from 选择表

2 where 条件判断

3 grou   by 分组

4 having 分组过滤

5 select 查询结构

6 order   by 排序                                                       

语法顺序:

Select * from 表名

Where 条件

Group  by 分组的行

Having  过滤(组函数或者group by后面的字段)

Order by 排序

 

where (unix_host,create_date):主查询的where条件中可以用多个列进行过滤,称之为多列子查询。

Number(m,n):m:能填的整数位,n:小数后面的位置

 

Round():四舍五入函数,

Trunc:截取函数.

日期:sysdate.系统函数,返回当前系统时间。

修改SQL运行环境的日期格式:

Alter session set nls_date_format=’yyyy mm dd hh24:mi:ss’;

Session是SQL语句的运行环境。

缺省日期格式:DD-MON-RR

环境(session)修改的时候,所有SQL语句都将不一样。

To_date()函数:将字符串转换成日期,用指定格式存入:

to_date('2010-10-22','yyyy:mm:dd');

to_char()函数,按指定格式读取,返回类型是Varchar2.其他类型转字符型.

To_number(M,’N’):将字符串N转换为数值类型.

Fm:去掉空格以及前导0.

字符类型定义:

Char():定义长度存,对空格不敏感,定义的时候可以不定义长度,缺省为1,最大2000字节。

Char(10):不管写几个都是占10个空间。

Varchar2():实际长度存入(变长),对空格敏感,必须定义长度,最大4000字节.

Varchar(10):写3个字符只占3个空间.

当前环境改变:

地区区域:Alter  session set nls_territory=’China’

语言:Alter  session  set nls_language=’语言类型’

日期:Alter  session set nls_date_format=’yyyy-MM-dd’

 

两大函数:

Case…when:从上到下,其中一个when满足就马上退出.

Case  when 条件 1  then  return 1

      When 条件 2  then  return2

     ….

      When  条件n  then  return n

     Else  其他语句

     End;

Decode函数:如果value等于if1,则结果为then1,如果都不等,返回else.

Decode(value,if1,then  1,

            If2,then  2,

            …

            Ifn,then  n,

            Else);

 

组函数:

Avg 平均值,sum 求和,:主要number类型

count 总数,max 最大,min 最   小:任何类型

处理null的时候,count返回0,其他的返回null

 

Group by:分组,让相同值成为一行.

没有Group by的时候,select后面跟组函数,其他的也必须是组函数。

有Group by的情况下,select后面可以跟group by后面跟的表达式。

 

Having  对组进行过滤(分组):

Where与having的区别:

1  where后面可以跟任意列名,单行函数,不能跟组函数。

2  having后面只能跟group  by后面的表达式或组函数。

3  where子句执行在having子句前。

4  都不能使用列别名。

 

 

非关联子查询:

Select 数据1…数据n

From 表名

Where(select  数据  from  表名);

1 先执行子查询,子查询的结果作为主查询的条件,再执行主查询。

2 子查询只执行一遍。

3 若子查询返回多个值,系统会自动去重,结果返回给主查询。

4 若子查询的返回结果仅为一个值,可以用单值运算符。

5 若返回的结果为多值,必须用多值运算符(in)。

6 若子查询返回null,整个查询不会返回任何行。

 

数据类型定义比较:

Varchar2:一定定义宽度,如varchar(20);

Char number:可以定义,也可以不定义宽度,如number(10)或number();

Date:一定不能定义宽度,用环境变量修改格式宽度。

 

关联子查询:

要在子查询里面访问主查询的信息。

主查询-ßà子查询

1 先执行主查询,返回结果A

2 将A传入子查询,执行计算结果B(执行子查询)

3 将B返回给主查询,若B成立,则打印结果,若B不成立,则重新步骤1,2,3.

4 主查询里面的所有记录都会判断一遍。

 

多表查询:

3大范式:

第一范式:表里面的数据不能一样。

第二范式:非主属性不能依赖于另一个非主属性。

第三范式:非主属性依赖于主属性(必须)。

 

交叉连接:笛卡尔积,m*n

内连接:

定义:一种表的连接,条件为on  t1.c1=t2.c2,如果c1与c2匹配,那么t1和t2的该记录组合

起来,作为结果集的一条记录。

join…on 限制条件1  and  限制条件2

On后面跟一个,其余用and连接

先and过滤再on匹配

自连接:通过给表起别名处理同一张表的不同列的相同含义的关系比较。

        account  a1  join  account  a2

        a1.id=a2.recommenderId

同一张表不同列的比较(不同列的取值有相同的含义);

 

外连接:

一个都不能少(驱动表:基表,每一条记录都要检查一遍)

From  t1  left/right/full  join  t2

Left:左边的表必须做驱动表

Right:右边的表必须做驱动表

Full:左边右边都做驱动表

外连接与内连接的区别:

外连接结果集=内连接结果集+匹配不上的记录和null记录(t2结构)的组合。

Select  *   from  table  join  table2

On  t1.c1=t2.c2   :过滤在外连接之前

And  条件1

Where  条件2  and  条件3    :执行在外连接之后

总结:

交叉连接:解决笛卡尔积问题。

内连接:解决匹配问题

外连接:解决不匹配问题,表的所有记录都出现在结果集。

 

排名分页问题 Rownum

 

Rownum :是在获取每行之后才赋予的,只有前面的rownum在结果集里面才能打印出后面的分页。

只能小于不能大于

Rownum<=5 可以

Rownum=5  不可以,因为只能从1开始数。

查询第四到第六条记录:

select rn,id,real_name,create_date

from

    (select rownum rn,id,real_name,create_date from account

    where rownum <= 6)

where  rn >= 4;

把rownum作为列并取列别名,查询的时候,直接对列别名进行where条件选择!

 

伪列:数据库术语,指的是在物理上这个列并不存在,只是在查询时才构造出来。伪列通常是自由分配的,用户无法执行修改等操作。

 

约束:

UK: 列级:constraint  UK名  unique 表级:constraint  UK名  unique(c1,c2…cn);

主键PK:唯一性+非空, 列级:constraint  pk名  primary  key,

表级:constraint  pk名  primary  key(cn)

 

联合主键:constraint  pk名  primary  key(c1,c2,…cn)

外键FK:列级:constraint  fk名  references  parent(父表PK或UK);

表级:constraint  fk名   foreign  key(c2)  references parent(父表字段);

联合主键:多条列联在一起保证唯一.

非空:not null

唯一性约束:Uk,不允许重复,但可为空,

PK=UK+not  null

外键(FK)约束:一对多,“删字表,插父表”。

解决一对多问题。如一个客户(唯一的帐务帐号ID)可以开通多个远程登录业务(多个业务帐号ID);

表级约束形式定义外键时用foreign key.

References:表示引用父表中的某列。列级约束形式时候可以用。

c2  number  references  parent(c1)

一张表中只能有一个主键约束,其他约束没有这个限制。

1 先建父表

2要引用的列必须唯一(PK或UK)

3 后建子表

4 删除的时候先删子表,后删父表。

插入数据的时候,先插入父表要引用的列.

insert  into  parent(c1)  values (n);

insert  into  child  values (1,n);子表里面的n值要与父表中的值相同.

原理:通过FK与同一张表(父表)的PK或UK建立引用关系.

也可以与不同父表的PK或UK建立引用关系.

FK的取值 必须匹配父表中已有的值或空值。

 

级联删除:on  delete  cascade,删除父表记录前,先删除字表里的相关记录,创建表的时候用。

On delete set null:删除父表前,先将子表外键列的值置空。

父表的PK=子表的FK

约束总结:

1 命名时,若用户未命名约束,系统会自动命名.

2 何时创建约束:a,创建表时定义约束,b,表存在,用alter  table追加约束!

3 分表级约束和列级约束。

 

事务

transaction:是改变数据库数据的最小逻辑单元。

4大特性:

原子性,一致性,隔离性,永久性。

保留点(savepoint):回滚的时候回到标记点。

 

数据库对象:

视图(view):相当于windows中的快捷方式.

特点:不存储数据,不占空间。相当于一条select语句。

索引(index):只能创建,不能看。

Create  index  索引名  on 表名

意义:a,通过rowid快速查找。b,有效降低读取数据块的数量。

需要用到索引的列:PK,FK,UK,即经常需要排序和分组的列。Where子句中的列。

索引的重点:重点在创建,创建在什么列,对表的增删改查没影响,查找的时候会提高select效率。

序列号(sequence):

解决PK和UK的值的唯一性.通过sequence获得唯一值.

定义:按照预定模式自动生成整数的一种机制,保证数字的自动增长.

 

posted @ 2014-02-14 08:58  生活需要努力和自律  阅读(300)  评论(0编辑  收藏  举报