Oracle总结(SQL语言)
数据类型 | 取值范围(字节) | 说明 |
varchar2 | 0~4000 | 可变长度的字符串 |
nvarchar2 | 0~1000 | 用来存储Unicode字符集的边长字符型数据 |
char | 0~2000 | 用于描述定长的字符型数据 |
nchar | 0~1000 | 用来存储Unicode字符集的定长字符型数据 |
long | 0~2GB | 用来存储边长的字符串 |
数据类型 | 取值范围(字节) | 说明 |
number(P,S) | p最大精度是38位(十进制) | p代表的是精度,s代表的是保留的小数位数,可以用来 存储定长的整数和小数 |
float | 用来存储126位数据(二进制) | 存储的精度是按二进制计算的,精度范围为二进制的 1~126,在转化为十进制时需要乘以0.30103 |
数据类型 | 说明 |
date | 用来存储日期和时间,范围在公元前4712年1月1日到公园9999年12月31日 |
timestamp | 用来存储日期和时间,与date类型的区别就是在显示日期和时间更精确,date类型的时间 精确到秒,而timestamp的数据类型可以精确到小数秒。此外,使用timestamp存放日期 和时间还能够显示当前是上午还是下午 |
数据类型 | 取值范围(字节) | 说明 |
blob | 最多可以存放4GB | 存储二进制数据 |
clob | 最多可以存放4GB | 存储字符串数据 |
bfile | 大小与操作系统有关 | 用来把非结构化的二进制数据存储在数据库以外的操作 系统文件中 |
SQL(Structured Query Language)是每一个数据库都通用的语言,但是在不同的数据库中存在一定的差异,Oracle数据库使用的是PL/SQL 语言。SQL语言分为3类:
1、数据定义语言DDL(Data Definition Language)
对数据库中对象的创建(create)、修改(alter)、删除(drop)的操作,主要是操作数据库、数据表、视图、索引等。
column_name datatype{null|not null},
column_name datatype{null|not null},
table_name:在数据库中创建的数据表的名称,在一个数据中数据表名是不能重复的;
comumn_name:表中的列名,列名在一个表中也是不能重复的;
{null|not null}:允许该列为空或者不允许该列为空,在创建表时默认为不允许该列为空;
{constraint}:为表中的列设置约束,约束主要包括主键约束、外键约束、检查约束等。
alter table table_name add column_name|modify column_name|drop column_name;
drop column:删除表中的列,在删除表中的列时经常要加上cascade constraints用于把与该列有关的约束也一起删除掉。
主键约束指在每一个数据表中只有一个,一般用在"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;
外键约束可以保证使用外键约束的数据库列与所引用的主键约束的数据一致,外键约束在一个数据表中可以有多个,比如让A表中的a列只能是B表中a列的数据内容。
constraint constraint_name foreign key(column_name)
reference table_name(column_name)
foreign key(column_name):指定外键约束的列名;
on delete cascade:设置级联删除,当主键的字段被删除时,外键所对应的字段也被同事删除。
add constraint constraint_name foreign key(column_name)
reference table_name(comumn_name)
alter table table_name drop constraint constraint_name
Check约束能够规定每一列能够输入的值,以保证数据的正确性。
constraint constraint_name check(condition);
说明:condition是检查约束的条件,如给字段Age设置为10~20岁,就可以写成age>=10 and age<=20。
add constraint constraint_name check(condition);
alter table table_name drop constraint constraint_name。
onstraint constraint_name unique(conlumn_name);
add constraint constraint_name unique(column_name);
alter table table_name drop constraint constraint_name;
not null约束确保字段不能为空,相反的是空(null)约束。
2、数据操纵语言DML(Data Manipulation Language)
对数据表进行操作,主要是对数据进行增加(insert)、删除(delete)、修改(update)。
insert into table_name(column_name1,column_name2,...) values(data1,data2,...);
column_name1:指定表中要添加数据的列名,可以是1个到多个;
data1:要填入指定列的数据值,这里要求添加值得数目与列名的数量一致。
create table table_name1 as select column_name1,column_name2,... from table_name2
update table_name set column_name1=data1,column_name2=data2,...(where condition);
column_name1:要修改数据列的字段名,可以是一个或多个;
data1:要赋给字段的新值,这个值得数据类型要与数据表中字段的数据类型一致;
delete from table_name(where condition);
distinct|all:描述列表字段中的数据是否去除重复记录;
select_list:需要查询的字段列表,也可以说是占位符。可以是一个字段,也可以是多个字段,如果死查询表中的所有字段,可以用"*"代替;
select id (as) ID,name (as) 名称 from goods;
使用别名时若不用引号,查询出的标题行为大写字母,如果需要使用小写字母或者大小写混合,可以用引号将别名括起来。如:
select id (as) "Id",name (as) 名称 from goods;
select id,oldprice,orldprice||'*'||1.1||'='||orldprice*1.1 (as) newprice from goods
该语句中使用了两种操作符,"*"代表称号,"||"是链接操作符,用来连接两个字符串。查出来的结果如:
查询过程中检索的列允许使用函数对其操作,如果仅仅是查询,那么更多的是利用函数对数据进行类型转换,如:
select id,name,subStr(name,1,3) (as) newname from goods;
select distinct(name) from goods
nulls first|nulls last:对空字段的处理方式;
where条件字句中可以使用的操作符主要有关系操作符、比较操作符和逻辑操作符:
group by 子句和having子句痛where不一样,他们两个都用于组的查询。使用分组查询可以统计数据,如用group by配合分组函数,可以同时查询出每种类型产品的平均价格。语法:
|{rollup|cube}({expr[,expr]...})
rollup|cube:group by子句的扩展,可以返回小计和总计记录。
group by语句和分组函数一起使用,它可以根据一列进行分组,也可以根据某几列进行分组。
select * from goods where id in (select id from goodsInfo where id >20);
如:select * from goods,goodsInfo;
这样查询出的结果是两个表的笛卡尔积,即的到两个表中记录数的乘积,比如goods表中有2条记录,goodsInfo表中有3条记录,执行查询后会得到2*3条记录
select a.id,b.price from goods a (inner) join goodsInfo b on a.id=b.id;
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%'
又称左向外连接,返回的结果不仅仅是符合连接条件的行记录,还包含了左表中的全部记录。
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(+)
与左外连接相反,将右表中的所有数据与左表进行匹配,返回的结果出了匹配成功的记录外,还包含了右表中未匹配成功的记录。
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
select a.name,b.supplier from goods a full join supply b on a.id=b.id
Merge语句与Update语句的功能类似,都是修改数据表中数据的,但是Merge语句与Update语句也是有区别的,使用Merge语句可以对数据表同事进行增加和修改的操作。语法:
when matched then merge_update_clause
when not matched then merge_insert_clause;
condition:table_name1和table_name2之间的关系,或其他的一些条件;
merge_update_clause:如果和参照表table_name2中的条件匹配,就执行更新操作的语句;
merge_insert_clause:如果条件不匹配,就执行增加操作的语句。