MYSQL 练习

Posted 别拿曾经看以后

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL 练习相关的知识,希望对你有一定的参考价值。

导出现有数据库数据:

  • mysqldump -u用户名 -p密码 数据库名称 >导出文件路径           # 结构+数据
  • mysqldump -u用户名 -p密码 -d 数据库名称 >导出文件路径       # 结构 

导入现有数据库数据:

  • mysqldump -uroot -p密码  数据库名称 < 文件路径  

一、表关系

请创建如下表,并创建相关约束

二、操作表

1、自行创建测试数据

/*
Navicat MySQL Data Transfer

Source Server         : abc
Source Server Version : 50713
Source Host           : localhost:3306
Source Database       : lx

Target Server Type    : MYSQL
Target Server Version : 50713
File Encoding         : 65001

Date: 2016-10-24 18:07:25
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES (\'1\', \'三年二班\');
INSERT INTO `class` VALUES (\'2\', \'一年三班\');
INSERT INTO `class` VALUES (\'3\', \'三年一班\');
INSERT INTO `class` VALUES (\'4\', \'python 二期\');

-- ----------------------------
-- Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(20) DEFAULT NULL,
  `teache_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`cid`),
  KEY `fk_c_t` (`teache_id`),
  CONSTRAINT `fk_c_t` FOREIGN KEY (`teache_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (\'1\', \'生物\', \'1\');
INSERT INTO `course` VALUES (\'2\', \'体育\', \'1\');
INSERT INTO `course` VALUES (\'3\', \'物理\', \'2\');

-- ----------------------------
-- Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) DEFAULT NULL,
  `corse_id` int(11) DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_s_st` (`student_id`),
  KEY `fk_s_co` (`corse_id`),
  CONSTRAINT `fk_s_co` FOREIGN KEY (`corse_id`) REFERENCES `course` (`cid`),
  CONSTRAINT `fk_s_st` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (\'1\', \'1\', \'1\', \'60\');
INSERT INTO `score` VALUES (\'2\', \'1\', \'2\', \'59\');
INSERT INTO `score` VALUES (\'3\', \'2\', \'2\', \'100\');
INSERT INTO `score` VALUES (\'4\', \'1\', \'3\', \'76\');
INSERT INTO `score` VALUES (\'5\', \'2\', \'1\', \'99\');
INSERT INTO `score` VALUES (\'6\', \'2\', \'3\', \'88\');
INSERT INTO `score` VALUES (\'7\', \'3\', \'1\', \'66\');
INSERT INTO `score` VALUES (\'8\', \'3\', \'2\', \'77\');
INSERT INTO `score` VALUES (\'9\', \'3\', \'3\', \'88\');
INSERT INTO `score` VALUES (\'10\', \'4\', \'1\', \'76\');
INSERT INTO `score` VALUES (\'11\', \'4\', \'2\', \'99\');
INSERT INTO `score` VALUES (\'12\', \'4\', \'3\', \'88\');
INSERT INTO `score` VALUES (\'13\', \'5\', \'1\', \'66\');
INSERT INTO `score` VALUES (\'14\', \'5\', \'2\', \'77\');
INSERT INTO `score` VALUES (\'15\', \'5\', \'3\', \'88\');
INSERT INTO `score` VALUES (\'16\', \'6\', \'1\', \'58\');
INSERT INTO `score` VALUES (\'17\', \'6\', \'2\', \'68\');
INSERT INTO `score` VALUES (\'18\', \'6\', \'3\', \'78\');
INSERT INTO `score` VALUES (\'19\', \'7\', \'1\', \'87\');
INSERT INTO `score` VALUES (\'20\', \'7\', \'2\', \'76\');
INSERT INTO `score` VALUES (\'21\', \'7\', \'3\', \'65\');
INSERT INTO `score` VALUES (\'22\', \'8\', \'1\', \'90\');
INSERT INTO `score` VALUES (\'23\', \'8\', \'2\', \'81\');
INSERT INTO `score` VALUES (\'24\', \'8\', \'3\', \'77\');
INSERT INTO `score` VALUES (\'25\', \'9\', \'1\', \'86\');
INSERT INTO `score` VALUES (\'26\', \'9\', \'2\', \'78\');
INSERT INTO `score` VALUES (\'27\', \'9\', \'3\', \'97\');

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(20) DEFAULT NULL,
  `gender` varchar(12) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_s_c` (`class_id`),
  CONSTRAINT `fk_s_c` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (\'1\', \'钢蛋\', \'\', \'1\');
INSERT INTO `student` VALUES (\'2\', \'铁锤\', \'\', \'1\');
INSERT INTO `student` VALUES (\'3\', \'山炮\', \'\', \'2\');
INSERT INTO `student` VALUES (\'4\', \'张三\', \'\', \'3\');
INSERT INTO `student` VALUES (\'5\', \'李四\', \'\', \'2\');
INSERT INTO `student` VALUES (\'6\', \'王五\', \'\', \'3\');
INSERT INTO `student` VALUES (\'7\', \'马六\', \'\', \'1\');
INSERT INTO `student` VALUES (\'8\', \'霍七\', \'\', \'2\');
INSERT INTO `student` VALUES (\'9\', \'贺八\', \'\', \'3\');

-- ----------------------------
-- Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (\'1\', \'波多\');
INSERT INTO `teacher` VALUES (\'2\', \'苍空\');
INSERT INTO `teacher` VALUES (\'3\', \'饭岛\');
创建表(结构)

2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;

思路:
    获取所有有生物课程的人(学号,成绩) - 临时表
    获取所有有物理课程的人(学号,成绩) - 临时表
    根据【学号】连接两个临时表:
        学号 物理成绩 生物成绩       然后再进行筛选
select A.student_id,生物,物理 from
 
        (select student_id,number as 生物 from score left join course on score.corse_id = course.cid where course.cname = \'生物\') as A
 
        left join
 
        (select student_id,number  as 物理 from score left join course on score.corse_id = course.cid where course.cname = \'物理\') as B
 
        on A.student_id = B.student_id where 物理 >  生物 ;       
 
3、查询平均成绩大于60分的同学的学号和平均成绩;
    思路:
        根据学生分组,使用avg获取平均值,通过havingavg进行筛选      
select student_id,avg(number) from score GROUP BY student_id having avg(number)>60;
 
4、查询所有同学的学号、姓名、选课数、总成绩;
SELECT
    score.student_id,
    COUNT(score.corse_id),
    SUM(score.number),
    student.sname
FROM
    score
LEFT JOIN student ON student.sid = score.student_id
GROUP BY
    student_id
 
5、查询姓“李”的老师的个数
    
select COUNT(tid) from teacher where tname LIKE"波%";

select count(1) from (select tid from teacher where tname like \'波%\') as B
6、查询没学过“叶平”老师课的同学的学号、姓名;
    思路:
        先查到“叶平老师”老师教的所有课ID
        获取选过课的所有学生ID
        学生表中筛选 
select * from student where sid not in(
select student_id from score WHERE score.corse_id in(
select cid from course 
LEFT JOIN teacher on teacher.tid = course.teache_id where teacher.tname = "波多"
)
)
7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
    思路:
        先查到既选择001又选择002课程的所有同学
        根据学生进行分组,如果学生数量等于2表示,两门均已选择
 select student_id,sname from
 
    (select student_id,corse_id from score where corse_id = 1 or corse_id = 2) as B
      
    left join student on B.student_id = student.sid group by student_id HAVING count(student_id) = 2
8、查询学过“叶平”老师所教的所有课的同学的学号、姓名; 
select * from student where sid  in(
select student_id from score WHERE score.corse_id in(
select cid from course 
LEFT JOIN teacher on teacher.tid = course.teache_id where teacher.tname = "波多"
)
)
9、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
    
select c.student_id,student.sname from
(select A.student_id,a,b 以上是关于MYSQL 练习的主要内容,如果未能解决你的问题,请参考以下文章

csharp Epicor标准练习片段

golang 去练习片段

部分代码片段

linux中怎么查看mysql数据库版本

ktor HTTP API 练习

从mysql的片段中加载ListView