目录
一,数据库训练任务
1,任务概述
2,参考代码
2.1 建表及插入数据
2.2 检索
3,参考资料
MySQL数据库中int,bigint,smallint和tinyint区别
一,数据库训练任务
1,任务概述
新入职的程序员冯帅被公司安排去跟一个学生管理系统的项目,项目组长 安排他去主要负责数据库部分的所有操作,日常数据的维护和根据需求进行数 据查询。可冯帅之前并没有接触过数据库,那就抓紧时间学习一下数据库,把 组长安排的 sql 补充一下吧!
数据表:
- 年级表:年级 id(主键),年级名称
- 成绩表:id(主键),学员编号,科目 id,分数,考试时间
- 学生表:学生编号(主键),学生姓名,登录密码,性别,年级 id,电话, 地址,出生日期,email
- 科目表:科目 id(主键),科目名称,学时,年级 id
需求
- 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 两列)
2,参考代码
主要难点在建表和插入数据的过程(╯‵□′)╯︵┻━┻
2.1 建表及插入数据
grade年级表
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80017
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80017
File Encoding : 65001
Date: 20/01/2021 22:48:40
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for grade
-- ----------------------------
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
`grade_id` tinyint(5) UNSIGNED NOT NULL,
`grade_name` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`grade_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of grade
-- ----------------------------
INSERT INTO `grade` VALUES (1, '初级');
INSERT INTO `grade` VALUES (2, '中级');
INSERT INTO `grade` VALUES (3, '高级');
INSERT INTO `grade` VALUES (4, '就业期');
SET FOREIGN_KEY_CHECKS = 1;
score成绩表
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80017
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80017
File Encoding : 65001
Date: 20/01/2021 22:48:50
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`score_id` int(10) NOT NULL COMMENT '成绩id',
`student_id` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学员编号',
`course_id` int(11) NOT NULL COMMENT '科目id',
`score` tinyint(4) NOT NULL COMMENT '成绩',
`exam_time` date NULL DEFAULT NULL,
PRIMARY KEY (`score_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (1, 'S1101001', 1, 90, '2021-01-01');
INSERT INTO `score` VALUES (2, 'S1101001', 2, 96, '2021-01-01');
INSERT INTO `score` VALUES (3, 'S1101001', 3, 99, '2021-01-01');
INSERT INTO `score` VALUES (4, 'S1101002', 1, 95, '2021-01-01');
INSERT INTO `score` VALUES (5, 'S1101002', 2, 100, '2021-01-01');
INSERT INTO `score` VALUES (6, 'S1101002', 3, 100, '2021-01-01');
INSERT INTO `score` VALUES (7, 'S1101003', 1, 80, '2021-01-01');
INSERT INTO `score` VALUES (8, 'S1101003', 2, 59, '2021-01-01');
INSERT INTO `score` VALUES (9, 'S1101003', 3, 60, '2021-01-01');
INSERT INTO `score` VALUES (10, 'S1101004', 1, 88, '2021-01-01');
INSERT INTO `score` VALUES (11, 'S1101004', 2, 90, '2021-01-01');
INSERT INTO `score` VALUES (12, 'S1101004', 3, 100, '2021-01-01');
INSERT INTO `score` VALUES (13, 'S1102001', 4, 89, '2021-01-02');
INSERT INTO `score` VALUES (14, 'S1102001', 5, 63, '2021-01-02');
INSERT INTO `score` VALUES (15, 'S1102001', 6, 99, '2021-01-02');
INSERT INTO `score` VALUES (16, 'S1102002', 4, 100, '2021-01-02');
INSERT INTO `score` VALUES (17, 'S1102002', 5, 99, '2021-01-02');
INSERT INTO `score` VALUES (18, 'S1102002', 6, 60, '2021-01-02');
INSERT INTO `score` VALUES (19, 'S1102003', 4, 78, '2021-01-02');
INSERT INTO `score` VALUES (20, 'S1102003', 5, 90, '2021-01-02');
INSERT INTO `score` VALUES (21, 'S1102003', 6, 56, '2021-01-02');
INSERT INTO `score` VALUES (22, 'S1102004', 4, 99, '2021-01-02');
INSERT INTO `score` VALUES (23, 'S1102004', 5, 99, '2021-01-02');
INSERT INTO `score` VALUES (24, 'S1102004', 6, 99, '2021-01-02');
INSERT INTO `score` VALUES (25, 'S1103001', 7, 56, '2021-01-03');
INSERT INTO `score` VALUES (26, 'S1103001', 8, 59, '2021-01-03');
INSERT INTO `score` VALUES (27, 'S1103001', 9, 100, '2021-01-03');
INSERT INTO `score` VALUES (28, 'S1103002', 7, 89, '2021-01-03');
INSERT INTO `score` VALUES (29, 'S1103002', 8, 100, '2021-01-03');
INSERT INTO `score` VALUES (30, 'S1103002', 9, 99, '2021-01-03');
INSERT INTO `score` VALUES (31, 'S1103003', 7, 66, '2021-01-03');
INSERT INTO `score` VALUES (32, 'S1103003', 8, 90, '2021-01-03');
INSERT INTO `score` VALUES (33, 'S1103003', 9, 98, '2021-01-03');
INSERT INTO `score` VALUES (34, 'S1103004', 7, 100, '2021-01-03');
INSERT INTO `score` VALUES (35, 'S1103004', 8, 100, '2021-01-03');
INSERT INTO `score` VALUES (36, 'S1103004', 9, 100, '2021-01-03');
SET FOREIGN_KEY_CHECKS = 1;
student学生表
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80017
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80017
File Encoding : 65001
Date: 20/01/2021 22:48:59
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`student_id` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`student_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`pwd` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`sex` char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`grade_id` tinyint(5) NULL DEFAULT NULL,
`phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`birthday` date NULL DEFAULT NULL,
`email` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`student_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('S1101001', '金蝶', '123456', '女', 1, '18866660001', '北京', '1999-09-01', '[email protected]');
INSERT INTO `student` VALUES ('S1101002', '甄姬', '123456', '女', 1, '18866660002', '河南', '1997-08-03', '[email protected]');
INSERT INTO `student` VALUES ('S1101003', '白起', '123456', '男', 1, '18866660003', '河北', '1990-07-09', '[email protected]');
INSERT INTO `student` VALUES ('S1101004', '狄仁杰', '123456', '男', 1, '18866660004', '山东', '2000-06-06', '[email protected]');
INSERT INTO `student` VALUES ('S1102001', '凌晨', '123456', '女', 2, '18866660005', '江苏', '2001-01-01', '[email protected]');
INSERT INTO `student` VALUES ('S1102002', '小乔', '123456', '女', 2, '18866660006', '四川', '1998-06-06', '[email protected]');
INSERT INTO `student` VALUES ('S1102003', '廉颇', '666666', '男', 2, '18866660007', '陕西', '1998-09-09', '[email protected]');
INSERT INTO `student` VALUES ('S1102004', '凌云天', '123321', '男', 2, '18866660008', '江苏', '1998-09-16', '[email protected]');
INSERT INTO `student` VALUES ('S1103001', '钟馗', '888888', '男', 4, '18866660009', '北京', '1989-06-01', '[email protected]');
INSERT INTO `student` VALUES ('S1103002', '露娜', '123456', '女', 4, '18866660010', '海南', '1997-01-01', '[email protected]');
INSERT INTO `student` VALUES ('S1103003', '后羿', '123455', '男', 4, '18866660011', '湖北', '1996-08-08', '[email protected]');
INSERT INTO `student` VALUES ('S1103004', '嫦娥', '123456', '女', 4, '18866660012', '月亮', '1999-09-01', '[email protected]');
SET FOREIGN_KEY_CHECKS = 1;
course科目表
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80017
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80017
File Encoding : 65001
Date: 20/01/2021 22:48:29
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`course_id` int(11) NOT NULL,
`course_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`period` tinyint(4) NULL DEFAULT NULL,
`grade_id` tinyint(4) NULL DEFAULT NULL,
PRIMARY KEY (`course_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, '语文', 30, 1);
INSERT INTO `course` VALUES (2, '数学', 40, 1);
INSERT INTO `course` VALUES (3, '英语', 50, 1);
INSERT INTO `course` VALUES (4, '政治', 30, 2);
INSERT INTO `course` VALUES (5, '历史', 50, 2);
INSERT INTO `course` VALUES (6, '地理', 70, 2);
INSERT INTO `course` VALUES (7, '基于.NET 平台的软件系统分层开发', 60, 3);
INSERT INTO `course` VALUES (8, '设计 MySchool 数据库', 55, 3);
INSERT INTO `course` VALUES (9, '面向对象程序设计', 50, 3);
SET FOREIGN_KEY_CHECKS = 1;
2.2 检索
1. grade 表增加一个阶段,“就业期”
insert into grade (grade_id, grade_name) values (4,"就业期");
2.将第三阶段的学生的 gradeid 改为就业期的 id
update student set grade_id=4 where grade_id=3;
3.查询所有得了 100 分的学号
select distinct student_id from score where score=100;
4.查询所有 1989 年出生的学生(1989-1-1~1990-1-1)
select student_id,student_name,birthday
from student
where birthday>'1989-01-01' and birthday<'1990-01-01';
5.查询学生姓名为“金蝶”的全部信息
select * from student where student_name='金蝶';
6.查询 subjectid 为 8 的科目考试未及格(60 分)的学号和成绩
select student_id,score from score where course_id=8 and score<60;
7.查询第 3 阶段课时大于 50 的课程全部信息
select * from course where grade_id=3 and period>50;
8.查询 S1101001 学生的考试信息
select * from score where student_id='S1101001';
9.查询所有第二阶段的女生信息
select * from student where grade_id=2 and sex='女';
10.“基于.NET 平台的软件系统分层开发”需要多少课时
select period from course where course_name='基于.NET 平台的软件系统分层开发';
11.查询“设计 MySchool 数据库”和“面向对象程序设计”的课时(使用 in)
select period from course where course_name in ('设计 MySchool 数据库','面向对象程序设计');
12 查询所有地址在山东的学生信息
select * from student where address='山东';
13 查询所有姓凌的单名同学
select * from student where student_name like '凌_';
通配符下划线表示匹配任意单个字符。
14.查询 gradeid 为 1 的学生信息,按出生日期升序排序
select * from student where grade_id=1 order by birthday;
15.查询 subjectid 为 3 的考试的成绩信息,用降序排序
select * from score where course_id=3 order by score desc;
16.查询 gradeid 为 2 的课程中课时最多的课程信息
select *
from course
where period=(
select max(period)
from course);
17.查询北京的学生有多少个
select count(*) from student where address='北京';
18.查询有多少个科目学时小于 50
select count(*) from course where period<50;
19.查询 gradeid 为 2 的阶段总课时是多少
select sum(period) as sum_period from course where grade_id=2;
20.查询 subjectid 为 8 的课程学生平均分
select avg(score) from score where course_id=8;
21.查询 gradeid 为 3 的课程中最多的学时和最少的学时
select max(period),min(period) from course where grade_id=3;
22.查询每个科目有多少人次考试
select course_id,count(*) from score group by course_id;
23.每个阶段课程的平均课时
select grade_id,avg(period) from course group by grade_id;
24.查询每个阶段的男生和女生个数(group by 两列)
select grade_id,sex,count(*) from student group by grade_id,sex;
3,参考资料
MySQL数据库中int,bigint,smallint和tinyint区别
参考@虚镜【MySQL数据库中int,bigint,smallint和tinyint区别】
bigint
- 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
- P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数
int
- 从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
smallint
- 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
- 从 0 到 255 的整型数据。存储大小为 1 字节。
注释
- 在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。
- 在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
- 只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。
- int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。
章节汇总在这里(づ ̄3 ̄)づ╭❤~@&再见萤火虫&【05-数据库】
对学习Java感兴趣的同学欢迎加入QQ学习交流群:1126298731
有问题欢迎提问,大家一起在学习Java的路上打怪升级!(o゜▽゜)o☆[BINGO!]
标签:INSERT,01,05,INTO,id,任务,score,VALUES,数据库 From: https://blog.51cto.com/u_15849465/5835013