数据库学习之实验一+Oracle数据库的基本操作

数据库学习之实验一+Oracle数据库的基本操作

 

  

实验一 数据定义和单表查询 


一、实验目的:

1.  熟悉数据库的交互式SQL工具

2.  通过本实验能够熟练应用sql语言进行基本表和索引的定义,能够对表的结构进行修改和删除,并通过数据更新命令输入相应的数据.

 

 

 

 

二、实验环境:

 

PC机,Windows7,PL/SQL

 

三、实验内容:

 

(一) 数据定义

一、建立基本表

创建学生表(student)、学生选课表(SC)、课程表(course)

1)·学生表:Student_学号后四位 (Sno, Sname, Ssex, Sdept)其中学号Sno主码,其中sno为number,sname为varchar2(10),ssex为char(2),sdept为varchar2(10)

 

Createtable Student_4128(

Sno numberconstraint pkk_snoprimarykey,

Sname varchar(10),

Ssex varchar(2),

Sdept varchar(10));

--注释

2)·课程表:Course_学号后四位(Cno, Cname, Cpno, Ccredit)其中课程号Cno主码;先行课为外码参照Course表中Cno字段。其中cno为number,cname为varchar2(10),cpno为number,ccredit为number(2)。

方法1:

createtable Course_4128(

       Cno numberconstraint pk_cnoprimarykey,

       Cname varchar(10),

       cpno number ,

       ccredit varchar(2),

       constraint fk_cpnoforeignkey(Cpno)references Course_4128(Cno)

);

 

方法2:

createtable Course_4128(

       Cno numberconstraint pk_cnoprimarykey,

       Cname varchar(10),

       cpno number(10)constraint fk_cpnoreferences Course_4128(Cno),

       ccredit varchar(2)

);

3)·学生选课表:SC_学号后四位(Sno, Cno, Grade)其中(Sno、Cno)为主码;Sno为外码参照Student表中sno字段;Cno为外码参照Course表中cno字段。

createtable SC_4128(

       Sno number(10) ,

       Cno number(10),

       Grade number(10,2),

       constraint pk_keyprimarykey(Sno,Cno),

       constraint fk_snoforeignkey(Sno)references Student_4128 (Sno),

       constraint fk_cnoforeignkey(Cno)references Course_4128 (Cno)

);

二.修改基本表

1)在Student表中加入属性Sage(number型)。

altertable Student_4128add Sage number(10);

2)修改某个表的属性的数据类型。

修改Student 表中Sdept的数据类型varchar-àvarchar2

altertable Student_4128modify Sdept varchar2(10);

3)给表student的sex列添加一个自定义约束sex只能取’男’,’女’两个值。

altertable Student_4128addconstraint S_sexcheck(Ssex in('',''));

三、索引操作

1.建立索引

1)在Student表上建立关于Sname的唯一索引stusnam+学号后四位

createuniqueindex stusnam_4128on Student_4128 (Sname);

2)在SC表上建立关于Sno升序、Cno降序的唯一索引i_sc+学号后四位

createuniqueindex i_4128on SC_4128(Sno ASC,Cno DESC);

2.删除索引

1)删除Student表上的索引stusnam+学号后四位

dropindex stusnam_4128;

2)删除Course表上的索引i_sc+学号后四位

dropindex i_4128;

四.删除基本表

1) 删除基本表Student

drop table student_4128;

drop table student_4128

    ORA-02449:表中的唯一/主键被外键引用

2)删除基本表SC

drop table sc_4128;

Table dropped

结果如何,先执行2),在执行1)结果如何。

    drop table student_4128;

Table dropped

 

五、单表查询

运行如下sql代码:

Create table student as select * from scott.student;

Create table course as select * from scott.course;

Create table sc as select * from scott.sc;

再执行如下的查询:

1.求数学系学生的学号和姓名。

 

select Sno,Sname from student where Sdept='MA';

      SNO SNAME

--------- --------

 20070001 李佳

 20070003 王添

20070006 张力

 

2.求选修了课程的学生学号。

 

select distinct Sno from SC where cno is not null;

 

      SNO

---------

 20070003

 20070001

 20070002

 20070005

3.求选修课程号为‘2’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。

 

select sno,Grade from SC where cno='2' order by Grade DESC,Sno ASC;

 

      SNO GRADE

--------- -----

 20070002    90

 20070003    90

 20070001    85

 

 

4.求选修课程号为’2’且成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出。

 

select sno,Grade from SC where cno='2' and Grade>=80 and Grade<=90;

 

      SNO GRADE

--------- -----

 20070001    85

 20070002    90

 20070003    90

 

select Sno,0.8*Grade from SC where cno='2' and Grade>=80 and Grade<=90;

 

      SNO  0.8*GRADE

--------- ----------

 20070001         68

 20070002         72

 20070003         72

 

5.求数学系或计算机系姓张的学生的信息。

 

select * from student where sname like '%' and Sdept='MA' or sname like '%' and Sdept='IS';

 

      SNO SNAME    SSEX SAGE SDEPT

--------- -------- ---- ---- --------------------

 20070004 张力         21 IS

 20070006 张力         19 MA

 

6.求缺少了成绩的学生的学号和课程号。

 

select sno,cno from sc where grade is null;

 

      SNO   CNO

--------- -----

 

 

7.查询各个课程号与相应的选课人数。

 

select cno,count(*) from sc group by cno;

 

  CNO   COUNT(*)

----- ----------

    1          3

    6          1

    2          3

    4          3

    5          2

    3          3

    7          1

 

7 rows selected

 

select cno,count(*) num from sc group by cno order by cno ASC;

 

  CNO        NUM

----- ----------

    1          3

    2          3

    3          3

    4          3

    5          2

    6          1

    7          1

 

7 rows selected

 

 

 

 

 

 

四、实验结果与分析

 

通过第一次做有关数据库的实验,又重新熟悉了对环境的基本配置,同时也更加明确了我们是在使用的Oracle数据库,对于不同的数据库我们都有相同的标准,但是会有不同的语句来实现不同的功能,在使用时一定要注意书写规范。学会了语法就可以很容易编写出基本的代码了。

 

思考题:

1)一个列上有外码约束如何实现。

(1)在创建表的时候在表的某一列上添加外码约束可以用如下语句:

表级添加:

Constraint 外键约束名 foreign key(列名) references 被参考的表名(主键名);

列级添加:

createtable XXX(snonumber(10)constraint fk_XXXnamereferences student(Sno));

(2)创建好表格之后如果需要增加约束条件,则只需要用如下语句:

alter table student add constraint PK_student primary key(sno);

 

2)删除表时,表中某一列是另外一个表的外键,此表如何删除。

 

要先删除引用了该外键的表,再对此表进行删除操作才可以。

3)对表中某一列的数据类型进行修改时,要修改的列是否必须为空列。

 

正确,经测试,得以下结果:

alter table student modify sname number(10);

 

alter table student modify sname number(10)

 

ORA-01439: 要更改数据类型,则要修改的列必须为空

 

 

 

 

 

五、指导教师意见

采分项

分数

得分

格式规范程度

20

 

课堂表现

20

 

内容正确性

40

 

提交报告是否及时

10

 

心得体会

10

 

合计:

 

 

 

 

 

                                                 签名:

 

                                                 日期:

 

 

 


你可能感兴趣的:(数据库)