oracle 基础知识
oracle的核心是表,表中的列使用的常见的数据类型如下:
oracle数据类型
① char(length)存储固定长度的字符串,参数length指定字符串长度,如果存储的字符串小于length,则用空格填充。 默认为1,最大不能超过2000字节。
② varchar2(length) 存储不定长度的字符串,length指定字符串的最大长度,最大不能超过4000字节。
③ number(p,s)即可以存储浮点数,也可以存储整数, p表示数字的最大位数,默认38位,s表示小数点的位数。
④ date 存储日期和时间。(存储纪元,4位年,月,日,时,分,秒。从公元前4712年1月1日到公元后4712年12月31日)
⑤timestamp 不但存储年月日,时分秒,以及秒后6位,还包含时区。
⑥CLOB 存储大的文本,比如存储XML文档。
⑦BLOB 存储二进制对象,比如声音、图像、视频等。
oracle CURD(增删改查);
增 (建表):
oracle 用create来创建表,比如新建一张学生表:
在oracle 中 用insert命令来完成数据插入,
语法为:INSERT INTO 表名(列1,列2,... )values(值1,值2,...);
其中,列名可以省略,则表示向所有列插入。且值得数量和顺序应该与列的数量和顺序一一对应。
例如:
在oracle中,insert命令还可以将一个结果集一次性的插入到一张表中,如:
删:
在oracle中,用delete命令来完成数据的删除,
语法为: delete from 表名 where 条件
还可以用truncate命令,一次性把表中的所有数据删除。语法为:truncate table 表名。
delete和truncate命令的区别:
truncate是DDL命令,删除后不能恢复。而delete是DML语句,删除后,可以通过日志文件恢复。
如果一张表的数据比较多,用truncate比delete速度要快。
改:
在oracle中,用update命令来实现数据的修改
语法为: update 表名 set 列=需要修改的值 where 条件
例如:
如:
在oracle中,用select命令来实现数据查询,
语句为: select 列名 (as 别名) from表名 where 条件 order by ASC (desc);
也可以根据结果集来创建表,语法为: create table 表名 as select 列名 (as 别名) from 表名;
如:
① 去重,在oracle中可以用distinct命令来去除重复的数据。语法为:select distinct 列名 from 表名 where条件;
例如:
在oracle中, 空值不等于0或者空格,是指未赋值,未知或者不可用的值。在sql语句中可以用 is null 或者 is not null 来判断空值。
③ 在where条件语句中可以用 in 、between...and..、like 来进行条件查询。
IN: 指定值来查询,如:select * from student where classNO in ('1','3','5'); 当然也有 not in 语句;
between...and... 在某一个区域来查询,如:select * from student where stu_age between 10 and 20;
like 模糊匹配查询。如:select * from student where stu_name like '%冲%';
④连接查询
内连接:inner join... on ...
左外连接 left (out) join ... on... 左边的表全部展示
oracle的核心是表,表中的列使用的常见的数据类型如下:
oracle数据类型
① char(length)存储固定长度的字符串,参数length指定字符串长度,如果存储的字符串小于length,则用空格填充。 默认为1,最大不能超过2000字节。
② varchar2(length) 存储不定长度的字符串,length指定字符串的最大长度,最大不能超过4000字节。
③ number(p,s)即可以存储浮点数,也可以存储整数, p表示数字的最大位数,默认38位,s表示小数点的位数。
④ date 存储日期和时间。(存储纪元,4位年,月,日,时,分,秒。从公元前4712年1月1日到公元后4712年12月31日)
⑤timestamp 不但存储年月日,时分秒,以及秒后6位,还包含时区。
⑥CLOB 存储大的文本,比如存储XML文档。
⑦BLOB 存储二进制对象,比如声音、图像、视频等。
oracle CURD(增删改查);
增 (建表):
oracle 用create来创建表,比如新建一张学生表:
create table STUDENT
(
stu_NO varchar2(7) not null primary key,-- 学号
stu_name varchar2(20) not null,--姓名
stu_gender varchar2(200) not null,---性别
stu_age number(2) not null,---年龄
stu_seat number(3) not null,---座位
enrolldate date,---入学时间
stu_address varchar2(200) default '地址不详',---家庭住址
classNo varchar(2) not null---班号
);
在建表的过程中,可以在create table的时候就指定表的约束,例如:
create table STUDENT
(
stu_NO varchar2(7) not null,-- 学号
stu_name varchar2(20) not null,--姓名
stu_gender varchar2(200) not null,---性别
stu_age number(2) not null,---年龄
stu_seat number(3) not null,---座位
enrolldate date,---入学时间
stu_address varchar2(200) default '地址不详',---家庭住址
classNo varchar(2) not null---班号
constraint primary key(stu_NO)
);
也可以单独用语句来指定,比如:
alter table STUDENT add CONSTRAINT PK_STUDENT primary key(stu_NO);
/
alter table STUDENT add CONSTRAINT CK_STUDENT_STU_GENDER check (stu_gender='男' or stu_gender='女');
/
alter table STUDENT add CONSTRAINT CK_STUDENT_STU_AGE check (Stu_age >0 and stu_age <100);
/
alter table STUDENT add constraint UN_STU_NAME unique(stu_name);
增(插入数据):在oracle 中 用insert命令来完成数据插入,
语法为:INSERT INTO 表名(列1,列2,... )values(值1,值2,...);
其中,列名可以省略,则表示向所有列插入。且值得数量和顺序应该与列的数量和顺序一一对应。
例如:
insert into STUDENT (stu_no,stu_name,stu_gender,stu_age,stu_seat,enrolldate,stu_address,classNO)
values ('1','令狐冲','男','28','13',to_date('2015-07-22 15:19:02','YYYY-MM-DD HH24:MI:SS'),'华山','05');
其中,oracle的日期是国际化的,不同的地域安装的数据库,它的日期格式可能是不一样的,为了程序方便插入,可以用to_date函数格式化日期后再输入。在oracle中,insert命令还可以将一个结果集一次性的插入到一张表中,如:
insert into student2 select * from student;
当然,这里要求结果集中每一列的属性需要和插入表列的属性一致。删:
在oracle中,用delete命令来完成数据的删除,
语法为: delete from 表名 where 条件
还可以用truncate命令,一次性把表中的所有数据删除。语法为:truncate table 表名。
delete和truncate命令的区别:
truncate是DDL命令,删除后不能恢复。而delete是DML语句,删除后,可以通过日志文件恢复。
如果一张表的数据比较多,用truncate比delete速度要快。
改:
在oracle中,用update命令来实现数据的修改
语法为: update 表名 set 列=需要修改的值 where 条件
例如:
update student set stu_address='思过崖' where stu_name='令狐冲';
如果需要修改表的属性,则需要用alter命令,语法为: alter table 表名 modify 列名 属性;如:
alter table student modify stu_gender varchar(200);
查:
在oracle中,用select命令来实现数据查询,
语句为: select 列名 (as 别名) from表名 where 条件 order by ASC (desc);
也可以根据结果集来创建表,语法为: create table 表名 as select 列名 (as 别名) from 表名;
如:
create table student2 as select * from student;
上面只是一般查询语句,当然还有一些高级的查询,
① 去重,在oracle中可以用distinct命令来去除重复的数据。语法为:select distinct 列名 from 表名 where条件;
例如:
select distinct stu_name from student where stu_age>20;
② null 操作
在oracle中, 空值不等于0或者空格,是指未赋值,未知或者不可用的值。在sql语句中可以用 is null 或者 is not null 来判断空值。
③ 在where条件语句中可以用 in 、between...and..、like 来进行条件查询。
IN: 指定值来查询,如:select * from student where classNO in ('1','3','5'); 当然也有 not in 语句;
between...and... 在某一个区域来查询,如:select * from student where stu_age between 10 and 20;
like 模糊匹配查询。如:select * from student where stu_name like '%冲%';
④连接查询
内连接:inner join... on ...
select * from A a, B b where a.id = b.id;
select * from A a inner join B b on a.id = b.id;
左外连接 left (out) join ... on... 左边的表全部展示
select * from A a left join B b on a.id = b.id;
select * from A a , B b where a.id = b.id(+);
右外连接 right (out)join... on....右边的表全部展示
select * from A a right join B b on a.id = b.id;
select * from A a , B b where a.id(+) = b.id;
全连接 full join ... on ....左右表全展示
select * from A a full join B b on a.id = b.id;