Oracle的基本操作及语法
关键字
|
候选关键字 |
如果一个属性集能惟一地标识表的一行而又不含多余的属性,那么这个属性集称为侯选关键字。 |
|
主关键字 |
主关键字是被挑选出来,作表的行的惟一标识的侯选关键字。一个表最多只可以有一个主关键字。主关键字又称为主键 |
|
公共关键字 |
在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为这两个关系的公共关键字。 |
|
外关键字 |
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外关键字。由此可见,外关键字表示了两个关系之间的联系。以另一个关系的外关键字作主关键字的表被称为主表,具有此外关键字的表被称为主表的从表。外关键字又称作外键。另外,表间关系也是通过主键来实现的。一个表可以有多少外键,即可以跟另外多个表建立关系。 |
|
总结 |
总结: 1>外键一般设置多的这边,冗余小 2>外键关联的字段,在另一张表一般是主键 3>主键所在的表称之为主键表(主表),外键所在的表称之为外键表(从表) 4>外键与主键的数据类型要致 |
数据类型
|
字符型 |
char(长度)、varchar2(长度) |
|
数值型 |
number(有效数据的个数,保留小数的位数) |
|
日期类型 |
date、datestamp |
创建数据表的语法
create table 表名
(
字段名 数据类型 约束,
字段名2 数据类型 约束
)
//创建表时可以不先添加约束,创建之后可以通过
//alter table 表名 constraint 列名 约束(列名);
约束
|
主键约束 |
primary key |
|
外键约束 |
foreign key 当前表绑定外键的字段名 references 主键所在的表的名字(主键名) |
|
空/非空约束 |
null/not null |
|
默认约束 |
default '默认值' |
|
检查约束 |
check(字段...) |
|
唯一约束 |
unique |
//主键约束可以没有,只能有一个,主键不能为null
//唯一约束可以没有,可以有多个,唯一可以为null
对于表的操作语法
|
修改表名 |
alter table 表的名称 rename to 新的表的名称 |
|
修改字段名 |
alter table 表的名称 rename column 字段的名称 to 新的字段名称 |
|
添加字段 |
alter table 表的名称 add (字段名 数据类型 约束,字段名2 数据类型 约束) |
|
修改数据类型 |
alter table 表名 modifiy (字段名 数据类型) |
|
删除字段 |
alter table 表名 drop column 字段名 |
|
添加主键 |
alter table 表名 add constraint 列名 primarykey(列名) |
|
删除主键 |
alter table 表名 drop constraint 列名 |
|
添加外键 |
alter table 表名 add constraint 字段名 foreignkey(字段名) references 主表(主键) |
|
添加检查约束 |
Alter table 表名 add constraint 字段名 check(length(字段名)>=2) |
|
添加唯一约束 |
alter table 表名 add constraint 字段名 unique(字段名) |
|
删除外键 |
alter table 表名drop constraint 字段名 |
|
删除数据库中的表及其中的数据 |
drop table 表名[purge]; //purge:清除缓存 |
|
删除数据库中的表的数据,而不会删除表 |
truncate table 表名 |
其他create命令
|
创建数据表索引 |
CREATE INDEX |
|
创建存储过程 |
CREATE PROCEDURE |
|
创建用户函数 |
CREATE FUNCTION |
|
创建视图 |
CREATE VIEW |
|
创建触发程序 |
CREATE TRIGGER |
|
创建序列号 |
CREATE SEQUENCE |
CREATE SRQUENCE 创建
CREATE SEQUENCE 名称 INCREMENT BY 1 --每次加几个
START WITH 1 --从 1 开始计数
NOMAXVALUE --不设置最大值
NOCYCLE --一直累加,不循环
CACHE 10 --使序列号预分配,默认 NOCACHE
CREATE SRQURNCE 删除
drop sequence 名称
修改表数据语法
update 表名 set
字段1='新值',
字段2='新值',
字段3='新值'
where 条件
//可以通过条件来确定是需要修改那行,通过字段来选择需要修改的当行的列数据
//如果没有写条件,则会把整个表都修改了
查询数据
select [distinct | 聚合函数] 字段集合 [as 别名]|*from 表名
[where 查询条件语句集合]
[group by 分组字段列表]
[having 过滤条件语句集合] 分组查询条件
[order by 排序字段集合 [asc | desc]]
查询全部数据
select * from 表名 或者 select 字段名1,字段名2,字段名3 from 表名
//在查询全部数据时,字段名可以写*或把每一个字段名写出来进行查询。
按条件查询
select * from 表名 where 条件
模糊查询(like)
select * from 表名 where 字段名 like '内容'
//模糊查询是通过在'内容'当中,用部分的字段内容与通配符:_与%来使用。
//_代表的是一个任意的字符
//%代表的是0个或多个任意的字符
查询某个字段是否为空(is null,is not null)
select * from 表名 where 字段名 is null或者is not null
//当是is null时着会查询指定字段内所有为空的行
//当是is not null 时着会查询指定字段内所有有内容的行
查询匹配列表中的某一个值(in)
select * from 表名 where 字段名 in(内容1,内容2,内容3)
//通过内容来匹配选定字段的所有内容相同的行
查询前面的n条记录
select 列名1 ...列名n from
(
select 列名1 ...列名n
from 表名 order by 列名1
)
where rownum <=N(抽出记录数)
order by rownum asc
//rownum是用来产生序列号的伪列
字符串连接:||
select 'hello' || ' world' from dual
//在oracle中||是用于字符串连接,与SQL数据库中的用+号连接是不一样的。
排序(默认的是升序)
order by 字段名 asc | desc
//asc:升序(默认)
//desc:降序
聚合函数
|
求最大值 |
max |
|
求最小值 |
min |
|
求和 |
sum |
|
求平均值 |
avg |
|
求记录数 |
count |
聚合函数语法
select
聚合函数(字段名),
聚合函数(字段名)
from 表名;
//在查询语句当中,聚合函数可以使用多个
//count中如果传递具体字段时,不会统计null的字段聚合函数一般结合分组函数使用
集合操作符
|
union |
取出2个表数据合并,去除重复记录 |
|
union all |
取出2个表数据合并,保留重复记录 |
|
minus |
取出2个表中不同数据 |
|
Intersect |
取出2个表中共有数据【交集】 |
连接查询(多表查询)
内连接
内连接: select * from 表1 inner join 表2 on 表1.字段=表2.字段
//一般是根据主键和外键进行连接
等值连接: select * from 表1,表2 where 表1.字段=表2.字段
不等值连接: select * from 表1,表2 where 表1.字段!=表2.字段
左外连接: select * from 表1 left [outer] join 表2 on 表1.字段=表2.字段
右外连接: select * from 表1 right [outer] join 表2 on 表1.字段=表2.字段
完全外连接: select * from 表1 full [outer] join 表2 on 表1.字段=表2.字段
子查询
//概念:当一个查询是另一个查询的条件时,称为子查询。
//子查询可以使用在SELECT、INSERT、UPDATE或DELETE语句中
|
在SELECT语句中使用子查询 |
select * from 学生信息 where 学号 in (select 学生编号 from 成绩信息 where 分数>96) |
|
在INSERT语句中使用子查询 |
insert into 学生信息 values ('2014010102','李四四',(select 性别 from 学生信息 where 姓名='张苗苗'),'1999-09-09','汉族','20050101','广东珠海') |
|
在UPDATE语句中使用子查询 |
update 学生信息 set 性别=(select 性别 from 学生信息 where 姓名='赵希坤') where 姓名='张苗苗' |
|
在DELETE语句中使用子查询 |
delete from 学生信息 where convert(varchar,家庭住址)=(select convert(varchar,家庭住址) from 学生信息 where 姓名='张苗苗') |
事物处理
|
commit:提交事务 |
show autocommit : 显示是否自动事务提交 set autocommit=on|off : 设置是否自动事务提交 |
|
rollback:事务回滚 |
rollback //直接rollback的话,就会回滚最近一次提交的数据 rollback to 保存点 //rollback to 保存点,可以回滚当时保存的数据 |
|
设置保存点 |
savepoint 保存点名称 |
|
设置只读事务 |
set transaction read only |

浙公网安备 33010602011771号