案例:创建一个学生管理系统(PXSCJ1)的数据库(SQL)

news2024/12/26 22:04:01

1、新建数据库:PXSCJ1

--创建数据库

CREATE DATABASE PXSCJ1 

--创建并确认属性:XSB、KCB、CJB(以下代码用于2、3、4、5题)
use PXSCJ1
create table XSB
(学号   char(6)   primary key check(学号 like '[0][8][1][12][0-9][0-9]')  not null,             
 姓名	char(8)   not null, 
 性别   bit  default 1 not null ,
 出生日期 date check(出生日期 >'1980-01-01') ,
 专业   char(12) check(专业 in('计算机','通信工程')),           
 总学分 int default 0 check(总学分<=160 and 总学分>=0),
 备注   varchar(500)
)

create table KCB
(课程号   char(3)   primary key check(课程号>='100'and 课程号<='299') not null,           
 课程名	char(16)  check(课程名 in('计算机基础','程序设计与语言','离散数学')) not null,
 开课学期   tinyint  default '1' check(开课学期>=1 and 开课学期<=8),
 学时 tinyint check(学时>=1 and 学时<=80),
 学分 tinyint check(学分>=1 and 学分 <=10)   not null,      
 )

create table CJB
(学号   char(6)    check(学号>=0 and 学号<='100') not null,           
 课程号	char(3)    not null,
  primary key (学号,课程号), 
 foreign key(学号) references XSB (学号), 
 foreign key(课程号) references  KCB (课程号),    
 成绩  int  default 0 ,   
 )

2、创建并确认属性:XSB、KCB、CJB

代码见上!

3、设计每个表的实体完整性:键、索引

代码见上!

 

 4、设计每个表的域完整性:CHECK语句

代码见上!

 

 

 5、建立表与表之间的参照完整性:XSB与CJB,KCB与CJB

代码见上!

6、输入表数据:增加、删除、修改记录

增加和修改记录:

--增加和修改记录信息

use PXSCJ1

insert into XSB(学号,姓名,性别,出生日期,专业,总学分,备注)
values('081101','王林',1,'1990-02-10','计算机',50,null),
('081103','王燕',0,'1989-10-06','计算机',50,null),
('081108','林一帆',1,'1989-08-05','计算机',52,'已提前修完一门课'),
('081202','王林',1,'1989-01-29','通信工程',40,'有一门课不及格,待补考'),
('081204','马琳琳',0,'1989-02-10','通信工程',42,null)

insert into KCB(课程号,课程名,开课学期,学时,学分)
values('101','计算机基础',1,80,5),
('102','程序设计与语言',2,68,4),
('206','离散数学',4,68,4)

insert into CJB(学号,课程号,成绩)
values('081101',101,80),
('081101','102',78),
('081101','206',76),
('081103','101',62),
('081103','102',70),
('081108','101',85),
('081108','102',64),
('081108','206',87),
('081202','101',65),
('081204','101',91)

删除:

--删除学生表中总学分为40的学生
use PXSCJ1
delete from XSB
where (总学分=40)

7、进行查询操作

7.1查询计算机专业的学生信息:

--查询计算机专业的学生信息
SELECT * FROM XSB WHERE 专业='计算机'

7.2查询CJB表中的学号,课程号,成绩,其中成绩空显示“尚未考试”,<60不及格, =<60---<70及格,=<70---<80中,=<80---<90良,=<90---<100优秀。列标题别名为“成绩等级”:

--查询CJB表中的学号,课程号,成绩,其中成绩空显示“尚未考试”,<60不及格, =<60---<70及格,=<70---<80中,=<80---<90良,=<90---<100优秀。列标题别名为“成绩等级”:

SELECT 学号,课程号,成绩等级=
     CASE
	       WHEN 成绩 IS NULL THEN '尚未考试'
		   WHEN 成绩<60 THEN '不及格'
		   WHEN 成绩>=60 and 成绩<70 THEN '及格'
		   WHEN 成绩>=70 and 成绩<80 THEN '中'
		   WHEN 成绩>=80 and 成绩<90 THEN '良'
		   WHEN 成绩>=90 and 成绩<100 THEN '优秀'
		   ELSE '输入错误'
	 END
	 FROM CJB

 7.3对XSB表选择姓名,专业和总学分,返回结果集的前6行:

--对XSB表选择姓名,专业和总学分,返回结果集的前6行:


select top 6 姓名,专业,总学分
from XSB

7.4输出成绩的max,min,sum,avg,count五个函数,写出合适的列名:

--输出成绩的max,min,sum,avg,count五个函数,写出合适的列名:

SELECT AVG(成绩) AS '平均分', SUM(成绩) AS '总和', MAX(成绩) AS '最高分',MIN(成绩) AS '最底分',COUNT(成绩) AS '成绩个数'
       FROM CJB

7.5查询XSB表中姓“王”且双名的学生情况:

--查询XSB表中姓“王”且双名的学生情况:

SELECT * FROM XSB 
WHERE 姓名 LIKE '王__'

7.6查询未选修离散数学的学生情况

--查询未选修离散数学的学生情况

SELECT * FROM XSB 
 WHERE 学号 IN 
 (
SELECT 学号 FROM CJB 
 WHERE 课程号 IN        
    (	
	SELECT 课程号 FROM KCB
      WHERE 课程名 != '离散数学'))

7.7查询206号课程成绩不低于101号课程最低成绩的学生学号

--查找206号课程成绩不低于101号课程最低成绩的学生学号

SELECT 学号,成绩 
  FROM CJB
  WHERE 课程号='206' AND 成绩!<
  (SELECT MIN(成绩)
          FROM CJB
       WHERE 课程号='101')

7.8查找选修了206号课程且成绩在80分以上的学生姓名成绩 

--查找选修了206号课程且成绩在80分以上的学生姓名及成绩 

 SELECT XSB.姓名,成绩
  FROM XSB,CJB
  WHERE XSB.学号=CJB.学号 AND  课程号='206'  AND 成绩>80

7.9查询每个同学选了几门课,并输出选修大于2的记录

--每个同学选了几门课 
SELECT 学号,COUNT(课程号) AS '选课门数' FROM CJB GROUP BY 学号


--并输出选修大于2的记录
SELECT 学号,COUNT(课程号) AS '选课门数' FROM CJB GROUP BY 学号  HAVING COUNT(学号)>=2

7.10 将计算机专业的学生的“计算机基础”课程成绩按照降序排列,成绩相同的的再按姓名升序排列:

--将计算机专业的学生的“计算机基础”课程成绩按照降序排列,成绩相同的的再按姓名升序排列:

SELECT XSB.学号,姓名,KCB.课程名,CJB.成绩
FROM XSB,KCB,CJB
WHERE XSB.学号=CJB.学号 AND CJB.课程号 = KCB.课程号 AND  课程名='计算机基础'
ORDER BY 成绩 DESC

8、表上建立视图

8.1在XSB上创建计算机专业的视图

--在XSB上创建计算机专业的视图

CREATE  VIEW  CS_XS
	AS 
			SELECT  *
			FROM  XSB
WHERE 专业= '计算机' 

8.2使用XSB和CJB创建计算机专业的成绩视图

--使用XSB和CJB创建计算机专业的成绩视图


CREATE  VIEW  CS_KC
	AS 
			SELECT  XSB.学号,课程号,成绩
			FROM  XSB,CJB
			WHERE 专业= '计算机' AND XSB.学号=CJB.学号
WITH CHECK OPTION

9、游标

9.1建立游标指向选修计算机基础课程的课程号、课程名、成绩信息:

--建立游标指向选修计算机基础课程的课程号、课程名、成绩信息:

DECLARE KC_CUR3 CURSOR
 LOCAL SCROLL SCROLL_LOCKS
 FOR
SELECT KCB.课程号,课程名,成绩
  FROM KCB,CJB
  WHERE KCB.课程号=CJB.课程号 AND 课程名 = '计算机基础'
 FOR UPDATE OF 成绩

 

9.2使用游标输出所行

方式一:

--使用游标输出所行

DECLARE KC_CUR3 CURSOR
 LOCAL SCROLL SCROLL_LOCKS
 FOR
SELECT KCB.课程号,课程名,成绩
  FROM KCB,CJB
  WHERE KCB.课程号=CJB.课程号 AND 课程名 = '计算机基础'
 FOR UPDATE OF 成绩
OPEN KC_CUR3
DECLARE @ckh CHAR(6)
DECLARE @kcm CHAR(6)
DECLARE @cj INT
FETCH FIRST FROM KC_CUR3 INTO @ckh,@kcm,@cj
WHILE(@@FETCH_STATUS=0)
BEGIN
SELECT @ckh,@kcm,CAST(@cj AS CHAR(2)) ----CONVER(CHAR(2),@zxf)
FETCH NEXT FROM KC_CUR3 INTO @ckh,@kcm,@cj
END 

 方式二:

方式二:
DECLARE KC_CUR3 CURSOR
 LOCAL SCROLL SCROLL_LOCKS
 FOR
SELECT KCB.课程号,课程名,成绩
  FROM KCB,CJB
  WHERE KCB.课程号=CJB.课程号 AND 课程名 = '计算机基础'
 FOR UPDATE OF 成绩
OPEN KC_CUR3
DECLARE @ckh CHAR(6)
DECLARE @kcm CHAR(6)
DECLARE @cj INT
FETCH FIRST FROM KC_CUR3 INTO @ckh,@kcm,@cj
WHILE(@@FETCH_STATUS=0)
BEGIN
PRINT '课程号:'+@ckh
PRINT '课程名:'+@kcm
PRINT '成绩:'+CAST(@cj AS CHAR(2)) ----CONVER(CHAR(2),@zxf)
PRINT '--------------'
FETCH NEXT FROM KC_CUR3 INTO @ckh,@kcm,@cj
END 

9.3使用游标把数据集的成绩加10:

方式一:

--使用游标把数据集的成绩加10

DECLARE KC_CUR3 CURSOR
 LOCAL SCROLL SCROLL_LOCKS
 FOR
SELECT KCB.课程号,课程名,成绩
  FROM KCB,CJB
  WHERE KCB.课程号=CJB.课程号 AND 课程名 = '计算机基础'
 FOR UPDATE OF 成绩

OPEN KC_CUR3
FETCH FIRST  FROM KC_CUR3  
WHILE(@@FETCH_STATUS=0)
BEGIN
UPDATE CJB SET 成绩=成绩+10 WHERE CURRENT OF KC_CUR3
FETCH NEXT  FROM KC_CUR3  
END 

 

方式二:

方式二:

DECLARE KC_CUR3 CURSOR
 LOCAL SCROLL SCROLL_LOCKS
 FOR
SELECT KCB.课程号,课程名,成绩
  FROM KCB,CJB
  WHERE KCB.课程号=CJB.课程号 AND 课程名 = '计算机基础'
 FOR UPDATE OF 成绩
OPEN KC_CUR3
DECLARE @ckh CHAR(6)
DECLARE @kcm CHAR(6)
DECLARE @cj INT
FETCH FIRST FROM KC_CUR3 INTO @ckh,@kcm,@cj
WHILE(@@FETCH_STATUS=0)
BEGIN
PRINT '课程号:'+@ckh
PRINT '课程名:'+@kcm
PRINT '成绩:'+CAST(@cj+10 AS CHAR(2)) ----CONVER(CHAR(2),@zxf)
PRINT '--------------'
FETCH NEXT FROM KC_CUR3 INTO @ckh,@kcm,@cj
END 

 9.4使用游标删除数据集的所有行

--使用游标删除数据集的所有行

DECLARE KC_CUR3 CURSOR
 LOCAL SCROLL SCROLL_LOCKS
 FOR
SELECT KCB.课程号,课程名,成绩
  FROM KCB,CJB
  WHERE KCB.课程号=CJB.课程号 AND 课程名 = '计算机基础'
 FOR UPDATE OF 成绩

OPEN KC_CUR3
FETCH FIRST  FROM KC_CUR3  
WHILE(@@FETCH_STATUS=0)
BEGIN
DELETE FROM CJB WHERE CURRENT OF KC_CUR3
FETCH NEXT  FROM KC_CUR3  
END 

 

10、将课程号为101、学号为081101的成绩循环修改到大于等于94,每次加5,并输出循环次数。

-- 将课程号为101、学号为081101的成绩循环修改到大于等于94,每次加5,并输出循环次数。
 
DECLARE @num INT
SET @num=0
WHILE (SELECT 成绩 FROM CJB WHERE 学号='081101' and 课程号 = '101')<=94
BEGIN
	UPDATE CJB SET 成绩=成绩+5 WHERE 学号='081101' and 课程号 = '101'
	SET @num=@num+1
END
SELECT @num AS 循环次数 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SM3_Robotics,轴组函数调用

1轴组状态&#xff1a; AXIS_GROUP_REF_SM3 (FB) 2使能&#xff1a; MC_GroupEnable &#xff08;使能&#xff09; 默认在&#xff1a; MC_GroupDisable &#xff08;轴组关闭&#xff09;位置 1&#xff1a;用 MC_GroupEnable &#xff08;使能&#xff09;进入 Gro…

chatgpt赋能python:Python怎么定义主函数:完整指南

Python怎么定义主函数&#xff1a;完整指南 Python是当今最流行的编程语言之一&#xff0c;因为它提供了简单易学、高效率、高度可读性和可维护性的代码编写方式。在Python中定义主函数是一个重要的编程技能&#xff0c;使您能够将Python程序变成可执行的Python应用程序。在本…

chatgpt赋能python:Python多次输入——如何自动化处理数据输入

Python多次输入——如何自动化处理数据输入 作为一名有10年Python编程经验的工程师&#xff0c;我曾遇到过很多需要重复输入数据的情况。这不仅浪费时间&#xff0c;而且容易出错&#xff0c;影响我们的工作效率和准确性。作为程序员&#xff0c;我们需要借助Python的自动化技…

openGauss5 企业版之SQL语法和数据结构

文章目录 1.openGauss SQL 语法2. 数据类型2.1数值类型2.2 布尔类型2.3 字符类型2.4 二进制类型2.5日期/时间类型2.6 几何类型2.7 网络地址类型2.8 位串类型2.9 文本搜索类型2.10 UUID数据类型2.11 JSON/JSONB类型2.11 HLL数据类型2.12 范围类型2.13 索引2.14 对象标识符类型2.…

【MySQL】SQL的高阶用法

文章目录 函数聚合函数Count()Max()Min()Sum()Avg() 其他常用函数时间函数字符串函数数学函数 条件查询使用关系运算符查询使用IN关键字查询使用BETWEEN AND关键字查询使用空值查询使用AND关键字查询使用OR关键字查询使用LIKE关键字查询(模糊查询)使用LIMIT限制查询结果的数量使…

用ChatGPT生成测试数据

大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 在之前的文章 用ChatGPT写一个数据采集程序 中&#xff0c;我们演示了如何用 ChatGPT 辅助编写代码。 除了直接让ChatGPT写代码&#xff0c;我们也可以让它生成一些开发中使用的测试数据。 比如在开发和测试时&…

Alloy Tutorial(3)Traces Modelling —— Cache Memory

文章目录 Cache Memory完整代码 Cache Memory //Addresses and data sig Addr {} sig Data {}//A cache system consists of main memory and cached memory, but mapping addresses to data one sig CacheSystem {var main, cache: Addr -> lone Data }//Initially there …

yolov5——从未见过注释比代码还多的源码解析You Only Look Once And You get it——训练部分

目录 一&#xff1a;前言 二&#xff1a;先介绍v5源码中必须知道的一些文件&#xff08;了解的可直接加入第三代码部分&#xff09; ​编辑 三&#xff1a;训练 参数配置 模式选择 搭建网络 加载预训练和自定义模型的参数 是否需要冻结层数 定义累计梯度的次数 设置…

零基础小白如何自学 Unity 游戏开发?(送 Unity 教程)

如何自学 Unity&#xff1f;初级阶段&#xff1a;学习编程语言初级阶段&#xff1a;编程实践中级阶段&#xff1a;继续学习编程语言 Unity 教程赠书活动内容简介作者简介赠书方式 如何自学 Unity&#xff1f; 有很多同学对 游戏开发 很感兴趣&#xff0c;但都不知道从何学起&a…

PostgreSQL如何查看事务所占有的锁?

表级锁命令LOCK TABLE 在PG中&#xff0c;显式地在表上加锁的命令为“LOCK TABLE”&#xff0c;此命令的语法如下&#xff1a; LOCK [TABLE] [ONLY] name [,...][IN lockmode MODE] [NOWAIT]语法中各项参数说明如下&#xff1a; name&#xff1a;表名lockmode&#xff1a;表…

GPT1,2,3

GPT1 transformer解码器因为有掩码所以不看后面的东西 gpt就是transformer的解码器&#xff0c;bert 是transformer的编码器 gpt核心卖点&#xff1a;不管输入如何&#xff0c;transformer模型不会变 半监督&#xff1a;先在没有标号上进行训练&#xff0c;再到有标号上进行微…

配置Nexus私服

私服是一种特殊的远程仓库&#xff0c;它代理广域网上的远程仓库&#xff0c;供局域网下的maven用户使用。 目前Nexus3的官方下载地址为 https://help.sonatype.com/repomanager3/product-information/download &#xff0c;由于下载较慢&#xff08;真的很慢&#xff09;&…

【MySQL】库和表的增删查改

目录 一、库的操作 1、创建数据库 2、数据库所使用的编码 2.1查询编码集和校验集 2.2查看数据库的字符集和校验集 2.3创建数据库指定字符集和校验集 2.4不同的校验集所筛选的数据结果不一样 3、查看数据库 4、修改数据库 5、删除数据库 6、数据库的备份和恢复 6.1备…

数字图像处理期末复习习题 SCUEC part2

1.连续图像在空间位置上的离散化称为采样&#xff1b;图像空间分辨率由灰度级决定。 2.坐标的离散化叫采样&#xff0c;幅值的离散化叫量化。 3. 4.图像分割方法多种多样&#xff0c;一般可以根据像素灰度取值的特性将分割方法分为两类&#xff08;阈值分割&#xff0c;区域分割…

软件工程开发文档写作教程(15)—概要设计书的编写

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 概要设计书的编写 按照国家《概要设计说明书GB8567—88&#xff09;所定义的标准&#xff0…

算法刷题-链表-链表相交

链表相交 面试题 02.07. 链表相交思路其他语言版本JavaPythonGojavaScript 面试题 02.07. 链表相交 同&#xff1a;160.链表相交 力扣题目链接 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0…

chatgpt赋能python:Python如何填充空值

Python如何填充空值 在数据处理过程中&#xff0c;经常会遇到数据集中存在空值的情况。这些空值&#xff08;或缺失值&#xff09;可能会影响数据分析的准确性&#xff0c;因此我们需要对这些空值进行填充。Python作为一种流行的编程语言&#xff0c;提供了许多有效的方法来处…

【C++ 笔记四】STL 标准模板库 —— 容器基础

【C 笔记四】STL 标准模板库 —— 容器基础 文章目录 【C 笔记四】STL 标准模板库 —— 容器基础I - 概述 STL1.1 - 范围与定义1.2 - 组成与关系1.3 - 实用举例 II - 概述容器2.1 - 迭代器2.2 - 容器的结构与分类2.3 - 序列式容器2.4 - 关联式容器2.5 - 不定序容器2.6 - 总述 I…

.mdf.locked加密sql server完美恢复---惜分飞

有可能用友ERP软件的sql server 数据库所在机器被勒索病毒加密,扩展名为.locked和昨天恢复的基本类似(.locked加密勒索数据库级别恢复),通过分析确认sql server被这种病毒加密,也可以完美恢复 通过恢复之后数据库正常挂载成功 测试应用一切正常 对于类似这种被加密的勒索的数…

【Python开发】FastAPI 10:SQLAlchemy 数据库操作

在 FastAPI 中使用 SQL 数据库可以使用多个 ORM 工具&#xff0c;例如 SQLAlchemy、Tortoise ORM 等&#xff0c;类似 Java 的 Mybatis 。这些 ORM 工具可以帮助我们方便地与关系型数据库进行交互&#xff0c;如 MySQL 、PostgreSQL等。本篇文章将介绍如何使用 SQLAlchemy 来完…