Oracle 建表、删除表,数据,约束,创建视图、索引,表设计的三范式
day04
1. 建表、删除表
2. 数据:插入、修改、删除
3. 约束:非空约束、主键约束、外键约束【难】、检查约束、唯一约束
4. 创建视图、索引*
5. 表设计的三范式
一、建表、删表
建表语法>>> | 删表的语法>>>
create table 表名( | dropt table 表名;
列名1 列类型 列级约束,
... ...
列名N 列类型 列级约束,
表级约束1...,
表级约束2...
);
1、创建学生信息表:学号、姓名、地址、电话、邮箱、年龄
学号:唯一、必填不可为null 【主键】
姓名:必填,但可重复
地址:可填、可不填
邮箱:包含@
电话: 非必填字段
年龄:>=15岁
drop table studentTB;
create table studentTB(
id number(5) ,
name varchar2(50) not null, ###姓名
email varchar2(50), ###邮箱
age number(3), ###年龄
constraint PK_studentTB_id primary key(id), ###设id是当前表的主键
constraint CK_studentTB_age check(age>=15 ), ###检查年龄填写时必须>=15
constraint CK_studentTB_email check(email like '%@%') ###检查邮箱填写时必须包含@
);
--插入1000号学生蛋总
insert into studentTB(id,name,age,email) values(1000,'蛋总',28,'dan@qq.com'); commit;
2.创建课程表:课程编号、课程名
create table classTB( ###创建课程表
id number(4), ###课程编号
name varchar2(30), ###课程名称
constraint PK_classTB_id primary key(id) ###设id是当前课程表的主键
);
--插入2门课程
insert into classTB(id,name) values(1,'数学');
insert into classTB(id,name) values(2,'体育');
commit;
3.考试信息表:考试编号id、学号sid (关联学生表的id)、课程号cid (关联课程表的id)、成绩
create table scoreTB( ###考试表
id number(5), ###考号
myCode varchar2(20), ###考场编码
sId number(5), ###学号
cId number(4), ###课程号
score number(5,2), ###成绩
constraint PK_scoreTB_id primary key(id), ###设id是课程表的主键
constraint FK_scoreTB_studentTB_sId foreign key(sid) references studentTB(id),##设sid外键关联学生表的主键id
constraint FK_scoreTB_classTB_cId foreign key(cid) references classTB(id)###设cid外键关联课程表的主键id
);
--插入1000学生(蛋总)的1号课程(数学)考试成绩
insert into scoreTB(id,mycode,sid,cid,score) values(101,'xdl184901',1000,1,59.5);
insert into scoreTB(id,mycode,sid,cid,score) values(102,'xdl184901',1000,1,62);
commit;
二、数据增、删、改
1.向学生表插入一行数据
插入语法:insert into 表名(列名1,...,列名n) values(值,....,值);
commit;
insert into studentTB(id,name,age,email) values(1000,'蛋总',28,'dan@qq.com');
insert into studentTB(id,name,tel,age,email,address) values(1001,'张绍刚','12345678901',38,'hei@qq.com','魔都');
commit;
2.修改当前蛋总第一次考试成绩
修改数据的语法:update 表名 set 列名1=值,列名2=值 ,.... where 更新条件;
update scoreTB set score=48 where id=101;
3.删除
删除数据的语法:delect from 表名 where 删除条件;
delete from scoreTB where id=101 ;
三、约束【默写】
1.主键约束,表级语法:constraint 自定义名 primary key(主键列名).
主键的特点:值唯一,值必填。
一个表只能有一个主键,但一个主键可以包含多列。*包含多列的主键我们称联合主键
2.检查约束,表级语法:constraint 自定义名 check(条件)
3.唯一约束,表级语法:constraint 自定义名 unique(列)
唯一的特点:值唯一,可空,
唯一约束与主键约束的区别是:一个表只能有1个主键,但一个表可以有多个唯一约束
唯一约束里值可以是null,但主键约束中值不能为null
4.外键约束,表级语法:constraint 自定义名 foreign key(外键列名) references 主表名(主键名)
四、视图
什么是视图?
答:用来存储查询语句
什么时候用视图呢?
答:当查询业务复杂且频繁执行时,这个业务还具有较为广阔的应用型,可以将此查询保存到视图。
1.先用system/123456系统管理身份登录,给scott这个用户授予视图创建的权利后,重新scott/tiger登录
c:\...>sqlplus system/123456
SQL> grant create view to scott;
SQL> conn score/tiger
2.创建视图:create view 视图名 as 查询语句;
例如:查询学生成绩显示姓名、课程名及考试相关信息
create view v_score
as
select sc.id scId, sc.mycode scCode, s.name stuName, c.name className,sc.score score
from studentTB s inner join scoreTB sc on s.id=sc.sid
inner join classTB c on c.id = sc.cid;
3.视图使用:select * from 视图名;
select * from v_score;
4.删除视图:drop view 视图名;
五、创建索引
1.先系统管理员授权:grant create any index to scott;
2.在用scott登录创建索引:create index 自定义索引名称 on 表(列)
create index index_score on scoreTB(sid);
六、作业
1.查每个学生每门课程的考试成绩
2.查没有参加考试的学生信息(学号、姓名)
3.查成绩不及格的信息(考号、学号、姓名、课程名、成绩)