任务卡_05-数据库_数据库基础

目录

一,数据库训练任务

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!]

猜你喜欢

转载自blog.csdn.net/qq_41528502/article/details/112734174