广州大学学生实验报告
实验一:SQL语言
此篇博文主要分享本人的SQL语言—实验报告
此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合!
数据库原理实验之实验一:SQL语言
软件:Oracle SQL Developer
实验今天刚开始,然后花了几个小时做完了,花费时间多说明之前学的SQL语句记忆还不劳,还得继续苦练,加油!
一、数据库的创建与删除
1)使用Oracle SQL Developer创建连接
1、新建连接,system用户,密码是之前设置的。
2、创建新用户,名字为cc,密码是:c123,然后点击新建连接,输入用户名和密码即可。
create user cc identified by c123;
grant resource,connect to cc;
结果如下:
此次实验涉及的数据表:
2)创建以下数据表(Student(主码为SNO)、Course(主码为CNO)、SC(主码为(SNO、CNO)),其中SNO引用Student的SNO属性,CNO引用Course的CNO属性)
执行以下语句即可创建Student,Course,SC表:
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(5) primary key,
Cname varchar2(20) not null,
CPno varchar2(5),
Ccredit int
);
create table SC
(
Sno varchar2(17),
Cno varchar2(5),
Grade numeric(5,2),
primary key(Sno,Cno),
foreign key(Sno) references Student(Sno),
foreign key(Cno) references Course(Cno)
);
3)修改Course表的CPNO,使其为外码,引用Course表的CNO属性。
--执行语句
alter table course add constraint fk1
foreign key(CPno) references course(Cno);
--表示CPno是外码,被参照表是Course,被参照列是Cno
4)修改Student表格,用SQL语句为Student表格添加一个“入学时间”属性,属性名为Senrollment。
ALTER TABLE Student ADD Senrollment DATE;
5)向三个表格中插入3条数据,数据内容自编。
先查询日期格式语句:select sysdate from dual;
结果如下:
然后,向Student表中插入三行数据:
insert into Student values ('201000610002','罗嘉铭',
18,'男','网络工程','01-9月-2010');
insert into Student values ('201000610003','叶茵',
17,'女','软件工程','01-9月-2010');
insert into Student values ('201000610004','陈凯怡',
19,'女','网络工程','01-9月-2010');
select * from Student;
查看结果如下:
然后,向Course表中插入三行数据:
insert into Course values('1','离散数学',null,3);
insert into Course values('2','数据结构','1',3);
insert into Course values('3','数据库','2',3);
select * from Course;
查看结果如下:
最后向SC表中插入三行数据:
insert into SC values('201000610002','1',92);
insert into SC values('201000610004','2',88.5);
insert into SC values('201000610003','3',96.5);
select * from SC;
查看结果如下:
6)限定Ssex的值只能为“男”或者“女”。
--这个在创建表时已经限定了,具体语句为:
Ssex char(2) CHECK(Ssex IN ('男','女') ),
7)修改Course表格,用SQL语句为Course表格添加一个“说明”属性,属性名为“Cdesc”,类型为varchar2,长度为200。
--执行语句:
alter table Course add Cdesc varchar2(200);
--脚本输出:Table COURSE 已变更。
查看结果如下:
8)更改Course表格的Cdesc属性,使其长度变为500。
执行语句:
alter table Course modify(Cdesc varchar2(500));
--脚本输出显示:Table COURSE已变更。
9)删除刚建立的属性Cdesc。
执行语句:
alter table Course drop column Cdesc;
再查询Course表,结果可见Cdesc属性已经删除了,如下:
二、数据查询
1、创建新的用户并授权
create user bb identified by b123;
grant resource,connect,DBA to bb;
2、以用户bb的身份建立连接,并在此连接下执行后面的操作。
3、运行以下代码,删去旧的同名数据表:
Declare
tmp integer default 0;
Begin
select count(*) into tmp from user_tables where table_name='RB';
if(tmp>0) then
execute immediate 'drop table RB';
end if;
select count(*) into tmp from user_tables where table_name='READER';
if(tmp>0) then
execute immediate 'drop table READER';
end if;
select count(*) into tmp from user_tables where table_name='BOOK';
if(tmp>0) then
execute immediate 'drop table BOOK';
end if;
end;
问:为何要先删去RB?能不能先删去READER?
答:不能先删去READER! 答:RB表中记录了员工的借阅书籍记录,RB表中的RNO属性参照的是READER表中
的RNO列,如果先删去READER,则会使RB表不满足其表级完整性约束条件。
4、拷贝代码运行,建立表格并插入数据
create table Reader
(
RNO varchar2(4) primary key,
Rname varchar2(10) not null,
Rsex varchar2(2),
Rage integer,
Rboss varchar2(10),
Raddress varchar2(30)
) ;
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R001','张三',20,'男','李四','416');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R002','张三',35,'女',null,'417');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R003','李四',30,'男',null,'416');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R004','王五',20,'男',null,'417');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R005','马六',40,'男',null,'416');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R006','刘三',20,'男',null,'417');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R007','王四',40,'男','李四','416');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R008','李小龙',20,'男','李四','417');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R009','王小倩',40,'男','李四','416');
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress)
values('R010',