现有教学数据库JX_DB,作业
现有教学数据库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分的学生学号与姓名。
  | 
#(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,作业的更多相关文章
- 数据库大作业--由python+flask
		
这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是 ...
 - 错误界面 SQL2008备份集中的数据库备份与现有的数据库不同,错误号码:3154。
		
转载来源 https://blog.csdn.net/zaocha321/article/details/8466735 因为我也用这个方法成功了.所以记录下来 错误界面 SQL2005备份集中的数 ...
 - dropdb - 删除一个现有 PostgreSQL 数据库
		
SYNOPSIS dropdb [ option...] dbname DESCRIPTION 描述 dropdb 删除一个现有 PostgreSQL 数据库. 执行这条命令的人必须是数据库超级用户, ...
 - SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原
		
原文:SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原 --作业定时压缩脚本 多库批量操作 DECLARE @DatabaseName NVARCHAR(50) DECLARE @ ...
 - Sql Server 备份还原失败错误ERROR:3145(备份集中的数据库备份与现有的数据库不同)及解决办法
		
SQL Server备份文件bak,备份后还原出现错误3145,备份集中的数据库备份与现有的 'xxx' 数据库不同. 解决办法如下: 1,新建一个与现有数据库重名的数据库. 如果您不知道数据库名称, ...
 - SQL Server 2008还原数据库时出现“备份集中的数据库备份与现有的数据库不同”的解决方法
		
引言 现在在做项目,由于每个人是分模块的,所以大家的测试数据都不同步,导致好多时候会因为别人填的数据不同而调半天的错.所以我还是自己还原一个数据库,自己填自己的数据吧. 报错 之前还原过很多个数据库都 ...
 - python学习之老男孩python全栈第九期_数据库day001 -- 作业
		
创建如图所示数据库: 创建过程: 查看数据库,创建数据库 db1,再查看一下数据库 进入数据库,查看一下表 接着再创建一个class表 发现增加了重复数据,因此要把第二个修改一下 修改完数据之 ...
 - 使用SQL Server Management Studio 创建数据库备份作业
		
--完整备份,每周一次USE MasterGOdeclare @str varchar(100)set @str='D:\Weldon\DBBACK\FullBak'+replace(replace( ...
 - 将现有MySQL数据库改为大小写不敏感
		
用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在.而Windows下的MySQL却是大小写不敏感的,所有表名和数据 ...
 
随机推荐
- C++ | 简单工厂模式 | 复数计算器
			
简单工厂模式最直观的一个应用便是实现一个计算器的程序. 比如,公司让你给计算器添加一个幂运算的功能,你只需要设计一个幂运算的类,并实现幂运算的逻辑,然后让该类继承自运算类即可. 简单工厂模式: 简单工 ...
 - Canvas 与 SVG
			
什么是SVG? 引用w3c的一段话就是: SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 ...
 - 要多简单就有多简单的H5拍照加水印
			
来一个简单粗暴的gif演示图 先来html 内容 <video id="video" width="320" height="240" ...
 - Python窗口学习之浅尝按键触发事件
			
一.窗口上敲键盘触发事件(以Enter键为例) 二.点击窗口按钮触发事件(以鼠标左键双击为例) 代码: import tkinter as tk root = tk.Tk() root.geometr ...
 - jsp笔记---标签
			
<meta>标签 <meta> 标签提供了 HTML 文档的元数据.元数据不会显示在客户端,但是会被浏览器解析. META元素通常用于指定网页的描述,关键词,文件的最后修改时间 ...
 - springAop必导jar包
			
SpringAop:的底层就是通过JDK动态代理"或"CGLib动态代理为技术目标织入横切逻辑. 做aop:需要导入: spring-aop-4.1.5.RELEASE.jar s ...
 - Python IDLE清屏
			
在学习和使用Python的过程中,少不了要与Python IDLE打交道.但使用 Python IDLE 都会遇到一个常见而又懊恼的问题--要怎么清屏? 答案是为IDLE增加一个清屏的扩展ClearW ...
 - 深入理解计算机系统bomb炸弹实验
			
1. You can Russia from land here in Alaska. x /s 0x804a26c 0x804a26c: "You can Russia from la ...
 - SLF4J 报错解决:No SLF4J providers were found
			
1.解决SLF4J报错 我们在自己的项目中使用了SLF4J,或者引入了某开源项目时,他的项目中用了SLF4J,运行时会报如下的错误: SLF4J: Failed to load class " ...
 - python---冒泡排序的实现
			
冒泡排序 思想  列表中有n个数, 每两个相邻的数, 如果前边的数比后边的数大, 就交换.  关键点:  趟: 总共执行 n-1趟  无序区: 第 i 趟时, 索引 0~ n-1-i 为无序区 ...