Oracle数据库
概念:
数据库和实例
Oracle 数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例则是管理数据库文件的内存结构。此外,数据库是由后台进程组成。
数据库和实例是紧密相连的,所以我们一般说的 Oracle 数据库,通常指的就是实例和数据库。
DDL:数据库定义语言:create、drop
DML:数据库的操作语言:insert、update、delete
DQL:数据库的查询语言:select
DCL:数据库的控制语言:grant、revoke
数据类型
字符型数据
VARCHAR
数字型数据
NUMBER:数字数据,可以指定它的精度和小数位数;通常格式NUMBER ( precision, scale) ,precision表示精度(1-38),指的有效数字的位数,scale表示小数位数(-84-127)。
FLOAT:一个ANSI数据类型,精度为126位二进制、38位十进制的浮点数。另外Oracle还提供BINARY_FLOAT和BINARY_DOUBLE作为备选。
INTEGER:存储整型数据,小数位数为0,相当于NUMBER(P,0)。
日期型数据
DATE:存储日期类型,可以精确到秒,通常存储格式是年月日时分秒;常用。
大对象数据类型
CLOB:保存在数据库字符集中的字符数据,大小没有限制;
NCLOB:作用和CLOB一样,但是保存在国家语言字符集中;
RAW和ROWID数据类型
RAW:可变长度的二进制数据;
ROWID:指向表中行的位置的指针,他里面是物理地址,是Oracle专有数据类型
建表
create table users(
id varchar(300) primary key,
name varchar(200) not null
);
create table student1(
id number primary key,
name varchar(20) not null,
aihao varchar(100)
)
创建种族表并设置外键
create table zhongju(
id number primary key,
guojia varchar(20) not null,
zhiye varchar(10),
id1 number references student1(id)
);
增
insert into users1(id,name)values('aa','bb');
insert into student1 values(1,'盖伦','大宝剑');
insert into student1 values(2,'剑姬','华尔兹之舞');
insert into student1 values(3,'狗头','狗头军师');
insert into zhongju values(1,'德玛西亚','战士',1);
insert into zhongju values(2,'德玛西亚','刺客',2);
insert into zhongju values(3,'德玛西亚','坦克',3);
删delete from 表 where条件
delete from users where id='aa';
drop table users2;
删除表中全部数据,此操作不可逆:TRUNCATE TABLE 表名;
truncate table users1;
drop table student1;
drop table zhongju;
改
修改表名
alter table users rename to users1;
修改数据表里得语句
update users1 set id='1',name='武松' where id='aa';如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;
值N超过定义的长度会出错, 最好在插入前进行长度校验.
表数据复制
create table users2(
id varchar(300) primary key,
name varchar(200) not null
);
insert into users2(select * from users1);
复制表结构,直接把表内容也复制了,就是把表用子查询插入到一张表中
create table user3 as select * from users1;
查
select * from users1;
select * from users2;
select * from user3;
select * from shi1;
select * from student1;
select * from zhongju;
多表连查
select student1.name,zhongju.guojia from student1,zhongju where student1.id=zhongju.id1;
inner join主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。
简单来说,就是利用条件表达式来消除交叉连接的某些数据行。
别名在from后面加前面也可以用
select s.name,z.guojia from student1 s inner join zhongju z on s.id=z.id1;
select * from student1 s inner join zhongju z on s.id=z.id;
左外连接
select s.name,s.aihao,z.guojia,z.zhiye from student1 s left outer join zhongju z on s.name=z.guojia;
右外连接
select s.name,s.aihao,z.guojia,z.zhiye from student1 s right outer join zhongju z on s.name=z.guojia;
子查询
select s.name,s.aihao from student1 s where s.id in(select z.id1 from zhongju z)
分页查询
select * from student1,zhongju limit 4;oracle不支持limit
但可以用rownum来限制返回得结果集得函数,rownum并不是用户添加得字段,而是oracle系统自动添加的
最多返回前5行
select * from student1,zhongju where rownum<=5;
minus在oracle是减的意思
查询结果返回第2行到第3行之间的
select * from student1 where rownum<3 minus select* from student1 where rownum<2;
都小写
select lower('GRFSGGR') from users1;
都大写
select upper('fsdfsdf') from users1;
约束
函数,dual是一个伪表可以用来测试函数等等
数学函数
绝对值:abs()
select abs(-546) jieguo from dual;
取整函数(数字取大):ceil()
select ceil(-2.4) jieguo from users1;
取整函数(数字取小):floor()
select floor(-2.01) jieguo from users1;
取整函数(直接取整数) trunc()
select trunc(1.36) jieguo from users1;
四舍五入round()
select round(1.4) jieguo from users1;
取平方power(m,n)
select power(2,6) jieguo from users1;
取平方根sqrt()
select sqrt(64) jieguo from users1;
取随机数:dbms_random(minvalue,maxvalue)
select dbms_random.value() from users1;(默认是0-1之间)
select dbms_random.value(1,100) from users1;(value设值后1到100之间)
取符号:sign()
select sign(-3) jieguo from users1; #-1
select sign(3) jieguo from users1; #1
视图
create view shi1 as select * from users1;
drop view shi1;
索引
create index suoyin on users1(name);
drop index suoyin;
存储过程
触发器