一、创建和管理表
1.1 常用的数据类型
varchar/varchar2 ---> 表示一个字符串
number(n) ---> 表示一个整数,整数的长度为n,可以使用int
number(m,n) ---> 表示一个小数,数字小数长度为n,整数长度为m-n,可以使用float
date ---> 表示日期类型,按照标准日期格式存放
clob ---> 大对象,表示大文本数据,一般存放4G文本
blob ---> 大对象,表示二进制数据,最大可以存放4G,如:电影、歌曲、图片
1.2 表的建立
语法: create table 表名称(
字段名称1 字段类型 [default 默认值],
...
字段名称n 字段类型 [default 默认值],
)
create table 表名称 as(子查询) ---> 将子查询的结果作为一张表
如果子查询写的是:select * from emp; 表示将表结构和表内容一起复制
如果子查询写的是:select * from emp where 1 =2; 加入一个永远都不会成立的条件,
则表示复制的只是表的结构,不复制表的内容
复制表的结构: select table temp as(select* from emp where 1=2);
1.3 表的删除
语法:drop table 表名称;
1.4 表的修改
通过alter指令可以增加新的列
例1:为emp表增加一个address列
alter table from add(address varchar2(200)default'暂无地址');
例2:修改emp表中的ename,将长度改为50
alter table from modify(ename varchar2(50));
1.5 重命名表
语法:rename 旧的表名称 to 新的表名称
1.6 截断表
如果需要清空一张表的数据,但是同时不需要回滚,可以立刻释放资源就可以使用截断表
语法:truncate table 表名称
二、约束
使用约束可以更好的保证数据库中数据的完整性
2.1约束的分类
a、主键约束primary key:表示一个唯一的标识,不可重复,不可为空
一般都使用在id上,主键约束可以在建表的时候指定
例1:创建一张person表,在pid上增加主键约束
createtable person(
pidvarchar2(18)primary key,
namevarchar2(200),
agenumber(3),
birthdaydate,
sevvarchar2(3)default'男', //默认值
)
例2:指定约束的名称:
createtable person(
pidvarchar2(18),
namevarchar2(200),
agenumber(3),
birthdaydate,
sexvarchar2(3)defult'男',
connstraintperson_pid_pk primary key(pid)
)
b、唯一约束unique:一个表中值允许建立一个主键约束,而其他列如果不希望出现重复的
值,就可以使用唯一约束
create table person(
pid varchar2(18),
name varchar2(200),
age number(3),
birthday date,
sex varchar2(3)default'男',
constraint person_pid_pk primary key(pid)
)
c、检查约束check:检查一个列的内容是否合法
create table person(
pid varchar2(18),
name varchar2(200)unique not null,
age number(3)not null check(age between 0 and 150),
birthday date,
sex varchar2(3)default '男' check (sex in('男','女','中')),
constraint person_pid_pk primary key(pid)
)
d、非空约束not nill:字段中的内容不能为空
create table person(
pid varchar2(18),
name varchar2(200)not null,
age number(3)not null,
birthday date,
sex varchar2(3)default'男',
constraint person_pid_pk primary key(pid)
)
e、主-外键约束foreign key:两张表中进行约束
例:完成一个程序,一本书只属于一个人
createtable person(
pidvarchar2(18),
namevarchar2(200)not null,
agenumber(3)not null,
birthdaydate,
sexvarchar2(3)defult '男',
constraintperson_pid_pk primary key(pid),
constraintperson_name_uk unique(name),
constraintperson_age_ck check(age between o and 150),
constraintperson_sex_ck check(sex in('男','女','中'))
);
createtable book(
bidnumber primary key not null,
bnamevarchar2(20),
bpricenumber(5,2),
pidvarchar2(18),
constraintperson_book_pid_fk foreign key(pid)references person(pid)
);
insertinto person(pid,name,age,birthday,sex)values('010101','张
三',23,to_date('1992-2-19','yyyy-mm-dd'),'女');
insertinto book(bid,dname,bprice,pid)values(1,'Java',89.9,'010101');
使用主-外键关联时的注意事项:
1、在子表中设置的外键,在父表中必须是主键
2、删除时应该先删除子表,在删除父表
在主-外键关联中也可以使用级联删除,即一个表中的数据在删除时,可以自动删除其对应的
子表记录
例:
createtable book(
bidnumber primary key not null,
bnamevarchar2(20),
bpricenumber(5,2),
pidvarchar2(18),
constraintperson_book_pid_fk foreign key(pid) references person pid
on detele
cascade
)
f、修改约束
如果一张表已经建立完成,则可以为其添加约束,关于约束类型的命名,一定要统一:
--primarykey-->主键字段_pk
--unique-->字段_uk
--check-->字段_ck
--foreignkey-->父字段_子字段_fk
例1:为person添加一个约束
altertable person add constraint person_pid_pk primary key(pid);
例2:删除person中的主键约束
altertable person drop constraint person_pid_pk;
三、rownum
rownum:表示行号,实际上这个是一个列的列名,一般称这个列为伪列
例1:在查询雇员表时加上rownum这个列名称
select rownum,empno,ename,job,sal,hiredate from emp;
rownum 本身采用自动编号的形式出现。
例2:查询出前5条雇员信息
select rownum,empno,ename,job,sal,hiredatefrom emp where rownum <= 5;
例3:查询出6-10条雇员信息
select * from (select rownum m,empno,ename,job,sal,hiredate from empwhere
rownum <=10) temp where temp.m >5;
例4:查询出后5条雇员信息
select * from (select rownum m,empno,ename,job,sal,hiredate from empwhere
rownum <=15 )temp where temp.m >10;
四、集合操作
三种集合操作:并(union)、交(intersect)、差(minus)
4.1union
将多个查询的结果组合到一个查询结果中,没有重复的内容
4.2union all
将多个查询结果组合到一个查询之中,但是包含了重复值
4.3intersect
返回多个查询结果中相同的部分
4.4 minus
返回两个查询结果的差集
例:复制emp表,将部门20的值全部取出
create table emp20 as select * from emp where empno = 20;
1)、验证union
select * from emp
union
select * from emp20;
2)、union all
select * from emp
union all
select * from emp20;
3)、验证intersect
select * from emp
intersect
select * from emp20;
4)、验证minus
select * from emp
minus
select * from emp20;