写再前面的话
1,本文为Java学习五部分第二部分所有项目回顾(数据库练习系列-对应Java体系第二部分第一阶段内容)这些再前面的博客里有,再写会重复的。但是一想到我设计的第五部分第一阶段本来就要把那些值得记录的项目练习单独整理一遍。所以,理应如此,我会写的更好的。
2,整体项目系列博客(包括整体快递e站系列,数据库练习系列,前端练习系列,Javaweb系列,SSM系列,微服务系列,实战系列,等)
3,完整的Java体系链接(比你想的更多的Java内容),感谢一下开课吧。
需求介绍
整体:
问题:
1.grade 表增加一个阶段,“就业期”
2.将第三阶段的学生的 gradeid 改为就业期的 id
3.查询所有得了 100 分的学号
4.查询所有 1989 年出生的学生(1989-1-1~1990-1-1)
5.查询学生姓名为“金蝶”的全部信息
6.查询 subjectid 为 8 的科目考试未及格(60 分)的学号和成绩
7.查询第 3 阶段课时大于 50 的课程全部信息
8.查询 S1101001 学生的考试信息
9.查询所有第二阶段的女生信息
10.“基于.NET 平台的软件系统分层开发”需要多少课时
11.查询“设计 MySchool 数据库”和“面向对象程序设计”的课时(使用 in)
12 查询所有地址在山东的学生信息
13 查询所有姓凌的单名同学
14.查询 gradeid 为 1 的学生信息,按出生日期升序排序
15.查询 subjectid 为 3 的考试的成绩信息,用降序排序
16.查询 gradeid 为 2 的课程中课时最多的课程信息
17.查询北京的学生有多少个
18.查询有多少个科目学时小于 50
19.查询 gradeid 为 2 的阶段总课时是多少
20.查询 subjectid 为 8 的课程学生平均分
21.查询 gradeid 为 3 的课程中最多的学时和最少的学时
22.查询每个科目有多少人次考试
23.每个阶段课程的平均课时
24.查询每个阶段的男生和女生个数(group by 两列)
答案
– 1、grade 表增加一个阶段, “就业期”
INSERT INTO grade VALUES(4,‘就业期’);
我的答案截图:
– 2.将第三阶段的学生的 gradeid 改为就业期的 id
UPDATE student a SET a.gradeid = ‘4’ WHERE a.gradeid = ‘3’;
SELECT * FROM student;
我的答案截图:
– 3.查询所有得了 100 分的学号
SELECT studentno FROM score WHERE score = 100;
我的答案截图:
– 4.查询所有 1989 年出生的学生(1989-1-1~1990-1-1)
SELECT studentno,studentname FROM student WHERE borndate >= ‘1989-01-01’ AND borndate < ‘1990-01-01’;
我的答案截图:
– 5.查询学生姓名为“金蝶” 的全部信息
SELECT * FROM student WHERE studentname = ‘金蝶’;
我的答案截图:
– 6.查询 subjectid 为 8 的科目考试未及格(60 分) 的学号和成绩
SELECT studentno,score FROM score WHERE id = 8 AND score < 60;
我的答案截图:
– 7.查询第 3 阶段课时大于 50 的课程全部信息
SELECT * FROM SUBJECT WHERE gradeid = 3 AND HOUR > 50;
我的答案截图:
– 8.查询 S1101001 学生的考试信息
SELECT * FROM student WHERE studentno = ‘S1101001’;
我的答案截图:
– 9.查询所有第二阶段的女生信息
SELECT * FROM student WHERE gradeid = 2 AND sex = ‘女’;
我的答案截图:
– 10.“基于.NET 平台的软件系统分层开发” 需要多少课时
SELECT HOUR FROM SUBJECT WHERE subjectname = ‘基于.NET 平台的软件系统分层开发’;
我的答案截图:
– 11.查询“设计 MySchool 数据库” 和“面向对象程序设计” 的课时(使用in)
SELECT HOUR FROM SUBJECT WHERE subjectname IN (‘设计 MySchool 数据库’,‘面向对象程序设计’);
我的答案截图:
– 12 查询所有地址在山东的学生信息
SELECT * FROM student WHERE address = ‘山东’;
我的答案截图:
– 13 查询所有姓凌的单名同学
SELECT * FROM student WHERE studentname LIKE ‘凌_’;
我的答案截图:
– 14.查询 gradeid 为 1 的学生信息, 按出生日期升序排序
SELECT * FROM student WHERE gradeid = 1 ORDER BY borndate ASC;
我的答案截图:
– 15.查询 subjectid 为 3 的考试的成绩信息, 用降序排序
SELECT * FROM score WHERE subjectid = 3 ORDER BY score DESC;
我的答案截图:
– 16.查询 gradeid 为 2 的课程中课时最多的课程信息
SELECT * FROM SUBJECT WHERE gradeid = 2 AND HOUR = (SELECT MAX(HOUR) FROM SUBJECT WHERE gradeid = 2);
我的答案截图:
– 17.查询北京的学生有多少个
SELECT COUNT(*) FROM student WHERE address = ‘北京’;
我的答案截图:
– 18.查询有多少个科目学时小于 50
SELECT COUNT(HOUR) FROM SUBJECT WHERE HOUR < 50;
我的答案截图:
– 19.查询 gradeid 为 2 的阶段总课时是多少
SELECT SUM(HOUR) FROM SUBJECT WHERE gradeid = 2;
我的答案截图:
– 20.查询 subjectid 为 3 的课程学生平均分
SELECT AVG(score) FROM score WHERE subjectid = 3;
我的答案截图:
– 21.查询 gradeid 为 3 的课程中最多的学时和最少的学时
SELECT MAX(HOUR) FROM SUBJECT WHERE gradeid = 3;
SELECT MIN(HOUR) FROM SUBJECT WHERE gradeid = 3;
我的答案截图:
– 22.查询每个科目有多少人次考试
SELECT subjectid,COUNT(studentno) FROM score WHERE examdate IS NOT NULL GROUP BY subjectid ;
我的答案截图:
– 23.每个阶段课程的平均课时
SELECT gradeid, AVG(HOUR) FROM SUBJECT GROUP BY gradeid;
我的答案截图:
– 24.查询每个阶段的男生和女生个数(group by 两列)
SELECT gradeid,sex,COUNT(studentno) FROM student GROUP BY gradeid,SEX;
我的答案截图:
附录:建表语句
实际的建表语句:
/*
Navicat Premium Data Transfer
Source Server : 47.98.158.124
Source Server Type : MySQL
Source Server Version : 50732
Source Host : 47.98.158.124:3306
Source Schema : mysqlwork_primary
Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001
Date: 12/05/2021 10:15:25
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for grade
-- ----------------------------
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
`gradeid` int(11) NOT NULL AUTO_INCREMENT,
`gradename` varchar(20) NOT NULL,
PRIMARY KEY (`gradeid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of grade
-- ----------------------------
BEGIN;
INSERT INTO `grade` VALUES (1, '第一阶段');
INSERT INTO `grade` VALUES (2, '第二阶段');
INSERT INTO `grade` VALUES (3, '第三阶段');
COMMIT;
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`id` int(11) NOT NULL,
`studentno` varchar(10) NOT NULL,
`subjectid` int(11) NOT NULL,
`score` int(11) NOT NULL,
`examdate` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Records of score
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES (1, 'S2102001', 3, 76, '2009-12-13 00:00:00');
INSERT INTO `score` VALUES (2, 'S2102002', 3, 90, '2009-12-14 00:00:00');
INSERT INTO `score` VALUES (3, 'S2102003', 3, 100, '2009-12-15 00:00:00');
INSERT INTO `score` VALUES (4, 'S2102004', 3, 79, '2009-12-16 00:00:00');
INSERT INTO `score` VALUES (5, 'S2102005', 3, 80, '2009-12-17 00:00:00');
INSERT INTO `score` VALUES (6, 'S2102006', 3, 61, '2009-12-18 00:00:00');
INSERT INTO `score` VALUES (7, 'S2102007', 3, 82, '2009-12-19 00:00:00');
INSERT INTO `score` VALUES (8, 'S2102008', 3, 35, '2009-12-20 00:00:00');
INSERT INTO `score` VALUES (9, 'S2102009', 3, 64, '2009-12-21 00:00:00');
INSERT INTO `score` VALUES (10, 'S2102010', 3, 65, '2009-12-22 00:00:00');
COMMIT;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`studentno` varchar(10) NOT NULL,
`loginpwd` int(11) NOT NULL,
`studentname` varchar(40) NOT NULL,
`sex` varchar(2) NOT NULL,
`gradeid` int(11) NOT NULL,
`phone` varchar(20) NOT NULL DEFAULT '0',
`address` varchar(30) NOT NULL,
`borndate` datetime DEFAULT NULL,
`email` varchar(28) NOT NULL,
PRIMARY KEY (`studentno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Records of student
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES ('S1101001', 228996245, '金蝶', '男', 1, '717215147', '天津市河西区', '1989-11-09 00:00:00', 'okiwcydml@ryhlo.com');
INSERT INTO `student` VALUES ('S1101002', 228996246, '洛飞', '女', 1, '666762663', '天津市南开区', '1990-02-07 00:00:00', 'jnqlpkdwb@nsjpt.com');
INSERT INTO `student` VALUES ('S1101003', 228996247, '凌辉', '女', 1, '353149818', '北京市海淀区成府路', '1993-04-04 00:00:00', 'eepispykh@oitbl.com');
INSERT INTO `student` VALUES ('S1101004', 228996251, '白燕', '男', 1, '676151367', '', '1990-09-01 00:00:00', 'cxmnnrhfn@sjsam.com');
INSERT INTO `student` VALUES ('S1101005', 228996252, '夏一桐', '男', 1, '397739963', '北京市朝阳区大屯', '1989-09-12 00:00:00', 'npgiygxox@ootml.com');
INSERT INTO `student` VALUES ('S1101006', 228996253, '欧阳燕飞', '男', 1, '13512345678', '河南省南阳市', '1987-06-19 00:00:00', 'dkwkiqbrj@yrkro.com');
INSERT INTO `student` VALUES ('S1101007', 228996254, '孟祥亚', '男', 1, '13512345679', '河南省洛阳市涧西区', '1993-02-22 00:00:00', 'gekdinmky@ijisq.com');
COMMIT;
-- ----------------------------
-- Table structure for subject
-- ----------------------------
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject` (
`subjectid` int(11) NOT NULL AUTO_INCREMENT,
`subjectname` varchar(50) NOT NULL DEFAULT '',
`hour` int(11) NOT NULL DEFAULT '0',
`gradeid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`subjectid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Records of subject
-- ----------------------------
BEGIN;
INSERT INTO `subject` VALUES (1, '使用C#语言开发数据库应用系统', 36, 1);
INSERT INTO `subject` VALUES (2, '深入.NET平台和C#编程', 76, 2);
INSERT INTO `subject` VALUES (3, '设计MySchool数据库', 42, 2);
INSERT INTO `subject` VALUES (4, '基于.NET平台的软件系统分层开发', 44, 2);
INSERT INTO `subject` VALUES (5, '面向对象程序设计', 59, 2);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
我的建表语句:
#这是我创建表的语句,完全OK。不过没有数据,因为一个个添加数据感觉太sb了。所以还是用现成的例子。
#科目表:科目 id(主键),科目名称,学时,年级 id
CREATE TABLE subjects (
subjects_id INT (2) NOT NULL PRIMARY KEY,
subjects_name VARCHAR (20),
subjects_count INT (2),
grade_id VARCHAR (3)
);
#年级表:年级 id(主键),年级名称
CREATE TABLE grade (
grade_id VARCHAR(3) NOT NULL PRIMARY KEY,
grade_name VARCHAR (4)
);
#成绩表:id(主键),学员编号,科目 id,分数,考试时间
CREATE TABLE score(
score_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
stuno VARCHAR(20),
id_subjects INT(2),
score VARCHAR(3),
examtime DATE
);
#学生表:学生编号(主键),学生姓名,登录密码,性别,年级 id,电话, 地址,出生日期,email
CREATE TABLE student (
stu_id VARCHAR (10) NOT NULL PRIMARY KEY,
stu_name VARCHAR (10),
STU_password VARCHAR (10),
SEX ENUM ('男', '女'),
id_grade VARCHAR (10),
telphone VARCHAR (20),
address VARCHAR (20),
birthday DATE,
email VARCHAR (20)
);