0
点赞
收藏
分享

微信扫一扫

Postgresql数据库之建表、数据导入与简单查询

Task 1. 基于Postgresql数据库,创建如下数据库内的对象

(1)创建“S-T”模式(schema)

(2)在“S-T”模式内,创建三个表:student,course,sc,表结构见教材第3.2节(P79-P89)

要求:<1> 数据类型合理,<2>要有完整的主键、外键约束

Task1

(1) 创建“S-T”模式

代码:CREATE SCHEMA "S-T" AUTHORIZATION a2513210112

结果:

Postgresql数据库之建表、数据导入与简单查询_Sage

(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)

);

结果:

Postgresql数据库之建表、数据导入与简单查询_SQL_02

Postgresql数据库之建表、数据导入与简单查询_Sage_03

Postgresql数据库之建表、数据导入与简单查询_SQL_04

Postgresql数据库之建表、数据导入与简单查询_建表_05


Task 2. 将教材中图3.2(P79-P80)中的三个表中的数据,导入到上述建好的数据库中。

<1> 给出建表脚本

<2> 给出数据导入的SQL脚本

<3> 给出导入以后数据库中的数据的截图(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

截图:

Postgresql数据库之建表、数据导入与简单查询_Sage_06

Postgresql数据库之建表、数据导入与简单查询_Sage_07

Postgresql数据库之建表、数据导入与简单查询_SQL_08

Task 3. 完成以下查询,要求:<1>给出详细的SQL语句,<2> 给出执行结果截图

(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

截图:

Postgresql数据库之建表、数据导入与简单查询_Sage_09

(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

截图:

Postgresql数据库之建表、数据导入与简单查询_数据库_10

(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

截图:

Postgresql数据库之建表、数据导入与简单查询_SQL_11

(4)查询每一门课的间接先修课(即先修课的先修课)

SQL脚本:

SELECT c1.cno,c2.cpno FROM course c1 
JOIN course c2 ON  c1.cpno=c2.cno

截图:

Postgresql数据库之建表、数据导入与简单查询_数据库_12

(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

截图:

Postgresql数据库之建表、数据导入与简单查询_建表_13

(6)查询与“刘晨”在同一个系学习的学生。

SQL脚本:

SELECT s2.sname,s2.sdept FROM student s1
JOIN student s2 ON s1.sdept=s2.sdept
WHERE s1.sname = '刘晨' AND s2.sname != '刘晨'

截图:

Postgresql数据库之建表、数据导入与简单查询_数据库_14

举报

相关推荐

0 条评论