SQL数据库练习(编程题)

7.向供应商表插入一行数据

本题目要求向Vendors表插入一行数据。
vid:25
vname:李永轩
vaddress:包头市建设路10号
vprovince:内蒙古自治区
Region:NULL

提示:使用中文字符串时在前面加N,能避免出现中文乱码的可能性。

表结构:

CREATE TABLE Vendors
(
  vid       INT          PRIMARY KEY,   -- 供应商id
  vname     NVARCHAR(20) NOT NULL,      -- 姓名
  vaddress  NVARCHAR(30) NOT NULL,      -- 地址
  vprovince NVARCHAR(25) NOT NULL,      -- 所在省份
  vregion   NVARCHAR(25) NULL           -- 区域
);

表样例

Vendors表:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区

插入记录后样例:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区
25李永轩包头市建设路10号内蒙古自治区NULL
insert into Vendors (vid,vname,vaddress,vprovince,vregion)
values('25',N'李永轩',N'包头市建设路10号',N'内蒙古自治区',NULL);

8.把表中区域未知的vregion值更新为“未知”

本题目要求更新Vendors表,把区域未知的vregion值更新为“未知”。

提示:使用中文字符串时在前面加N,能避免出现中文乱码的可能性。

表结构:

CREATE TABLE Vendors
(
  vid       INT          PRIMARY KEY,   -- 供应商id
  vname     NVARCHAR(20) NOT NULL,      -- 姓名
  vaddress  NVARCHAR(30) NOT NULL,      -- 地址
  vprovince NVARCHAR(25) NOT NULL,      -- 所在省份
  vregion   NVARCHAR(25) NULL           -- 区域
);

表样例

Vendors表:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区
25李永轩包头市建设路10号内蒙古自治区NULL

更新记录后样例:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区
25李永轩包头市建设路10号内蒙古自治区未知
UPDATE Vendors
SET vregion = N'未知'
WHERE vregion IS NULL;

9.删除表中区域未知的供应商记录

本题目要求删除Vendors表区域未知的供应商记录。

提示:使用中文字符串时在前面加N,能避免出现中文乱码的可能性。

表结构:

CREATE TABLE Vendors
(
  vid       INT          PRIMARY KEY,   -- 供应商id
  vname     NVARCHAR(20) NOT NULL,      -- 姓名
  vaddress  NVARCHAR(30) NOT NULL,      -- 地址
  vprovince NVARCHAR(25) NOT NULL,      -- 所在省份
  vregion   NVARCHAR(25) NULL           -- 区域
);

表样例

Vendors表:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区
25李永轩包头市建设路10号内蒙古自治区未知

删除记录后样例:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区
DELETE FROM Vendors
WHERE vregion = N'未知';

10.建立视图显示出广东省供应商的信息

本题目要求建立Vendors表的视图GD_Vendors,该视图显示出广东省供应商的信息。

提示:使用中文字符串时在前面加N,能避免出现中文乱码的可能性。

表结构:

CREATE TABLE Vendors
(
  vid       INT          PRIMARY KEY,   -- 供应商id
  vname     NVARCHAR(20) NOT NULL,      -- 姓名
  vaddress  NVARCHAR(30) NOT NULL,      -- 地址
  vprovince NVARCHAR(25) NOT NULL,      -- 所在省份
  vregion   NVARCHAR(25) NULL           -- 区域
);

表样例

Vendors表:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
3张文正北京市朝阳北路23号北京市华北区
4欧晓文成都市大悦路518号四川省华西区

视图样例:

vidvnamevaddressvprovincevregion
1欧阳宇文广州市海珠南路126号广东省华南区
2邓云钊佛山市南桂西路25号广东省华南区
CREATE VIEW GD_Vendors AS
SELECT vid,vname,vaddress,vprovince,vregion 
FROM Vendors
WHERE vprovince = N'广东省';

11.查询从未签约的供应商

本题目要求根据Vendors表和Projects表,返回从未签约的供应商。

提示:使用中文字符串时在前面加N,能避免出现中文乱码的可能性。

表结构:

CREATE TABLE Vendors
(
  vid       INT          PRIMARY KEY,   -- 供应商id
  vname     NVARCHAR(20) NOT NULL,      -- 姓名
  vaddress  NVARCHAR(30) NOT NULL,      -- 地址
  vprovince NVARCHAR(25) NOT NULL       -- 所在省份
);
CREATE TABLE Projects
(
  pid          INT      PRIMARY KEY,  -- 项目id
  vid          INT      NULL,         -- 供应商id
  sid          INT      NOT NULL,     -- 销售人员id
  contractdate DATETIME NOT NULL      -- 签约日期
);

表样例

Vendors表:

vidvnamevaddressvprovince
1欧阳宇文广州市海珠南路126号广东省
2邓云钊佛山市南桂西路25号广东省
3张文正北京市朝阳北路23号北京市
4欧晓文成都市大悦路518号四川省
5周琦佛山市祖庙路2号广东省

Projects表:

pidvidsidcontractdate
10523372022/05/01 00:00:00.000
10524312022/05/01 00:00:00.000
10525212022/05/02 00:00:00.000
10555162022/06/02 00:00:00.000
10556422022/06/03 00:00:00.000
10557392022/06/03 00:00:00.000

输出样例:

vidvname
5周琦
select v.vid,v.vname 
from Vendors v
left join projects p on v.vid = p.vid
where pid is null;

12.显示没有班主任的班级的所有信息

本题目要求编写SQL语句,查询显示没有班主任的班级的所有信息。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.班级表:grade

表结构

grade-1.png

表数据

grade-2.png

样例输出:

46.png

select * from grade
where Tid is null;

13.显示姓名中有"白云"的同学的所有信息

本题目要求编写SQL语句,查询显示姓名中有"白云"的同学的所有信息。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

样例输出:

43.png

select * from student
where SName like '%白云%';

14.显示姓李的老师的所有信息

本题目要求编写SQL语句,查询显示姓李的老师的所有信息。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

    1.教师表:teacher

    表结构

    teacher-1.png

    表数据

    teacher-2.png

    ===>样例输出:

    10.png

select * from teacher
where TName like '李%';

15.显示期末成绩不及格的同学的学号、课程号与期末成绩

本题目要求编写SQL语句,查询显示期末成绩不及格的同学的学号、课程号与期末成绩。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

    1.选课表:sc

    表结构

    sc-1.png

    表数据

    sc-2.png

    ===>样例输出:

    15.png

select SId,CId,SCScore3 from sc
where SCScore3 < 60;

16.理学院(CS)新开一门课程“数学建模”,课程编号20, 学分4,学时72,选修课程,最多选课人数为50

本题目要求编写SQL语句,理学院(CS)新开一门课程“数学建模”,无先行课,课程编号20, 学分4,学时72,选修课程,最多选课人数为50。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

    1.课程表:course

    表结构

    course-1.png

    表数据

    course-2.png

insert into course 
values ('20',null,'CS','数学建模','4','72','选修','50');

17.将课程"数据库"(课程编号:1)的上课教室改为NB111,授课教师改为李飞(教师编号:02001)

本题目要求编写SQL语句,将课程"数据库"(课程编号:1)的上课教室改为NB111,授课教师改为李飞(教师编号:02001)。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

    1.课程信息表information

    information-1.png

    表数据

    information-2.png

update information
set IRoom = 'NB111', TId = '02001'
where CId = '1';

18.向Product数据表插入数据

要求在数据表Product中插入数据

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

插入数据前Product表:

图1.png

插入数据后Product表:

图2.png

insert into Product
values('0003','高压锅','厨房用具','269','150','2019-01-15');

19.修改Product数据表销售价格数据

要求编写SQL语句, 将Product表中登记日期为NULL的商品对应的销售价格修改为180。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

修改前查询结果:

Product

图1.png

修改后查询结果:

Product

图2.png

update Product
set sale_price = '180'
where regist_date is null;

20.删除Product数据表指定商品记录

要求编写SQL语句, 删除Product表中销售价格大于等于100的商品信息。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

删除前查询结果:

Product

图1.png

删除后查询结果:

Product

图2.png

delete from Product
where sale_price >= 100;

21.计算Product表中销售价格的最大值和进货价格的最小值

要求编写SQL语句,查询Product表中销售价格的最大值和进货价格的最小值。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

表样例:

Product

图1.png

输出样例:

Product

图2.png

 

select max(sale_price) top_sale,min(purchase_price) bottom_pur
from Product;

22.计算Product表中销售价格和进货价格的合计值

要求编写SQL语句,查询Product表中销售价格和进货价格的合计值。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

表样例

Product

图1.png

输出样例:

Product

图2.png

select sum(sale_price) all_sale,sum(purchase_price) all_pur
from Product;

23.查询Product表中进货价格在50至150之间的商品记录

要求编写SQL语句,查询Product表中进货价格在50至150之间的商品记录。注意:查询结果中应包含50和150元的商品记录。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

表样例

Product

图1.png

输出样例:

Product

图2.png

select * from Product
where purchase_price >=50 and purchase_price <=150;

24.统计Product表中每个商品种类对应的最高销售价格,查询出其中最高销售价格大于100的商品信息

要求编写SQL语句,统计Product表中每个商品种类对应的最高销售价格,查询出其中最高销售价格大于100的商品信息,要求显示结果中包含符合条件的商品种类及对应的最高销售单价。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

表样例:

Product

图1.png

输出样例:

Product

图2.png

SELECT product_type,max(sale_price) top_price
FROM Product
GROUP BY product_type
HAVING max(sale_price) > 100;

25.创建视图,包含Product表中部分商品打折前后的价格信息

本题目要求编写SQL语句, 利用Product表创建视图view_goods ,包含原售价大于100元的商品在打折前后的价格信息。视图中包含四列,分别为商品id,商品名称,商品原价格(old_price) 和商品打五折后的价格(new_price)。

表结构:

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

表样例:

Product

图1.png

视图样例:

view_goods 视图

图2.png

create view view_goods as
select product_id as id,product_name as name,sale_price as old_price,sale_price*0.5 as new_price
from Product
where sale_price >100;

 26.查询不在编号000C商店销售的商品记录

本题目要求编写SQL语句, 基于Product表和ShopProduct表查询不在编号000C商店销售的商品对应的商品编号、商品名称、销售价格。

表结构:

Product

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL, --商品编号
 product_name    VARCHAR(100) NOT NULL, --商品名称
 product_type    VARCHAR(32)  NOT NULL, --商品种类
 sale_price      INTEGER ,              --销售价格
 purchase_price  INTEGER ,              --进货价格
 regist_date     DATE ,                 --登记日期
 PRIMARY KEY (product_id)); 

ShopProduct

CREATE TABLE ShopProduct
(shop_id    CHAR(4)       NOT NULL,  -- 商店编号
 shop_name  VARCHAR(200)  NOT NULL,  -- 商店名称
 product_id CHAR(4)       NOT NULL,  -- 商品编号
 quantity   INTEGER       NOT NULL,  -- 商品库存
 PRIMARY KEY (shop_id, product_id));

表样例

Product

图1.png

ShopProduct

图3.png

输出样例:

图2.png

SELECT Product.product_id, Product.product_name, Product.sale_price
FROM Product
LEFT JOIN ShopProduct ON Product.product_id = ShopProduct.product_id AND ShopProduct.shop_id = '000C'
WHERE ShopProduct.product_id IS NULL;

27.显示年龄在18岁以下的学生的全部信息

本题目要求编写SQL语句,查询显示年龄在18岁以下的学生的全部信息。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

===>样例输出:

39.png

select SId,GId,SName,SSexy,SBdate,STele
from student
where year(now()) - year(SBdate) <18;

 28.显示张飞同学已修课程的课程号,课程名及期末成绩

本题目要求编写SQL语句,查询显示张飞同学已修课程的课程号,课程名及期末成绩。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

2.课程表:course

表结构

course-1.png

表数据

course-2.png

3.选课表:sc

表结构

sc-1.png

表数据

sc-2.png

4.班级表:grade

表结构

grade-1.png

表数据

grade-2.png

5.院系(部门)表:dept

表结构

dept-1.png

表数据

dept-2.png

6.教师表:teacher

表结构

teacher-1.png

表数据

teacher-2.png

7.课程信息表:information

表结构

information-1.png

表数据

information-2.png

===>样例输出:

54.png

select course.CId,course.CName,sc.SCScore3
from student,sc,course
where student.SName = '张飞'
AND student.SId = sc.SId  AND sc.CId = course.CId;

29.统计每个班级期末成绩的最高分(Max),显示班级名称、期末最高成绩

本题目要求编写SQL语句,查询统计每个班级期末成绩的最高分(Max),显示班级名称、期末最高成绩。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

2.课程表:course

表结构

course-1.png

表数据

course-2.png

3.选课表:sc

表结构

sc-1.png

表数据

sc-2.png

4.班级表:grade

表结构

grade-1.png

表数据

grade-2.png

5.院系(部门)表:dept

表结构

dept-1.png

表数据

dept-2.png

6.教师表:teacher

表结构

teacher-1.png

表数据

teacher-2.png

7.课程信息表:information

表结构

information-1.png

表数据

information-2.png

===>样例输出:

72.png

SELECT grade.GName, max(sc.SCScore3) Max
FROM sc,
     grade,
     student
WHERE student.SId = sc.SId
  AND student.GId = grade.GId
GROUP BY grade.GName;

 30.显示一周8节课及以上的学生的名单,显示学号、姓名、班级名称

本题目要求编写SQL语句,查询显示一周8节课及以上的学生的名单,显示学号、姓名、班级名称。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

2.课程表:course

表结构

course-1.png

表数据

course-2.png

3.选课表:sc

表结构

sc-1.png

表数据

sc-2.png

4.班级表:grade

表结构

grade-1.png

表数据

grade-2.png

5.院系(部门)表:dept

表结构

dept-1.png

表数据

dept-2.png

6.教师表:teacher

表结构

teacher-1.png

表数据

teacher-2.png

7.课程信息表:information

表结构

information-1.png

表数据

information-2.png

===>样例输出:

73.png

select student.SId,student.SName,grade.GName
from student,grade,information
where student.GId = grade.GId
and student.GId = information.GId
group by student.SId,student.SName,grade.GName
having sum(length(information.ITimeseg)) > 8;

 31.统计教授每周上课的课时数(Hours),显示姓名、课时数

本题目要求编写SQL语句,查询统计教授每周上课的课时数(Hours),显示姓名、课时数。

现有教务管理系统的关系描述如下:
  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

2.课程表:course

表结构

course-1.png

表数据

course-2.png

3.选课表:sc

表结构

sc-1.png

表数据

sc-2.png

4.班级表:grade

表结构

grade-1.png

表数据

grade-2.png

5.院系(部门)表:dept

表结构

dept-1.png

表数据

dept-2.png

6.教师表:teacher

表结构

teacher-1.png

表数据

teacher-2.png

7.课程信息表:information

表结构

information-1.png

表数据

information-2.png

===>样例输出:

75.png

select teacher.TName,SUM(LENGTH(information.ITimeseg)) AS Hours
from teacher,information
where teacher.TProf = '教授'
and teacher.TId = information.TId
group by teacher.TName;

 32.将李飞同学的联系方式改为661010

本题目要求编写SQL语句,将李飞同学的联系方式改为661010。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。
  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。
  • 每名学生属于一个班级,可以选修多门课程。
  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。
  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

1.学生表:student

表结构

student-1.png

表数据

student-2.png

update student
set STele = '661010'
where SName = '李飞';

 33.查询“14计科1”班的学生所学的课程名称和平均成绩

本题目要求编写SQL语句,
检索出students表、sc表和course表中,“14计科1”班的学生所学的课程名称和平均成绩,注意:列名用中文表示。

提示:请使用join连接查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE students (
 sno char(7) ,
  sname char(8) NOT NULL,
  class char(10),
  ssex char(2),
  bday date ,
  bplace char(10) ,
  IDNum char(18) ,
  sdept char(16),
  phone char(11),
  PRIMARY KEY (sno)
) ;

CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
 score decimal(4,1),
 point decimal(2,1),
 PRIMARY KEY (sno,cno)
) ;

CREATE TABLE course (
 cno char(7) ,
 cname varchar(20) NOT NULL,
 cpno char(7),
 ccredit int NOT NULL,
 PRIMARY KEY (cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1401102陈晓东14计科11996-03-21浙江杭州330203199603210034信息学院15911113355
1311105苏有明13英语11995-04-16内蒙古包头330204199504162036人文学院15900002222
1711101赵薇17物流11999-02-11安徽合肥330203199902110925经管学院15900001177
1711102董洁17物流11999-02-17上海330203199902170017经管学院15900001188

sc表:

snocnoscorepoint
1311104000001153.00.0
1401102000001067.01.0
1311105000002784.01.0
1711101000005271.02.0

course表:

cnocnamecpnoccredit
0000001数据库OCP考证NULL4
0000002C语言基础00000279
0000003Linux操作系统00000135
0000010数据结构00000024
0000034高等数学NULL6

输出样例:

请在这里给出输出样例。例如:

课程名称平均成绩
数据结构67.00000
SELECT course.cname AS 课程名称, AVG(sc.score) AS 平均成绩
FROM students
JOIN sc ON students.sno = sc.sno
JOIN course ON sc.cno = course.cno
WHERE students.class = '14计科1' 
GROUP BY course.cname;

34.查询课程成绩及格的男同学的学生姓名、课程号与成绩

本题目要求编写SQL语句,
检索出students表和sc表中课程成绩及格的男同学的学生姓名、课程号与成绩。

提示:请使用join连接作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE students (
 sno char(7) ,
  sname char(8) NOT NULL,
  class char(10),
  ssex char(2),
  bday date ,
  bplace char(10) ,
  IDNum char(18) ,
  sdept char(16),
  phone char(11),
  PRIMARY KEY (sno)
) ;

CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
 score decimal(4,1),
 point decimal(2,1),
 PRIMARY KEY (sno,cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1401102陈晓东14计科11996-03-21浙江杭州330203199603210034信息学院15911113355
1311105苏有明13英语11995-04-16内蒙古包头330204199504162036人文学院15900002222
1711101赵薇17物流11999-02-11安徽合肥330203199902110925经管学院15900001177
1711102董洁17物流11999-02-17上海330203199902170017经管学院15900001188

sc表:

snocnoscorepoint
1311105000001153.00.0
1311105000002780.01.0
1311105000002784.01.0
1711101000005281.02.0

输出样例:

请在这里给出输出样例。例如:

snamecnoscore
苏有明000002780.0
SELECT students.sname, sc.cno, sc.score
FROM students
INNER JOIN sc ON students.sno = sc.sno
WHERE sc.score >= 60 AND students.ssex = '男'

35. 查询选修课程名为“高等数学”的学生学号、姓名和成绩

本题目要求编写SQL语句,
查询选修课程名为“高等数学”的学生学号、姓名和成绩。

提示:请使用join连接查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE students (
 sno char(7) ,
  sname char(8) NOT NULL,
  class char(10),
  ssex char(2),
  bday date ,
  bplace char(10) ,
  IDNum char(18) ,
  sdept char(16),
  phone char(11),
  PRIMARY KEY (sno)
) ;

CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
 score decimal(4,1),
 point decimal(2,1),
 PRIMARY KEY (sno,cno)
) ;

CREATE TABLE course (
 cno char(7) ,
 cname varchar(20) NOT NULL,
 cpno char(7),
 ccredit int NOT NULL,
 PRIMARY KEY (cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1401102陈晓东14计科11996-03-21浙江杭州330203199603210034信息学院15911113355
1411201王祖贤14物流21995-07-25西藏拉萨330204199507253015经管学院15900002244
1711101赵薇17物流11999-02-11安徽合肥330203199902110925经管学院15900001177
1711102董洁17物流11999-02-17上海330203199902170017经管学院15900001188

sc表:

snocnoscorepoint
1311104000001153.00.0
1401102000001067.01.0
1411201000003475.61.5
1711101000005271.02.0

course表:

cnocamecpnoccredit
0000001数据库OCP考证NULL4
0000002C语言基础00000279
0000003Linux操作系统00000135
0000010数据结构00000024
0000034高等数学NULL6

输出样例:

请在这里给出输出样例。例如:

snosnamescore
1411201王祖贤75.6
SELECT students.sno,students.sname,sc.score
FROM students
INNER JOIN sc ON students.sno = sc.sno
INNER JOIN course ON sc.cno = course.cno
WHERE course.cname = '高等数学'

36.查询选修课名中含有“电子”两个字的课程且成绩在60分以下的学生学号及成绩

本题目要求编写SQL语句,
检索出sc表、course表中选修课名中含有“电子”两个字的课程且成绩在60分以下的学生学号及成绩。

提示:请使用嵌套查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE course (
 cno char(7) ,
 cname varchar(20) NOT NULL,
  cpno char(7),
  ccredit int NOT NULL,
  PRIMARY KEY (cno)
) ;

CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
 score decimal(4,1),
 point decimal(2,1),
 PRIMARY KEY (sno,cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

course表:

cnocnamecpnoccredit
0000002C语言基础00000279
0000003Linux操作系统00000135
0000004C#程序设计00000026
0000008电子商务0000274

sc表:

snocnoscorepoint
1311104000001153.00.0
1311104000002780.01.0
1311105000002784.01.0
1711101000000851.00.0

输出样例:

请在这里给出输出样例。例如:

snoscore
171110151.0
SELECT sno, score
FROM sc
WHERE score < 60 AND cno IN (
  SELECT cno
  FROM course
  WHERE cname LIKE '%电子%'
)

37.查询选修“0000011”课程的学生的班级及对应人数

本题目要求编写SQL语句,
检索出students表和sc表中,选修“0000011”课程的学生的班级及对应人数,列名请用中文显示。

提示:请使用嵌套查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE students (
 sno char(7) ,
  sname char(8) NOT NULL,
  class char(10),
  ssex char(2),
  bday date ,
  bplace char(10) ,
  IDNum char(18) ,
  sdept char(16),
  phone char(11),
  PRIMARY KEY (sno)
) ;
CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
  score decimal(4,1),
    point decimal(2,1),
  PRIMARY KEY (sno,cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1401102陈晓东14计科11996-03-21浙江杭州330203199603210034信息学院15911113355
1811104李嘉欣18英语11994-05-28山西太原330204199405281056信息学院15900002211
1811105苏有明18英语11995-04-16内蒙古包头330204199504162036人文学院15900002222
1911101赵薇19信管22000-02-11安徽合肥330203199902110925经管学院15900001177
1911102董洁19信管22000-02-17上海330203199902170017经管学院15900001188

sc表:

snocnoscorepoint
1401102000001067.01.0
1401102000001389.02.5
14011020000045NULLNULL
1811104000001153.00.0
1811104000001180.02.0
1811105000002784.01.0
1911101000001171.02.0

输出样例:

请在这里给出输出样例。例如:

班级人数
18英语12
19信管21
SELECT class as 班级, COUNT(*) AS 人数
FROM students
WHERE sno IN (
  SELECT sno
  FROM sc
  WHERE cno = '0000011'
)
GROUP BY class

38.查询“严蔚敏”教师任课的课程号,选修其课程的学生的学号和成绩

本题目要求编写SQL语句,
检索出teacher表、teaching表和sc表中,查询“严蔚敏”教师任课的课程号,选修其课程的学生的学号和成绩。

提示:请使用嵌套查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE teachers (
  tno char(3) ,
  tname char(8),
  ps char(10),
  tbirthday date ,
  tdept char(16) ,
  tsex char(2),
  PRIMARY KEY (tno)
) ;

CREATE TABLE teaching (
  sid int ,
  cterm int,
  class char(10) DEFAULT NULL,
  cno char(7) NOT NULL,
  tno char(3) DEFAULT NULL,
  period int DEFAULT NULL,
  PRIMARY KEY (sid)
) ;

CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
 score decimal(4,1),
 point decimal(2,1),
 PRIMARY KEY (sno,cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

teachers表:

tnotnamepstbirthdaytdepttsex
001谭浩强教授1958-01-01计科
002王珊教授1962-02-13计科
003萨师煊教授1953-05-01计科
004严蔚敏副教授1968-07-02软工
005李琳讲师1988-11-15软工
006韩万江助教1992-10-17信管

teaching表:

sidctermclasscnotnoperiod
1117物流1000001100136
2117物流1000003400272
3317物流1000005200360
4117物流10000027004108
5217物流1000003900536
6617物流1000000500672

sc表:

snocnoscorepoint
1311104000001173.00.0
1311104000002780.01.0
1311105000002784.01.0
1711101000005271.02.0

输出样例:

请在这里给出输出样例。例如:

cnosnoscore
0000027131110480.0
0000027131110584.0
SELECT sc.cno, sc.sno, sc.score
FROM sc
WHERE sc.cno IN (
    SELECT teaching.cno
    FROM teaching
    WHERE teaching.tno = (
        SELECT tno
        FROM teachers
        WHERE tname = '严蔚敏'
    )
);

39.查询与“陈红”同一个学院的同学姓名

本题目要求编写SQL语句,
检索出students表中,与“陈红”同一个学院的同学姓名。

提示:请使用嵌套查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE students (
 sno char(7) ,
  sname char(8) NOT NULL,
  class char(10),
  ssex char(2),
  bday date ,
  bplace char(10) ,
  IDNum char(18) ,
  sdept char(16),
  phone char(11),
  PRIMARY KEY (sno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1401102陈晓东14计科11996-03-21浙江杭州330203199603210034信息学院15911113355
1701101陈红17计应11998-12-02浙江宁波330102199812020021信息学院15900001111
1711101赵薇17物流11999-02-11安徽合肥330203199902110925经管学院15900001177
1711102董洁17物流11999-02-17上海330203199902170017经管学院15900001188

输出样例:

请在这里给出输出样例。例如:

sname
陈晓东
select sname from students
where sdept = any
(select sdept from students where sname = '陈红')
and sname != '陈红';

40.查询成绩比所有课程的平均成绩高的学生的学号及成绩

本题目要求编写SQL语句,
检索出sc表中,课程成绩比所有课程的平均成绩高的学生的学号及成绩。

提示:请使用嵌套查询语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE sc (
 sno char(7) ,
 cno char(7) ,
 score decimal(4,1),
 point decimal(2,1),
 PRIMARY KEY (sno,cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

sc表:

snocnoscorepoint
1311104000001153.00.0
1311104000002780.01.0
1311105000002784.01.0
1711101000005271.02.0

输出样例:

请在这里给出输出样例。例如:

snoscore
131110480.0
131110584.0
SELECT sno, score
FROM sc
WHERE score > (SELECT AVG(score) FROM sc);

以下是JAVA程序的实现,可以参考: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class ScoreSystem { private static final double WEIGHT1 = 0.3; private static final double WEIGHT2 = 0.3; private static final double WEIGHT3 = 0.4; private Map<String, Map<String, List<Double>>> scores = new HashMap<>(); public void loadScores(String filename) throws IOException { try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { String line; while ((line = reader.readLine()) != null) { String[] fields = line.split(","); String classname = fields[0]; String course = fields[1]; double score1 = Double.parseDouble(fields[2]); double score2 = Double.parseDouble(fields[3]); double score3 = Double.parseDouble(fields[4]); scores.computeIfAbsent(classname, k -> new HashMap<>()) .computeIfAbsent(course, k -> new ArrayList<>()) .add(score1); scores.get(classname).get(course).add(score2); scores.get(classname).get(course).add(score3); } } } public void calculateScores() { for (String classname : scores.keySet()) { for (String course : scores.get(classname).keySet()) { List<Double> scoresList = scores.get(classname).get(course); double sum1 = 0; double sum2 = 0; double sum3 = 0; for (int i = 0; i < scoresList.size(); i += 3) { sum1 += scoresList.get(i); sum2 += scoresList.get(i + 1); sum3 += scoresList.get(i + 2); } double avg1 = sum1 / (scoresList.size() / 3); double avg2 = sum2 / (scoresList.size() / 3); double avg3 = sum3 / (scoresList.size() / 3); double totalScore = avg1 * WEIGHT1 + avg2 * WEIGHT2 + avg3 * WEIGHT3; scores.get(classname).get(course).add(totalScore); } } } public void printScores(String classname, String course) { List<Double> scoresList = scores.get(classname).get(course); List<String> students = new ArrayList<>(); Map<String, Double> scoreMap = new HashMap<>(); for (int i = 0; i < scoresList.size() - 1; i += 4) { String student = String.format("%03d", (i / 4) + 1); double score = scoresList.get(i + 3); students.add(student); scoreMap.put(student, score); } Collections.sort(students, (s1, s2) -> Double.compare(scoreMap.get(s2), scoreMap.get(s1))); System.out.println("学号\t成绩"); for (String student : students) { double score = scoreMap.get(student); System.out.println(student + "\t" + score); } } public void printSummary(String classname, String course) { System.out.println("班级:" + classname); System.out.println("课程:" + course); List<Double> scoresList = scores.get(classname).get(course); double sum = 0; int count = 0; int excellentCount = 0; int goodCount = 0; int mediumCount = 0; int passCount = 0; int failCount = 0; for (int i = 0; i < scoresList.size() - 1; i += 4) { double score = scoresList.get(i + 3); sum += score; count++; if (score >= 90) { excellentCount++; } else if (score >= 80) { goodCount++; } else if (score >= 70) { mediumCount++; } else if (score >= 60) { passCount++; } else { failCount++; } } double avg = sum / count; double excellentPercent = (double) excellentCount / count * 100; double goodPercent = (double) goodCount / count * 100; double mediumPercent = (double) mediumCount / count * 100; double passPercent = (double) passCount / count * 100; double failPercent = (double) failCount / count * 100; System.out.println("总平均成绩:" + avg); System.out.println("优秀人数:" + excellentCount + ",占比:" + excellentPercent + "%"); System.out.println("良好人数:" + goodCount + ",占比:" + goodPercent + "%"); System.out.println("中等人数:" + mediumCount + ",占比:" + mediumPercent + "%"); System.out.println("及格人数:" + passCount + ",占比:" + passPercent + "%"); System.out.println("不及格人数:" + failCount + ",占比:" + failPercent + "%"); } public static void main(String[] args) throws IOException { ScoreSystem system = new ScoreSystem(); system.loadScores("scores.txt"); system.calculateScores(); system.printScores("class1", "course1"); system.printSummary("class1", "course1"); } } ``` 这个程序实现了从文件中读取学生成绩数据、按照权重计算总评成绩、计算班级平均成绩、计算各区间人数和占比、输出成绩在某个区间的学生学号和成绩等功能。可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值