操作系统:windows10-64位
编译工具:SQL Developer
时间:2020-05-27
创建表:
CREATE TABLE Student
(
Sno varchar2(17) primary key,
Sname varchar2(10) not null UNIQUE,
Sage INT,
Ssex char(2) CHECK(Ssex IN ('男','女') ),
Sdept varchar2(20)
);
CREATE TABLE Course
(
Cno varchar2(10) primary key,
Cname varchar2(25) not null UNIQUE,
Ccredit integer
);
CREATE TABLE SC
(
Sno varchar2(17),
Cno varchar2(10) ,
Grade numeric(5,2),
primary key(Sno, Cno),
foreign key (Sno) references Student(Sno),
foreign key (Cno) references Course(Cno)
);
插入数据:
Student:
INSERT INTO student VALUES ('20200526','属性1',20,'男','计算机');
INSERT INTO student VALUES ('20200527','属性2',21,'男','计算机');
INSERT INTO student VALUES ('20200528','属性3',19,'女','工商管理');
Course:
INSERT INTO Course VALUES ('2020','生物学基础',2);
INSERT INTO Course VALUES ('2021','地理学基础',2);
SC:
INSERT INTO SC VALUES ('20200526','2020',98);
INSERT INTO SC VALUES ('20200527','2020',59);
INSERT INTO SC VALUES ('20200528','2021',90);
select * from student;
输出:
SNO SNAME SAGE SSE SDEPT
----------------- ---------- ---------- --- --------------------
20200526 属性1 20 男 计算机
20200527 属性2 21 男 计算机
20200528 属性3 19 女 工商管理
比如学号Sno 和 性别Ssex:
select sno,ssex from student;
输出:
SNO SSE
----------------- ---
20200526 男
20200527 男
20200528 女
比如筛选出 Sage >= 20 的人姓名和年龄:
select sname,sage from student where sage >= 20;
输出:
SNAME SAGE
---------- ----------
属性1 20
属性2 21
比如 Sage <= 20 且 性别为女:
select sname,sage from student where (sage <= 20 and ssex in '女');
或者:select sname,sage from student where (sage <= 20 and ssex = '女');
输出:
SNAME SAGE
---------- ----------
属性3 19
比如查询姓名中带‘1’的人的所有信息:
select * from student where sname like '_%1'; /*_是填充符号,就是说‘1’前面至少有1个子
或者:select * from student where sname like '%1';
输出:
SNO SNAME SAGE SSE SDEPT
----------------- ---------- ---------- --- --------------------
20200526 属性1 20 男 计算机
比如查询出 Grade >= 60 的人的姓名:
select Sname from Student where Sno in (select Sno from SC where Grade >= 60);
输出:
SNAME
----------
属性1
属性3
update sc set grade == 89 where grade = 90;
输出:
1行已更新。
比如Sname的类型varchar2(10) 改为varchar2(12)
alter table student modify(sname varchar2(12));
输出:
Table STUDENT已变更。
比如为Course表增加SPno列:
alter table Course add SPno varchar2(10);
输出:
Table COURSE已变更。
比为Course表的SPno属性增加UNIQUE约束:
alter table Course add constraint course_spno UNIQUE(spno); /* course_spno为约束名*/
输出:
Table COURSE已变更。
或者,简单点,可以这样增加:
alter table Course add UNIQUE(spno);
输出:
Table COURSE已变更。
比如删除SC表中Grade = 89的所有数据:
delete from sc where grade = 89;
输出:
1行已删除。
当然,你也可以删除其他表的数据,这里有两中方式:
a.设置级联,并级联删除。
b.先删除SC表中数据,在删除其他表中数据。
因为SC表中Sno和Cno作为外码,从Student和Course表中引入。
比如删除Student表中Sname的UNIQUE约束:
alter table Student drop UNIQUE(sname);
输出:
Table STUDENT已变更。
也可以用约束名删除,如删除Course表的SPno属性的UNIQUE约束:
alter table Course drop constraint course_spno;
输出:
Table COURSE已变更。
比如删除Course中的SPno:
alter table course drop(spno);
输出:
Table COURSE已变更。
Drop table SC;
Drop table Student;
Drop table Course;
输出:
Table SC已删除。
Table STUDENT已删除。
Table COURSE已删除。
注意:如果不是级联删除,先删除SC表,在删除其他表。