Guass数据库实验(超详细熟悉基础操作、命令)

该文章已生成可运行项目,

目录

实验一:建立数据库

实验二:数据库查询

插入数据

测试外键约束:尝试插入一个不存在的外键值

查询语句练习

查询“数据库系统”这门课的任课教师姓名

查询选修课程的学生学号、姓名、课程名称、成绩

查询高等数学成绩在 80 分以上的学生学号、姓名及成绩

查询张三选修课程的课程名称及对应成绩

查询所有学生的总成绩、平均成绩,并按总成绩降序排列

查询没有选修“数据库系统”的学生姓名

查询每门课程的最高成绩

查询至少选修了两门课程的学生姓名及课程数

实验三:数据库的物理设计

创建数据分区表

创建学生选课分区表

向分区中插入数据

查询主表中的数据,以及分区中的数据

体会外键约束

创建外键约束

测试外键约束

添加索引

权限管理

实验四:数据库开发

视图

创建视图

查询视图

 储存过程

创建存储过程:计算并保存学生的总成绩和总学分

调用储存过程

触发器

创建触发器

讨论视图,储存过程,触发器的使用范围以及优缺点

视图

储存过程

触发器


实验一:建立数据库

  • 购买云服务器后,启动,并使用cloudshell远程登陆

  • 使用DataStudio远程连接
  • 创建学籍与成绩管理系统

包含以下信息: 课程名称、课程代号、课程类型(必修、选修、任选)、学分、任课教师姓名、教师编号、教师职称、教师所属学院名称、教师所属学院代号、教师所授课程学生姓名、学生学号、学生所属学院名称、学生所属学院代号、学生所选课程、学生成绩。

-- 建立数据表

CREATE TABLE xyb (
    ydh CHAR(2) PRIMARY KEY,
    ymc VARCHAR(30) NOT NULL

);

CREATE TABLE xs (
    xh CHAR(10) PRIMARY KEY,
    xm VARCHAR(8) NOT NULL,
    ydh CHAR(2),
    bj VARCHAR(8),
    chrq DATE,
    xb VARCHAR(10),
    FOREIGN KEY (ydh) REFERENCES xyb(ydh)
);



CREATE TABLE js (
    jsbh CHAR(10) PRIMARY KEY,
    xm VARCHAR(8) NOT NULL,
    zc VARCHAR(6),
    ydh CHAR(2),
    FOREIGN KEY (ydh) REFERENCES xyb(ydh)
);

ALTER TABLE js
ALTER COLUMN xm TYPE VARCHAR(16);

ALTER TABLE js
ALTER COLUMN zc TYPE VARCHAR(16);

CREATE TABLE kc (
    kcbh CHAR(3) PRIMARY KEY,
    kc VARCHAR(20) NOT NULL,
    lx VARCHAR(10),
    xf NUMERIC(5,1)
);

CREATE TABLE sk (
    kcbh CHAR(3),
    jsbh CHAR(10),
    PRIMARY KEY (kcbh, jsbh),
    FOREIGN KEY (kcbh) REFERENCES kc(kcbh),
    FOREIGN KEY (jsbh) REFERENCES js(jsbh)
);

CREATE TABLE xk (
    xh CHAR(10),
    kcbh CHAR(3),
    jsbh CHAR(10),
    cj NUMERIC(5,1),
    PRIMARY KEY (xh, kcbh, jsbh),
    FOREIGN KEY (xh) REFERENCES xs(xh),
    FOREIGN KEY (kcbh, jsbh) REFERENCES sk(kcbh, jsbh)
);

CREATE INDEX idx_xs_ydh ON xs(ydh);

CREATE INDEX idx_js_ydh ON js(ydh);

CREATE INDEX idx_xk_cj ON xk(cj);

实验二:数据库查询

  • 插入数据

-- 插入数据
INSERT INTO xyb (ydh, ymc) VALUES
('01', '计算机学院'),
('02', '数学学院');

INSERT INTO xs (xh, xm, ydh, bj, chrq, xb) VALUES
('2023000001', '张三', '01', '计科一班', DATE '2004-09-01', '男'),
('2023000002', '李四', '01', '计科一班', DATE '2004-06-13', '女'),
('2023000003', '王五', '02', '数学一班', DATE '2003-11-23', '男'),
('2023000004', '赵六', '02', '数学二班', DATE '2004-03-03', '女'),
('2023000005', '孙七', '01', '计科二班', DATE '2005-01-17', '男');

-- 插入教师
INSERT INTO js (jsbh, xm, zc, ydh) VALUES
('T001', '王老师', '副教授', '01'),
('T002', '赵老师', '讲师', '02');

-- 插入课程
INSERT INTO kc (kcbh, kc, lx, xf) VALUES
('C01', '数据库系统', '必修', 3.0),
('C02', '高等数学', '必修', 4.0),
('C03', '操作系统', '选修', 2.0);

-- 授课关系
INSERT INTO sk (kcbh, jsbh) VALUES
('C01', 'T001'),
('C02', 'T002'),
('C03', 'T001');

-- 学生 2023000001 选课记录
INSERT INTO xk (xh, kcbh, jsbh, cj) VALUES
('2023000001', 'C01', 'T001', 85),  -- 张三选了“数据库系统”
('2023000001', 'C02', 'T002', 90),  -- 张三选了“高等数学”
('2023000001', 'C03', 'T001', 76);  -- 张三选了“操作系统”

-- 学生 2023000002 选课记录
INSERT INTO xk (xh, kcbh, jsbh, cj) VALUES
('2023000002', 'C01', 'T001', 80),  -- 李四选了“数据库系统”
('2023000002', 'C02', 'T002', 70),  -- 李四选了“高等数学”
('2023000002', 'C03', 'T001', 85);  -- 李四选了“操作系统”

-- 学生 2023000003 选课记录
INSERT INTO xk (xh, kcbh, jsbh, cj) VALUES
('2023000003', 'C01', 'T001', 88),  -- 王五选了“数据库系统”
('2023000003', 'C02', 'T002', 75),  -- 王五选了“高等数学”
('2023000003', 'C03', 'T001', 92);  -- 王五选了“操作系统”

-- 学生 2023000004 选课记录
INSERT INTO xk (xh, kcbh, jsbh, cj) VALUES
('2023000004', 'C01', 'T001', 90),  -- 赵六选了“数据库系统”
('2023000004', 'C02', 'T002', 60),  -- 赵六选了“高等数学”
('2023000004', 'C03', 'T001', 78);  -- 赵六选了“操作系统”

-- 学生 2023000005 选课记录
INSERT INTO xk (xh, kcbh, jsbh, cj) VALUES
('2023000005', 'C01', 'T001', 83),  -- 孙七选了“数据库系统”
('2023000005', 'C02', 'T002', 91),  -- 孙七选了“高等数学”
('2023000005', 'C03', 'T001', 87);  -- 孙七选了“操作系统”
  • 测试外键约束:尝试插入一个不存在的外键值

-- 假设学生学号 9999999999 并不存在
-- 假设课程 C99 或教师 T99 也不存在
-- 插入一条错误记录以测试外键约束

INSERT INTO xk (xh, kcbh, jsbh, cj) VALUES
('9999999999', 'C99', 'T99', 100);

实验结果:

  • 查询语句练习

查询“数据库系统”这门课的任课教师姓名

SELECT js.xm
FROM js
JOIN sk ON js.jsbh = sk.jsbh
JOIN kc ON kc.kcbh = sk.kcbh
WHERE kc.kc = '数据库系统';

查询结果

    本文章已经生成可运行项目
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值