数据库实验报告 创建学生关系数据表、课程表、选课表 SQL Kingbase

版权声明:作者:cheese0_0,转载请注明出处来自https://blog.csdn.net/cheese0_0 商业转载请联系作者获得授权,非商业转载请注明出处 https://blog.csdn.net/cheese0_0/article/details/85058446

一、实验题目
已有条件:Kingbase数据库软件包。
要求:请安装Kingbase数据库软件,在数据库软件中创建一个自己名字的模式,在该模式下创建学生关系数据表、课程表、选课表。
插入一些数据,尝试查询、更新、删除
二、相关原理与知识
(完成实验所用到的相关原理与知识)
1.定义模式
在SQL语句中模式定义语句如下:

CREATE SCHEMA <模式名>AUTHORIZATION<用户名>;

2.定义基本表

CREATE TABLE<表名>  (<列名><数据类型> [列级完整性约束条件]
[,<列名><数据类型> [列级完整性约束条件]]
…
[,<表级完整性约束条件>]);

3.数据类型:
在这里插入图片描述
4.查询语法:

SELECT [ALL | DISTINCT] <目标列表达式> [,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC | DESC ] ] ;

注:
SELECT子句:指定要显示的属性列;
FROM子句:指定查询对象(基本表或视图);
WHERE子句:指定查询条件;
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中使用集函数;
HAVING短语:筛选出只有满足指定条件的组;
ORDER BY子句:对查询结果按指定列值升序或降序排序。
5.插入数据
插入单个元组--新元组插入指定表中。
语句格式:

    INSERT
	INTO <表名> [(<属性列1>[,<属性列2 >…)]
	VALUES (<常量1> [,<常量2>]    … ) ;

注:
INTO子句
指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句
提供的值的个数和值的类型必须与INTO子句匹配
6.修改数据:
语句格式:

 UPDATE  <表名>
   SET  <列名>=<表达式>[, <列名>=<表达式>]…
   [WHERE  <条件>];

功能:
修改指定表中满足WHERE子句条件的元组。
注:
SET子句--指定修改方式,要修改的列和修改后取值
WHERE子句
指定要修改的元组
缺省表示要修改表中的所有元组
7.删除数据
语句格式:

DELETE
FROM   <表名>
[WHERE   <条件>] ;

功能:
删除指定表中满足WHERE子句条件的元组
注:
WHERE子句
指定要删除的元组
缺省表示要修改表中的所有元组
7.设置搜索模式路径
SET search_path TO “S-T”;
SET search_path TO PUBLIC;
SET search_path TO “S-T”,PUBLIC;
三、实验过程
(清晰展示实际操作过程,相关截图及解释)
1.建立以@@@命名模式;
2.建立如下三个表:
学生表:Student(Sno,Sname,Ssex,Sage,Sdept),用来存放学号、学生姓名、性别、年龄和所在院系,其中Sno为主码;
课程表:Course(Cno,Cname,Cpno,Ccredit),存放课程编号、课程名称、先修课程和学分,其中Cno为主码;
学生选课表:SC(Sno,Cno,Grade),存放学号、课程号和该名学生在此课程得分,其中主码由两个属性(Sno和Cno)组成,必须作为表级完整性进行定义,另外,注意Sno和Cno为外码,参照表分别为STUDENT和COURSE。
建立模式和表后可以得到如下目录:
在这里插入图片描述
3.数据插入:
然后向STUDENT表、COURSE表和SC表中添加学生信息。
发挥想象,插入数据后的表如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.数据查询:
接下来查询STUDENT表中的姓名与性别。
使用SELECT语句对STUDENT表进行查询姓名与性别。
在这里插入图片描述
5.数据修改:
修改COURSE 表中的数据,将课程号为05的信安数基的学分改为3。运行代码后,打开COURSE表,此时CCREDIT已修改为3,如图所示。
在这里插入图片描述
6.数据删除:
将SC表中学号为201803006的同学,且课程代码为02,得分为92的这条数据删除。
打开表SC可以发现,此时201803006同学在02课程中得分为92的数据已经删除。(左图为原来的SC表,右图为运行删除代码后的SC表)
在这里插入图片描述
在这里插入图片描述
四、实验结果与分析
用SQL语句建成了简单的学生选课信息系统,由三个表组成,分别为STUDENT表(用来存放学生信息,包括学号、姓名、性别、年龄、所在系),COURSE表(用来存放课程信息,内含课程号、课程名、先修课程、学分),以及SC表(由学号、课程号以及成绩组成),值得注意的是,SC表中的学号和课程号为外码,与STUDENT表和COURSE表相关。
有了表的框架之后,发挥想象,向表中插入数据。运用书中INSERT相关内容,逐个向表中插入数据。然后对表尝试查询、更新和删除操作。查询操作后,数据库会直接给出查询所得的内容。修改操作后,系统提示语句运行正确或错误,若成功,刷新表后,即可发现数据信息修改完毕,否则依据错误提示进行修改。删除操作与修改操作相似。
五、问题总结
(记录所遇到的问题及解决方法)
1.
遇到问题:在建立表的时候找不到我所定义的名为@@@的SHAME
解决方法:在定义表之前,加上一句SET search_path TO @@@;
2.
遇到问题:SQL语句中所有的标点符号均为英文字符,在写的过程中混入了中文字符,因无法识别导致运行失败。
解决方法:将中文字符改为英文字符。
六、源代码
(源程序)
建立模式:

CREATE SCHEMA @@@

建立STUDENT表:

 SET search_ path TO @@@;
	CREATE TABLE  Student
        ( Sno     CHAR(9)  PRIMARY  KEY ,
         Sname   CHAR(20)  UNIQUE ,
         Ssex     CHAR(2) ,
         Sage     SMALLINT ,
         Sdept    CHAR(20)
	    ) ;

建立COURSE表:

    SET search_ path TO @@@;
CREATE TABLE  Course
           (Cno     CHAR(4) PRIMARY KEY,
        	 Cname   CHAR(40) NOT NULL,            
         	 Cpno    CHAR(4),               	                      
           Ccredit   SMALLINT,
          ); 

建立SC表:

 SET search_ path TO @@@;
 	CREATE TABLE  SC
           (Sno  CHAR(9), 
           Cno  CHAR(4),  
           Grade  SMALLINT,
           PRIMARY KEY (Sno,Cno),  
                      /* 主码由两个属性构成,必须作为表级完整性进行定义*/
           FOREIGN KEY (Sno) REFERENCES Student(Sno),
                     /* 表级完整性约束条件,Sno是外码,被参照表是Student */
           FOREIGN KEY (Cno) REFERENCES Course(Cno)
                     /* 表级完整性约束条件, Cno是外码,被参照表是Course*/
        ); 

插入数据(部分代码):

INSERT INTO "@@@"."SC"
         ("201801001","04","94" )
 VALUES 
         ('CHAR (9)','CHAR (4)','SMALLINT' );

查询STUDENT表中的姓名与性别:

SELECT "SNAME","SSEX"
FROM "@@@"."STUDENT";

更新COURSE表中的数据:

UPDATE "@@@"."COURSE"
SET "CCREDIT"='3'
WHERE "CNO"='05';

删除SC中的数据:

DELETE "@@@."SC"
WHERE Sno='201803006' AND Cno='02' AND Grade='92' ;

猜你喜欢

转载自blog.csdn.net/cheese0_0/article/details/85058446