子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询。
先做一下数据准备,这边建立三张表:班级、学生、毕业成绩表,用于后面的操作:
1 drop database if exists `Helenlyn_Class`; 2 create database `Helenlyn_Class`; 3 4 /*班级表*/ 5 DROP TABLE IF EXISTS `classes`; 6 CREATE TABLE `classes` ( 7 `classid` int primary key AUTO_INCREMENT comment '班级id', 8 `classname` varchar(30) DEFAULT NULL comment '班级名称' 9 ) ENGINE=InnoDB comment '班级表'; 10 11 insert into `classes`(`classname`) 12 values ('初三一班'),('初三二班'),('初三三班'); 13 14 /*学生表:这边假设学生id和姓名都具有唯一性*/ 15 16 DROP TABLE IF EXISTS `students`; 17 CREATE TABLE `students` ( 18 `studentid` int primary key NOT NULL AUTO_INCREMENT comment '学生id', 19 `studentname` varchar(20) DEFAULT NULL comment '学生姓名', 20 `score` DECIMAL(10,2) DEFAULT NULL comment '毕业成绩', 21 `classid` int(4) DEFAULT NULL comment '所属班级id,来源于classes表的classid' 22 ) ENGINE=InnoDB comment '学生表'; 23 insert into `students`(`studentname`,`score`,`classid`) values 24 ('brand',97.5,1),('helen',96.5,1),('lyn',96,1),('sol',97,1),('weng',100,1),('diny',92.7,1), 25 ('b1',81,2),('b2',82,2),('b3',83,2),('b4',84,2),('b5',85,2),('b6',86,2), 26 ('c1',71,3),('c2',72.5,3),('c3',73,3),('c4',74,3),('c5',75,3),('c6',76,3); 27 28 29 /*毕业考核分数排名表*/ 30 DROP TABLE IF EXISTS `scores`; 31 CREATE TABLE `scores`( 32 `scoregrad` varchar(3) primary key comment '等级:S、A、B、C、D', 33 `downset` int comment '分数评级下限', 34 `upset` int comment '分数评级上限' 35 ) comment '毕业考核分数排名表'; 36 INSERT INTO `scores` values ('S', 91, 100),('A', 81, 90),('B', 71, 80),('C', 61, 70),('D', 51,60);