Oracle总结(SQL语言)

一、Oracle中支持的数据类型

oracle支持的熟路类型有23种:VARCHAR2、NUMBER、DATE、CHAR、FLOAT、INTEGER、NCHAR、NVARCHAR2、LONG、LONG RAW、RAW、ROWID、UROWID、BLOB、CLOB、NCLOB、BFILE、TIMESTAMP、INTERVAL YEAR、INTERVALE DAY、BINARY_DOUBLE、BINARY_FLOAT、XML TYPE。

1、常用字符型

数据类型

取值范围(字节)

说明

varchar2

0~4000

可变长度的字符串

nvarchar2

0~1000

用来存储Unicode字符集的边长字符型数据

char

0~2000

用于描述定长的字符型数据

nchar

0~1000

用来存储Unicode字符集的定长字符型数据

long

0~2GB

用来存储边长的字符串

2、常用数字型

数据类型

取值范围(字节)

说明

number(P,S)

p最大精度是38位(十进制)

p代表的是精度,s代表的是保留的小数位数,可以用来 存储定长的整数和小数

float

用来存储126位数据(二进制)

存储的精度是按二进制计算的,精度范围为二进制的 1~126,在转化为十进制时需要乘以0.30103

3、常用日期类型

数据类型

说明

date

用来存储日期和时间,范围在公元前4712年1月1日到公园9999年12月31日

timestamp

用来存储日期和时间,与date类型的区别就是在显示日期和时间更精确,date类型的时间 精确到秒,而timestamp的数据类型可以精确到小数秒。此外,使用timestamp存放日期 和时间还能够显示当前是上午还是下午

4、其它常用数据类型

数据类型

取值范围(字节)

说明

blob

最多可以存放4GB

存储二进制数据

clob

最多可以存放4GB

存储字符串数据

bfile

大小与操作系统有关

用来把非结构化的二进制数据存储在数据库以外的操作 系统文件中

二、SQL语言

SQL(Structured Query Language)是每一个数据库都通用的语言,但是在不同的数据库中存在一定的差异,Oracle数据库使用的是PL/SQL 语言。SQL语言分为3类:

1、数据定义语言DDL(Data Definition Language)

对数据库中对象的创建(create)、修改(alter)、删除(drop)的操作,主要是操作数据库、数据表、视图、索引等。

1、1基本语句

1、1、1用Create语句创建表

语法:

create table table_name

(

column_name datatype{null|not null},

column_name datatype{null|not null},

...

{constraint}

)

说明:

table_name:在数据库中创建的数据表的名称,在一个数据中数据表名是不能重复的;

comumn_name:表中的列名,列名在一个表中也是不能重复的;

datatype:该列存放数据的数据类型;

{null|not null}:允许该列为空或者不允许该列为空,在创建表时默认为不允许该列为空;

{constraint}:为表中的列设置约束,约束主要包括主键约束、外键约束、检查约束等。

1、1、2用Alter修改表

语法:

alter table table_name add column_name|modify column_name|drop column_name;

说明:

add:想表中加列;

modify:用来修改表中已经存在的列的信息;

drop column:删除表中的列,在删除表中的列时经常要加上cascade constraints用于把与该列有关的约束也一起删除掉。

1、1、3用Drop删除表

语法:

drop table table_name;

1、2约束的使用

约束是保证数据库表中的数据完整性和一致性的手段。

1、2、1主键约束

主键约束指在每一个数据表中只有一个,一般用在"id"列,例如常见商品信息表:

create table goods(

id varchar2(10),

name varchar2(20),

primary key(id)

);

或者给已经存在的表增加主键约束:

alter table table_name add constraints constraint_name primary key(column_name);

如:alter table goods add constraints pk_id primary key(id);

删除主键约束:

alter table goods drop constraint constraint_name;

如:alter table goods drop constraint pk_id;

1、2、2外键约束

外键约束可以保证使用外键约束的数据库列与所引用的主键约束的数据一致,外键约束在一个数据表中可以有多个,比如让A表中的a列只能是B表中a列的数据内容。

语法:

constraint constraint_name foreign key(column_name)

reference table_name(column_name)

on delete cascade;

说明:

constraint_name:创建的外键约束的名字;

foreign key(column_name):指定外键约束的列名;

reference:要引用的表名(列名)

on delete cascade:设置级联删除,当主键的字段被删除时,外键所对应的字段也被同事删除。

向已经存在的表中添加外键:

alter atbale table_name

add constraint constraint_name foreign key(column_name)

reference table_name(comumn_name)

on delete cascade;

删除外键:

alter table table_name drop constraint constraint_name

1、2、3检查(Check)约束

Check约束能够规定每一列能够输入的值,以保证数据的正确性。

语法:

constraint constraint_name check(condition);

说明:condition是检查约束的条件,如给字段Age设置为10~20岁,就可以写成age>=10 and age<=20。

修改表时增加Check约束:

add constraint constraint_name check(condition);

删除Check约束:

alter table table_name drop constraint constraint_name。

1、2、4唯一(Unique)约束

Unique约束设置字段的值唯一。

语法:

onstraint constraint_name unique(conlumn_name);

修改表时增加Unique约束:

add constraint constraint_name unique(column_name);

删除Unique约束:

alter table table_name drop constraint constraint_name;

1、2、5非空(not null)约束

not null约束确保字段不能为空,相反的是空(null)约束。

语法:

创建字段时直接跟在字段后面即可;

修改表时增加not null约束:

alter table table_name

modify column_name not null;

2、数据操纵语言DML(Data Manipulation Language)

对数据表进行操作,主要是对数据进行增加(insert)、删除(delete)、修改(update)。

2、1增加数据(insert)

直接添加数据语法:

insert into table_name(column_name1,column_name2,...) values(data1,data2,...);

说明:

column_name1:指定表中要添加数据的列名,可以是1个到多个;

data1:要填入指定列的数据值,这里要求添加值得数目与列名的数量一致。

通过其他数据表向表中添加数据:

insert into table_name1(column_name1,column_name2,...) select column_name1,column_name2,... from table_name2

或者:

create table table_name1 as select column_name1,column_name2,... from table_name2

2、2修改数据(update)

语法:

update table_name set column_name1=data1,column_name2=data2,...(where condition);

说明:

column_name1:要修改数据列的字段名,可以是一个或多个;

data1:要赋给字段的新值,这个值得数据类型要与数据表中字段的数据类型一致;

where:条件

2、3删除数据(delete)

语法:

delete from table_name(where condition);

2、4查询数据(select)

对数据库表中的数据可进行查询

基本语法:

select [distinct|all]

select_list

from table_list

[where_clause]

[group_by_clause]

[having condition]

[order_by_clause]

说明:

select:查询动作关键字,也是必须关键字;

distinct|all:描述列表字段中的数据是否去除重复记录;

select_list:需要查询的字段列表,也可以说是占位符。可以是一个字段,也可以是多个字段,如果死查询表中的所有字段,可以用"*"代替;

from:必须关键字,表示数据的来源;

where_clause:查询的where条件部分;

group_by_clause:group by字句部分;

having condition:having字句部分;

order_by_clause:排序

2、4、1使用别名替代表中的字段名

select id (as) ID,name (as) 名称 from goods;

id 名称

1 苹果

使用别名时若不用引号,查询出的标题行为大写字母,如果需要使用小写字母或者大小写混合,可以用引号将别名括起来。如:

select id (as) "Id",name (as) 名称 from goods;

Id 名称

1 苹果

2、4、2使用表达式操作查询的字段

select id,oldprice,orldprice||'*'||1.1||'='||orldprice*1.1 (as) newprice from goods

说明:

该语句中使用了两种操作符,"*"代表称号,"||"是链接操作符,用来连接两个字符串。查出来的结果如:

id oldprice newprice

1 1 1.1

2、4、3使用函数操作查询的字段

查询过程中检索的列允许使用函数对其操作,如果仅仅是查询,那么更多的是利用函数对数据进行类型转换,如:

select id,name,subStr(name,1,3) (as) newname from goods;

函数subString()用于去子字符串,查询结果如:

id name newname

1 abcde abc

2、4、4去除检索数据中的重复数据

select distinct(name) from goods

2、4、5对查询出的数据进行排序

order by

{expr|position|c_alias}

[asc|desc]

[nulls first|nulls last]

[,{expr|position|c_alias}

[asc|desc]

[nulls first|nulls last]

]...

说明:

order by:排序关键字

expr:表达式;

position:表中列的位置;

c_alias:别名;

[asc|desc]:升序或降序,默认升序;

nulls first|nulls last:对空字段的处理方式;

可以根据多个字段排序

2、4、6使用where字句设置检索条件

where条件字句中可以使用的操作符主要有关系操作符、比较操作符和逻辑操作符:

1)关系操作符:<,<=,>,>=,=,!=,<>

2)比较操作符:

is null:如果操作数为null返回true;

like:模糊比较字符串;

between...and:验证值是否在范围内;

in:验证操作数在设定的一系列值中。

3)逻辑操作符:

and:两个条件都必须得到满足;

or:只要满足两个条件中其中一个;

not:与某个逻辑值取反

2、4、7Group by和Having子句

group by 子句和having子句痛where不一样,他们两个都用于组的查询。使用分组查询可以统计数据,如用group by配合分组函数,可以同时查询出每种类型产品的平均价格。语法:

group by

{expr

|{rollup|cube}({expr[,expr]...})

}

说明:

expr:通常表示数据库列名;

rollup|cube:group by子句的扩展,可以返回小计和总计记录。

group by语句和分组函数一起使用,它可以根据一列进行分组,也可以根据某几列进行分组。

2、4、8查询的应用

1)子查询

子查询就是嵌套查询,例如:

select * from goods where id in (select id from goodsInfo where id >20);

2)连接查询

2、1)普通连接查询

如:select * from goods,goodsInfo;

这样查询出的结果是两个表的笛卡尔积,即的到两个表中记录数的乘积,比如goods表中有2条记录,goodsInfo表中有3条记录,执行查询后会得到2*3条记录

2、2)内连接

将两个表进行连接,只查出匹配的记录,如:

select a.id,b.price from goods a (inner) join goodsInfo b on a.id=b.id;

2、3)自连接

将自身表的一个引用作为另一个表处理,如:

select a.id,b.name from goods a,goods b where a.id=b.id and a.rowid<b.rowid;

在有联动关系的表中可以使用自连接,比如goods表中有父类商品id时:

select a.id,a.name from goods a,goods b where a.id=b.fatherId and name like '%football%'

2、4)外连接

外连接分为三种:左外连接、右外连接、全外连接

2、4、1)左外连接

又称左向外连接,返回的结果不仅仅是符合连接条件的行记录,还包含了左表中的全部记录。

select a.name,b.supplier from goods a left join supply b on a.id=b.id

或者 select a.name,b.supplier from goods a,supply b where a.id=b.id(+)

2、4、2)右外连接

与左外连接相反,将右表中的所有数据与左表进行匹配,返回的结果出了匹配成功的记录外,还包含了右表中未匹配成功的记录。

select a.name,b.supplier from goods a right join supply b on a.id=b.id

或者 select a.name,b.supplier from goods a,supply b where a.id(+)=b.id

2、4、3)全外连接

返回所有匹配成功的记录,并返回左表和右表未匹配成功的记录。

select a.name,b.supplier from goods a full join supply b on a.id=b.id

2、5其它数据操纵语句

2、5、1Truncate语句

Truncate语句和Delete语句一样都是用来完成删除数据表中的数据,但是二者是有区别的。使用truncate语句删除表彰的记录都是吧表中的记录全部删除,但是Truncate语句删除表中数据的熟读要比使用Delete语句删除表中的数据更快一点。语法:

truncate table table_name;

2、5、2Merge语句

Merge语句与Update语句的功能类似,都是修改数据表中数据的,但是Merge语句与Update语句也是有区别的,使用Merge语句可以对数据表同事进行增加和修改的操作。语法:

merge [into] table_name1

using table_name2

on (condition)

when matched then merge_update_clause

when not matched then merge_insert_clause;

说明:

table_name1:要修改或添加的表;

table_name2:参照的更新的表;

condition:table_name1和table_name2之间的关系,或其他的一些条件;

merge_update_clause:如果和参照表table_name2中的条件匹配,就执行更新操作的语句;

merge_insert_clause:如果条件不匹配,就执行增加操作的语句。

3、数据控制语言DCL(Data Control Language)

对数据库中的对象权限进行权限设置和取消等操作。

略!

posted @ 2017-03-28 16:58  rogear  阅读(384)  评论(0编辑  收藏  举报