现有教学数据库JX_DB,数据库有以下三个基本表:

学生表student,它由学号sno、姓名sname、性别sex、出生日期Bdate、所在系dept五个属性构成。其中,学号不能为空,值是唯一的;

课程表course,它由课程号cno、课程名cname、学时数lhour、学分数creadit、开设学期semester五个属性组成。主键是cno,要求主键非空且唯一;

选课表SC,它由学号sno、课程号cno、成绩grade三个属性组成。其中主键是(sno,cno),且主属性son、cno分别外键关联自学生表和课程表,grade默认值为null。

请使用MySQL语句创建数据库和数据库表并导入数据,然后写出SQL语句完成以下操作:

(1)为学生表的sno属性创建唯一索引;

(2)查询年龄大于19岁的学生姓名和出生年月;

(3)查询学习课程号为CS-221的课程的学生学号与姓名;

(4)查询至少选修课程号为CS-110和CS-201的学生学号与姓名;

(5)查询2000年出生的学生姓名及其秋季所修课程的课程号及成绩;

(6)查询秋季学期有一门以上课程获90分以上成绩的学生;

(7)查询只有一个人选修的课程号和课程名;

(8)查询没有选修EE-201课程的学生学号与姓名;

(9)查询每门课程的选课人数;

(10)查询选修了3门以上课程的学生学号与姓名;

(11)查询计算机系所开课程的最高成绩、最低成绩和平均成绩。如果某门课程的成绩不全(即为NULL),则课程不予统计,结果按CNO升序排列;

(12)查询2003年出生的学生和选修机电系所开课程(EE标志)的学生学号与姓名(即求并集);

(13)查询计算机系2003年出生的学生详细信息(即求交集);

(14)查询选修了CS-110课程但没有选修CS-201课程的学生学号与姓名(即求差集);

(15)将一个新学生记录(学号15202106,姓名韩晓婷,性别女,出生年月2004-5-8,所在系计算机系)插入到Student表中;

(16)创建一个女学生成绩临时表Fgrade,表中包括Sname、Cno、Grade三个属性,然后查询相应女学生成绩数据并存储;

(17)修改选修数据结构的选课成绩,若低于80,则统一提高5%;

(18)将SC表中缺成绩的学生成绩置0;

(19)删除王姓同学的选课记录;

(20)定义一个视图Grade_AVG,表示学生的平均成绩,其中包括Sno、Sname和Avggrade(平均成绩)三个属性,并此视图上查询平均成绩大于90分的学生学号与姓名。

 
 

各表数据如下:

Student表:

Sno

Sname

Sex

bdate

Sdept

15202101

刘芳

女

2001/3/12

计算机系

15202102

张晓晨

男

2002/1/24

计算机系

15202103

王文选

男

2000/11/15

计算机系

15202104

张玲

女

2001/8/19

计算机系

15202105

李莉萍

女

2003/6/3

计算机系

Course表:

Cno

Cname

Lhour

Credit

Semester

CS-110

计算机导论

32

2

秋

CS-201

数据结构

80

5

秋

CS-221

软件工程

64

4

春

EE-122

电路基础

48

3

秋

EE-201

电工电子

80

5

春

SC表:

Sno

Cno

Grade

15202101

CS-110

95

15202101

CS-201

90

15202102

CS-110

85

15202102

EE-201

80

15202103

CS-110

82

15202103

CS-201

75

15202103

EE-122

#(1)为学生表的sno属性创建唯一索引

create unique index sno on student(sno);

好像没什么反应。。。。

#(2)查询年龄大于19岁的学生姓名和出生年月;

select Sname,bdate

from student

where year(bdate)<='2002';

这个简单,year()查找了半天

#(3)查询学习课程号为CS-221的课程的学生学号与姓名;

select  Student.Sno,Student.Sname

from student,sc

where Student.Sno=SC.Sno and sc.Cno='CS-221';

这个什么都没有

#(4)查询至少选修课程号为CS-110和CS-201的学生学号与姓名;

select sc.Sno,sname

from sc,student

where sc.sno in (select sno from sc where cno='CS-110') and cno='CS-201'and sc.Sno=Student.Sno;

用连接表就可以了

#(5)查询2000年出生的,学生姓名及其秋季所修课程的课程号及成绩;

select Sname,Course.Cno,sc.Grade

from student,course,sc

where Student.bdate like '2000%'

  and Student.Sno=SC.Sno and Course.Cno=SC.Cno
and Semester='秋 ' ;

同样是连接表

#(6)查询秋季学期有一门以上课程获90分以上成绩的学生;

select *

from student,course,sc

where Grade>90

  and Student.Sno=SC.Sno and Course.Cno=SC.Cno
and Semester='秋 ' ;

还是连接表

#(7)查询只有一个人选修的课程号和课程名;

select Course.cno,Cname

from sc scx,course

where scx.Cno=Course.Cno and scx.Cno NOT IN (select Cno from sc where SC.sno !=scx.sno);

子查询中的意思是所有都选了的,只选一个的没有在这个范围内,意思是查询成绩表中的课号而学号不等于scx中的学号的人,弄了好久

#(8)查询没有选修EE-201课程的学生学号与姓名;

select distinct Student.Sno,Sname

from student,course,sc

where Student.Sno=SC.Sno and Course.Cno=SC.Cno and

      Course.Cno not in(select Course.Cno
from Course where SC.Cno= 'EE-201'

    );

套娃

#(9)查询每门课程的选课人数

SELECT cno,COUNT(cno)

FROM sc

GROUP BY Cno ;

用聚集函数

#(10)查询选修了3门以上课程的学生学号与姓名;

SELECT SC.sno,Student.Sname

FROM sc,student

where Student.Sno=SC.Sno

HAVING COUNT(SC.sno) > 3 ;

同上

#(11)查询计算机系所开课程的最高成绩、最低成绩和平均成绩。如果某门课程的成绩不全(即为NULL),则课程不予统计,结果按CNO升序排列;

select cno,max(grade),min(grade),avg(grade)

from sc

where cno like'CS%' group by cno

having cno not in(select cno

                  from sc

                  where grade is NULL)

order by cno;

#(12)查询2003年出生的学生和选修机电系所开课程(EE标志)的学生学号与姓名(即求并集);

select sc.sno,sname

from student,sc

where student.sno=sc.sno and sc.cno like'EE%'

union

select sno,sname

from student

where bdate like'2003%';

其实就是and嘛

#(13)查询计算机系2003年出生的学生详细信息(即求交集);

select *

from student

where bdate like'2003%'and sdept='计算机系 ';

取交集

#(14)查询选修了CS-110课程但没有选修CS-201课程的学生学号与姓名(即求差集);

select sc.sno,sname

from student,sc

where student.sno=sc.sno and

        cno not in(select cno

                   from sc

                   where cno='CS-201')and cno='CS-110';

#(15)将一个新学生记录(学号15202106,姓名韩晓婷,性别女,出生年月2004-5-8,所在系计算机系)插入到Student表中;

insert into student

values(15202106,'韩晓婷','女','2004/5/8','计算机');

运行一次就进去了

#(16)创建一个女学生成绩临时表Fgrade,表中包括Sname、Cno、Grade三个属性,然后查询相应女学生成绩数据并存储;

create temporary table Fgrade

(select distinct Student.Sname,SC.Cno,SC.grade

from student,sc

where student.sex='女' and  student.sno=sc.sno);

drop temporary table Fgrade;

虽然创建了临时表,并且储存了,但是没有去看看

#(17)修改选修数据结构的选课成绩,若低于80,则统一提高5%;

SET SQL_SAFE_UPDATES = 0;

update sc set grade=grade+grade*0.05

where grade<80;

select *from sc;

更新数据

分数显著提高了,但是这里的王姓同学已经没了

#(18)将SC表中缺成绩的学生成绩置0;

update sc set grade=0

where grade is NULL;

#19)删除王姓同学的选课记录;

delete from sc

where Sno in(select sno

             from student

             where sname like'王%');

03没掉了

#(20)定义一个视图Grade_AVG,表示学生的平均成绩,其中包括Sno、Sname和Avggrade(平均成绩)三个属性,并此视图上查询平均成绩大于90分的学生学号与姓名。

create view Grade_AVG(Sno,Sname,Avggrade)

as

select sc.Sno,Sname,avg(grade)

from student,sc

where student.sno=sc.sno

group by sno;

select * from Grade_AVG;

select sno,sname from Grade_AVG

where Avggrade>90;

创建的视图

现有教学数据库JX_DB,作业的更多相关文章

  1. 数据库大作业--由python+flask

    这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是 ...

  2. 错误界面 SQL2008备份集中的数据库备份与现有的数据库不同,错误号码:3154。

    转载来源  https://blog.csdn.net/zaocha321/article/details/8466735 因为我也用这个方法成功了.所以记录下来 错误界面 SQL2005备份集中的数 ...

  3. dropdb - 删除一个现有 PostgreSQL 数据库

    SYNOPSIS dropdb [ option...] dbname DESCRIPTION 描述 dropdb 删除一个现有 PostgreSQL 数据库. 执行这条命令的人必须是数据库超级用户, ...

  4. SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原

    原文:SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原 --作业定时压缩脚本 多库批量操作 DECLARE @DatabaseName NVARCHAR(50) DECLARE @ ...

  5. Sql Server 备份还原失败错误ERROR:3145(备份集中的数据库备份与现有的数据库不同)及解决办法

    SQL Server备份文件bak,备份后还原出现错误3145,备份集中的数据库备份与现有的 'xxx' 数据库不同. 解决办法如下: 1,新建一个与现有数据库重名的数据库. 如果您不知道数据库名称, ...

  6. SQL Server 2008还原数据库时出现“备份集中的数据库备份与现有的数据库不同”的解决方法

    引言 现在在做项目,由于每个人是分模块的,所以大家的测试数据都不同步,导致好多时候会因为别人填的数据不同而调半天的错.所以我还是自己还原一个数据库,自己填自己的数据吧. 报错 之前还原过很多个数据库都 ...

  7. python学习之老男孩python全栈第九期_数据库day001 -- 作业

    创建如图所示数据库: 创建过程:  查看数据库,创建数据库 db1,再查看一下数据库  进入数据库,查看一下表  接着再创建一个class表 发现增加了重复数据,因此要把第二个修改一下  修改完数据之 ...

  8. 使用SQL Server Management Studio 创建数据库备份作业

    --完整备份,每周一次USE MasterGOdeclare @str varchar(100)set @str='D:\Weldon\DBBACK\FullBak'+replace(replace( ...

  9. 将现有MySQL数据库改为大小写不敏感

    用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在.而Windows下的MySQL却是大小写不敏感的,所有表名和数据 ...

随机推荐

  1. 什么是基于 Java 的 Spring 注解配置? 给一些注解的例子?

    基于 Java 的配置,允许你在少量的 Java 注解的帮助下,进行你的大部分 Spring 配置而非通过 XML 文件. 以@Configuration 注解为例,它用来标记类可以当做一个 bean ...

  2. piwik安装部署

    1.piwik介绍 Piwik是一个PHP和MySQL的开放源代码的Web统计软件,它给你一些关于你的网站的实用统计报告,比如网页浏览人数,访问最多的页面,搜索引擎关键词等等. Piwik拥有众多不同 ...

  3. 【SpringBoot学习一】开发入门--快速创建springboot程序

    前言 本片博客记录快速创建springboot工程的两种方式.一种是使用maven创建,一种是使用spring initializr创建.开发环境JDK1.8.IDEA.maven. SpringBo ...

  4. leedcode_13 罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 .12 ...

  5. html5与css交互 API 《一》classList

    用过jquery的朋友都知道,jquery提供的方法中(3个)可以很方便的为指定的节点添加.删除类选择器,即addClass.removeClass.toggleClass.具体的用法我这里就不谈了, ...

  6. Qunee for HTML5 v1.6新版本发布

    Qunee for HTML5 V1.6正式发布,修复了一些 BUG,增加了滚动条支持,改进了编辑器,增加了JSON 导入导出.告警冒泡.连线流动,UI 定制等扩展示例,欢迎 访问 导航面板 增加了滚 ...

  7. JS 中的日期时间操作计算实例

    实例 一:已知日期格式为 "YYYY/MM/DD",计算相对于今天的天数差. function fromNow(date){ var mTimes = new Date(date) ...

  8. RStudio中文乱码

    解决办法一: 1.设置RStudio文本显示的默认编码:RStudio菜单栏的Tools -> Global Options 2.code-->saving-->default te ...

  9. 关于mysql使用utf8编码在cmd窗口无法添加中文数据的问题以及解决 方法二

    如果非要用cmd窗口的话,那么可以加这句话,set names gbk:

  10. Visual Studio 2022 git error Unable to negotiate with xx.xxx.xxxx port 22: no matching host key type found. Their offer: ssh-rsa

    前言 前两天因为升级了Git导致git提交拉取的时候都提示下面这个异常,然后经过一番折腾以后终于把这个问题解决了.但是今天我升级了下Visual Studio 2022将其升级到了17.1.3版本然后 ...