Task 1. 基于Postgresql数据库,创建如下数据库内的对象
(1)创建“S-T”模式(schema)
(2)在“S-T”模式内,创建三个表:student,course,sc,表结构见教材第3.2节(P79-P89)
要求: 数据类型合理,要有完整的主键、外键约束
Task1
(1)创建“S-T”模式
代码:CREATESCHEMA“S-T”AUTHORIZATIONa2513210112
结果:服务器托管网
(1)在“S-T”模式内,创建三个表:student,course,sc,表结构见教材第3.2节(P79-P89)
代码:
--创建student、course、sc
CREATE TABLE student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course
(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES course(Cno)
);
CREATE TABLE sc
(
Sno CHAR(9),
Cno CHAR(4),
Grede SMALLINT,
PRIMARY KEY (Sno ,Cno),
FOREIGN KEY(Sno) REFERENCES student(Sno),
FOREIGN KEY (Cno) REFERENCES course(Cno)
);
结果:
Task 2. 将教材中图3.2(P79-P80)中的三个表中的数据,导入到上述建好的数据库中。
给出建表脚本
给出数据导入的SQL脚本
给出导入以后数据库中的数据的截图(select * from 表名 执行结构的截图)
注:51cto认为王min这个名字是敏感词汇,我改成王闵,复制代码后修改回来即可。
Task2 --对Student表插入
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215121','李勇','男',20,'CS');
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215122','刘晨','女',19,'CS');
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215123','王闵','女',19,'MA');
insert into STUDENT(Sno,Sname,Ssex,Sage,Sdept) values('201215125','张立','男',19,'IS');
select * from student;
--对course表插入
--要注意外键约束,保持先修课先出现的逻辑顺序
INSERT INTO course(Cno,Cname,Cpno,Ccredit) VALUES('2','数学',NULL,2);
INSERT INTO course(服务器托管网Cno,Cname,Cpno,Ccredit) VALUES('6','数据处理',NULL,2);
INSERT INTO course(Cno,Cname,Cpno,Ccredit) VALUES('7','PASCAL语言','6',4);
INSERT INTO course(Cno,Cname,Cpno,Ccredit) VALUES('4','操作系统','6',3);
INSERT INTO course(Cno,Cname,Cpno,Ccredit) VALUES('5','数据结构','7',4);
INSERT INTO course(Cno,Cname,Cpno,Ccredit) VALUES('1','数据库','5',4);
INSERT INTO course(Cno,Cname,Cpno,Ccredit) VALUES('3','信息系统','1',4);
SELECT * FROM course;
--对sc表进行插入
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215121','1',92);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215121','2',85);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215121','3',88);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215122','2',90);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215122','3',80);
SELECT * FROM sc
截图:
Task 3. 完成以下查询,要求:给出详细的SQL语句, 给出执行结果截图
(1)查询每个学生及其选修课程的情况
SQL脚本:
SELECT s1.*,c1.cname FROM student s1 JOIN sc s2 ON s1.sno=s2.sno
JOIN course c1 ON c1.cno=s2.cno
截图:
(2)查询选修2号课程且成绩在90分及以上的所有学生的学号和姓名
SQL脚本:
SELECT s1.sname,s1.sno,s2.grade,c1.cno,c1.cname
from student s1
JOIN sc s2 ON s1.sno=s2.sno
JOIN course c1 ON c1.cno=s2.cno
WHERE c1.cno='2' AND s2.grade>=90
截图:
(3)查询选修数学课程且成绩在90及分以上的所有学生的学号和姓名
SQL脚本:
SELECT s1.sname,s1.sno,s2.grade,c1.cno,c1.cname
from student s1
JOIN sc s2 ON s1.sno=s2.sno
JOIN course c1 ON c1.cno=s2.cno
WHERE c1.cname='数学' AND s2.grade>=90
截图:
(4)查询每一门课的间接先修课(即先修课的先修课)
SQL脚本:
SELECT c1.cno,c2.cpno FROM course c1
JOIN course c2 ON c1.cpno=c2.cno
截图:
(5)查询每个学生的学号、姓名、选修的课程名及成绩(含没有选修任何课程的学生信息)
SQL脚本:
SELECT s1.sno,s1.sname,c1.cname,s2.grade FROM student s1
JOIN sc s2 ON s1.sno=s2.sno
JOIN course c1 ON c1.cno=s2.cno
截图:
(6)查询与“刘晨”在同一个系学习的学生。
SQL脚本:
SELECT s2.sname,s2.sdept FROM student s1
JOIN student s2 ON s1.sdept=s2.sdept
WHERE s1.sname = '刘晨' AND s2.sname != '刘晨'
截图:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
在一些特殊的场景,我可能会更换访问的数据库,猜想(玩游戏的时候:选择不同的区登录,选区就是更换数据库,比如你用qq登录王者,可登录1区或者2区,两个区中,你的英雄,皮肤,和段位是不一样的) 上下文的调整 (1) 在上下文中加入一个静态的字段 private s…