准备数据
-- use Stds;-- CREATE TABLE Student(-- s_id VARCHAR(20),-- s_name VARCHAR(20) NOT NULL DEFAULT'',-- s_birth VARCHAR(20) NOT NULL DEFAULT'',-- s_sex VARCHAR(10) NOT NULL DEFAULT'',-- PRIMARY KEY(s_id)-- );-- CREATE TABLE `Course`(-- `c_id` VARCHAR(20),-- `c_name` VARCHAR(20) NOT NULL DEFAULT '',-- `t_id` VARCHAR(20) NOT NULL,-- PRIMARY KEY(`c_id`)-- );-- CREATE TABLE `Teacher`(-- `t_id` VARCHAR(20),-- `t_name` VARCHAR(20) NOT NULL DEFAULT'',-- PRIMARY KEY(`t_id`)-- );-- CREATE TABLE `Score`(-- `s_id` VARCHAR(20),-- `c_id` VARCHAR(20),-- `s_score` INT(3),-- PRIMARY KEY(`s_id`,`c_id`)-- );-- insert into Student values('01','赵擂','1990-01-01','男');-- insert into Student values('02','钱电','1990-12-21','男');-- insert into Student values('03','孙风','1990-05-20','男');-- insert into Student values('04','李云','1990-08-06','男');-- insert into Student values('05','周梅','1991-12-01','女');-- insert into Student values('06','吴兰','1992-03-01','女');-- insert into Student values('07','郑竹','1989-07-01','女');-- insert into Student values('08','王菊','1990-01-20','女');-- -- insert into Course values('01','语文','02');-- insert into Course values('02','数学','01');-- insert into Course values('03','英语','03');-- insert into Teacher values('01','张三');-- insert into Teacher values('02','李四');-- insert into Teacher values('03','王五');-- insert into Score values('01','01',80);-- insert into Score values('01','02',90);-- insert into Score values('01','03',99);-- insert into Score values('02','01',70);-- insert into Score values('02','02',60);-- insert into Score values('02','03',80);-- insert into Score values('03','01',80);-- insert into Score values('03','02',80);-- insert into Score values('03','03',80);-- insert into Score values('04','01',50);-- insert into Score values('04','02',30);-- insert into Score values('04','03',20);-- insert into Score values('05','01',76);-- insert into Score values('05','02',87);-- insert into Score values('06','01',31);-- insert into Score values('06','03',34);-- insert into Score values('07','02',89);-- insert into Score values('07','03',98);
-- 1.查询01课程比02课程成绩高的学生的信息及课程分数select a.*,b.s_score as 01_score,c.s_score as 02_score fromStudent ajoin Score b on a.s_id=b.s_id and b.c_id='01'left join Score c on a.s_id=c.s_id and c.c_id='02' or c.c_id=NULL where b.s_score>c.s_score;# Student下所有列,Score下的成绩列s_score作为01_score Scores下的s_score列作为02_score# join 设置子查询条件 Student的id与Score的id相同并c_id为01# left join 关联查询 Student的id与Score的id相同并c_id为02 或者 Score的c_id为空 score大于-- 2.查询01课程比02课程成绩低的学生的信息及课程分数select a.*,b.s_score as 01_score,c.s_score as 02_score fromStudent aleft join Score b on a.s_id=b.s_id and b.c_id='01' or b.c_id=Nulljoin Score c on a.s_id=b.s_id and c.c_id='02' where b.s_score<c.s_score;-- 3.查询平均成绩大于等于60分的同学编号和学生姓名和平均成绩select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score fromStudent bjoin Score a on b.s_id = a.s_idGROUP BY b.s_id,b.s_name HAVING avg_score>=60;# 四舍五入(求成绩平均数,取后两位)# 成绩表和学生表id相同的# 对查询信息进行分组 成绩表中的id和名称 筛选出 平均数大于60的-- 4.查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score from Student bleft join Score a on b.s_id = a.s_idGROUP BY b.s_id ,b.s_name HAVING avg_score<60unionselect a.s_id,a.s_name ,0 as avg_score fromStudent awhere a.s_id not in(select DISTINCT s_id from Score);-- 5.查询所有学生的编号,姓名,选课总数,所有课程的总成绩。SELECT a.s_id,a.s_name,count(b.c_id)as sum_course,sum(b.s_score)as sum_score from Student aleft join Score b on a.s_id=b.s_idGROUP BY a.s_id,a.s_name;-- 6.查询李姓老师的数量select count(t_id) from Teacher where t_name like '李%';-- 7.查询学过“张三”老师授课的同学信息select a.* fromStudent ajoin Score b on a.s_id=b.s_id where b.c_id in( select c_id from Course where t_id = ( select t_id from Teacher where t_name='张三' ));-- 8.查询没学过"张三"老师授课的同学的信息select * from Student c where c.s_id not in( select a.s_id from Student a join Score b on a.s_id=b.s_id where b.s_id in( select c_id from Course where t_id=( select t_id from Teacher where t_name = '张三' ) ) );-- 9.查询学过编号为01并且学过编号为02的课程的同学的信息select a.* from Student a,Score b,Score c where a.s_id=b.s_id and a.s_id = c.s_id and b.c_id='01' and c.c_id='02';-- 10.查询学过编号为01 但是没有学过编号为02的课程的同学的信息select a.* fromStudent awhere a.s_id in(select s_id from Score where c_id='01') and a.s_id not in(select s_id from Score Where c_id='02');