MySQL 经典练习 50 题(完美解答版)

MySQL学习:50道经典题目(含参考答案)(更新中) 首先根据course_id将成绩表分为两张表,筛选出" 1 "课程比" 2 "课程成绩高的学生,再与学生表关联。1. 查询" 1 "课程比" 2 "课程成绩高的学生的信息(学号、姓名、性别、出生日期)及课程分数。利用自连接,统计比当前分数高的分数有几个,排名就是几加1。使用case when语句,多个排序条件时用逗号分隔。利用课程数量,计算出所有课程数和每个学生的选课数量。先筛选与" 1 "号同学选课数量相同的同学,再剔除。10. 查询没有学全所有课程的同学的信息。选了" 1 "号同学没选的课的同学。 阅读详情
AI摘要

本文提供了MySQL数据库的50道经典习题解答,涵盖学生、课程、教师和成绩表的复杂查询,包括成绩对比、平均分计算、课程统计、学生信息筛选等,适合初学者和进阶者练习。

MySQL 经典练习 50 题(完美解答版)

创建数据库和表

 

数据库

drop database if exists mysql_test cascade;
create database mysql_test;
use mysql_test;

 

学生表 student

创建学生表 student

create table student (
	s_id int,
	s_name varchar(8),
	s_birth date,
	s_sex varchar(4)
);

插入学生数据

insert into student values
(1,'赵雷','1990-01-01','男'),
(2,'钱电','1990-12-21','男'),
(3,'孙风','1990-05-20','男'),
(4,'李云','1990-08-06','男'),
(5,'周梅','1991-12-01','女'),
(6,'吴兰','1992-03-01','女'),
(7,'郑竹','1989-07-01','女'),
(8,'王菊','1990-01-20','女');

 

课程表 course

创建课程表 course

create table course (
	c_id int,
	c_name varchar(8),
	t_id int
);

插入课程数据

insert into course values
(1,'语文',2),
(2,'数学',1),
(3,'英语',3);

 

教师表 teacher

创建教师表 teacher

create table teacher (
	t_id int,
	t_name varchar(8)
);

插入教师数据

insert into teacher values
(1,'张三'),
(2,'李四'),
(3,'王五');

 

成绩表 score

创建成绩表 score

create table score (
	s_id int,
	c_id int,
	s_score int
);

插入成绩数据

insert into score values
(1,1,80),
(1,2,90),
(1,3,99),
(2,1,70),
(2,2,60),
(2,3,65),
(3,1,80),
(3,2,80),
(3,3,80),
(4,1,50),
(4,2,30),
(4,3,40),
(5,1,76),
(5,2,87),
(6,1,31),
(6,3,34),
(7,2,89),
(7,3,98);

 

表关系

在这里插入图片描述
 

经典练习 50 题

 

1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数

select s.*,sc1.s_score as score_01,sc2.s_score as score_02
from student s
inner join (
	select * from score where c_id = 1
) sc1
on s.s_id = sc1.s_id
inner join (
	select * from score where c_id = 2
) sc2
on s.s_id = sc2.s_id
where sc1.s_score > sc2.s_score;
+------+--------+------------+-------+----------+----------+
| s_id | s_name | s_birth    | s_sex | score_01 | score_02 |
+------+--------+------------+-------+----------+----------+
|    2 | 钱电   | 1990-12-21 | 男    |       70 |       60 |
|    4 | 李云   | 1990-08-06 | 男    |       50 |       30 |
+------+--------+------------+-------+----------+----------+

 

2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数

select s.*,sc1.s_score as score_01,sc2.s_score as score_02
from student s
inner join (
	select * from score where c_id = 1
) sc1
on s.s_id = sc1.s_id
inner join (
	select * from score where c_id = 2
) sc2
on s.s_id = sc2.s_id
where sc1.s_score < sc2.s_score;
+------+--------+------------+-------+----------+----------+
| s_id | s_name | s_birth    | s_sex | score_01 | score_02 |
+------+--------+------------+-------+----------+----------+
|    1 | 赵雷   | 1990-01-01 | 男    |       80 |       90 |
|    5 | 周梅   | 1991-12-01 | 女    |       76 |       87 |
+------+--------+------------+-------+----------+----------+

 

3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

select s.s_id,s.s_name,round(avg_score, 2) as avg_score
from student s
inner join (
	select s_id,avg(s_score) as avg_score
	from score
	group by s_id
	having avg_score >= 60
) t1
on s.s_id = t1.s_id;
+------+--------+-----------+
| s_id | s_name | avg_score |
+------+--------+-----------+
|    1 | 赵雷   | 89.67     |
|    2 | 钱电   | 65.00     |
|    3 | 孙风   | 80.00     |
|    5 | 周梅   | 81.50     |
|    7 | 郑竹   | 93.50     |
+------+--------+-----------+

 

4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无成绩的)

select s.s_id,s.s_name,ifnull(round(avg_score, 2), 0) as avg_score
from student s
left join (
	select s_id,avg(s_score) as avg_score
	from score
	group by s_id
) t1
on s.s_id = t1.s_id
where avg_score is null or avg_score < 60;
+------+--------+-----------+
| s_id | s_name | avg_score |
+------+--------+-----------+
|    4 | 李云   | 40.00     |
|    6 | 吴兰   | 32.50     |
|    8 | 王菊   | 0.00      |
+------+--------+-----------+

 

5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

select s.s_id,s.s_name,ifnull(cnt_course, 0) as cnt_course,ifnull(sum_score, 0) as sum_score
from student s
left join (
	select s_id,count(*) as cnt_course,sum(s_score) as sum_score
	from score
	group by s_id
) t1
on s.s_id = t1.s_id;
+------+--------+------------+-----------+
| s_id | s_name | cnt_course | sum_score |
+------+--------+------------+-----------+
|    1 | 赵雷   |          3 | 269       |
|    2 | 钱电   |          3 | 195       |
|    3 | 孙风   |          3 | 240       |
|    4 | 李云   |          3 | 120       |
|    5 | 周梅   |          2 | 163       |
|    6 | 吴兰   |          2 | 65        |
|    7 | 郑竹   |          2 | 187       |
|    8 | 王菊   |          0 | 0         |
+------+--------+------------+-----------+

 

6、查询"李"姓老师的数量

select count(*) as cnt_name_li
from teacher
where t_name like '李%';
+-------------+
| cnt_name_li |
+-------------+
|           1 |
+-------------+

 

7、询学过"张三"老师授课的同学的信息

select s.*
from student s
where s_id in (
	select distinct s_id
	from score sc
	inner join (
		select c_id
		from course c
		inner join teacher t on c.t_id = t.t_id
		where t_name = '张三'
	) t1
	on sc.c_id = t1.c_id
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    1 | 赵雷   | 1990-01-01 | 男    |
|    2 | 钱电   | 1990-12-21 | 男    |
|    3 | 孙风   | 1990-05-20 | 男    |
|    4 | 李云   | 1990-08-06 | 男    |
|    5 | 周梅   | 1991-12-01 | 女    |
|    7 | 郑竹   | 1989-07-01 | 女    |
+------+--------+------------+-------+

 

8、查询没学过"张三"老师授课的同学的信息

select s.*
from student s
where s_id not in (
	select distinct s_id
	from score sc
	inner join (
		select c_id
		from course c
		inner join teacher t on c.t_id = t.t_id
		where t_name = '张三'
	) t1
	on sc.c_id = t1.c_id
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    6 | 吴兰   | 1992-03-01 | 女    |
|    8 | 王菊   | 1990-01-20 | 女    |
+------+--------+------------+-------+

 

9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

select s.*
from student s
where s_id in (
	select s_id
	from score
	where c_id in (1,2)
	group by s_id
	having count(*) = 2
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    1 | 赵雷   | 1990-01-01 | 男    |
|    2 | 钱电   | 1990-12-21 | 男    |
|    3 | 孙风   | 1990-05-20 | 男    |
|    4 | 李云   | 1990-08-06 | 男    |
|    5 | 周梅   | 1991-12-01 | 女    |
+------+--------+------------+-------+

 

10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

select s.*
from student s
where s_id in (
	select s_id
	from score
	where c_id = 1
	and s_id not in (
		select s_id from score where c_id = 2
	)
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    6 | 吴兰   | 1992-03-01 | 女    |
+------+--------+------------+-------+

 

11、查询没有学全所有课程的同学的信息

select *
from student
where s_id not in (
	select s_id
	from score
	group by s_id
	having count(*) = (
		select count(*) from course
	)
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    5 | 周梅   | 1991-12-01 | 女    |
|    6 | 吴兰   | 1992-03-01 | 女    |
|    7 | 郑竹   | 1989-07-01 | 女    |
|    8 | 王菊   | 1990-01-20 | 女    |
+------+--------+------------+-------+

 

12、查询至少有一门课与学号为"01"的同学所学相同的同学的信息

select *
from student
where s_id in (
	select distinct s_id
	from score s
	inner join (
		select c_id from score where s_id = 1
	) t1
	on s.c_id = t1.c_id
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    1 | 赵雷   | 1990-01-01 | 男    |
|    2 | 钱电   | 1990-12-21 | 男    |
|    3 | 孙风   | 1990-05-20 | 男    |
|    4 | 李云   | 1990-08-06 | 男    |
|    5 | 周梅   | 1991-12-01 | 女    |
|    6 | 吴兰   | 1992-03-01 | 女    |
|    7 | 郑竹   | 1989-07-01 | 女    |
+------+--------+------------+-------+

 

13、查询和"01"号的同学学习的课程完全相同的其他同学的信息

select *
from student
where s_id in (
	 select s_id
	 from score s
	 inner join (
		select c_id from score where s_id = 1
	 ) t1
	 on s.c_id = t1.c_id
	 where s_id != 1
	 group by s_id having count(*) = (
		select count(*) from score where s_id = 1
	 )
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    2 | 钱电   | 1990-12-21 | 男    |
|    3 | 孙风   | 1990-05-20 | 男    |
|    4 | 李云   | 1990-08-06 | 男    |
+------+--------+------------+-------+

 

14、查询没学过"张三"老师讲授的任一门课程的学生姓名

select s_name
from student
where s_id not in (
	select s_id
	from score sc
	inner join (
		select c_id
		from course c
		inner join teacher t on c.t_id = t.t_id
		where t_name = '张三'
	) t1
	on sc.c_id = t1.c_id
);
+--------+
| s_name |
+--------+
| 吴兰   |
| 王菊   |
+--------+

 

15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

select s.s_id,s.s_name,round(avg(s_score), 2) as avg_score
from student s
inner join (
	select s_id
	from score
	where s_score < 60
	group by s_id
	having count(*) >= 2
) t1
on s.s_id = t1.s_id
inner join score sc on s.s_id = sc.s_id
group by s.s_id;
+------+--------+-----------+
| s_id | s_name | avg_score |
+------+--------+-----------+
|    4 | 李云   | 40.00     |
|    6 | 吴兰   | 32.50     |
+------+--------+-----------+

 

16、检索"01"课程分数小于60,按分数降序排列的学生信息

select s.*,s_score as score_01
from student s
inner join (
	select s_id,s_score
	from score
	where c_id = 1
	and s_score < 60
) t1
on s.s_id = t1.s_id
order by score_01 desc;
+------+--------+------------+-------+----------+
| s_id | s_name | s_birth    | s_sex | score_01 |
+------+--------+------------+-------+----------+
|    4 | 李云   | 1990-08-06 | 男    |       50 |
|    6 | 吴兰   | 1992-03-01 | 女    |       31 |
+------+--------+------------+-------+----------+

 

17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

select
	s.s_id as 学号,s.s_name as 姓名,
	sum(case c_id when 1 then s_score else 0 end) as 语文,
	sum(case c_id when 2 then s_score else 0 end) as 数学,
	sum(case c_id when 3 then s_score else 0 end) as 英语,
	ifnull(round(avg(s_score), 2), 0) as 平均成绩
from student s
left join score sc on s.s_id = sc.s_id
group by s.s_id
order by 平均成绩 desc;
+------+------+------+------+------+----------+
| 学号 | 姓名 | 语文 | 数学 | 英语 | 平均成绩 |
+------+------+------+------+------+----------+
|    7 | 郑竹 | 0    | 89   | 98   | 93.50    |
|    1 | 赵雷 | 80   | 90   | 99   | 89.67    |
|    5 | 周梅 | 76   | 87   | 0    | 81.50    |
|    3 | 孙风 | 80   | 80   | 80   | 80.00    |
|    2 | 钱电 | 70   | 60   | 65   | 65.00    |
|    4 | 李云 | 50   | 30   | 40   | 40.00    |
|    6 | 吴兰 | 31   | 0    | 34   | 32.50    |
|    8 | 王菊 | 0    | 0    | 0    | 0.00     |
+------+------+------+------+------+----------+

 

18、查询各科成绩最高分、最低分和平均分,以如下形式显示:

课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
– 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

select
    c.c_id as 课程ID,c.c_name as 课程name,
	max(s_score) as 最高分,
	min(s_score) as 最低分,
	round(avg(s_score), 2) as 平均分,
	concat(round(sum(case when s_score >= 60 then 1 else 0 end) / count(*) * 100, 2), '%') as 及格率,
	concat(round(sum(case when s_score between 70 and 80 then 1 else 0 end) / count(*) * 100, 2), '%') as 中等率,
	concat(round(sum(case when s_score between 80 and 90 then 1 else 0 end) / count(*) * 100, 2), '%') as 优良率,
	concat(round(sum(case when s_score >= 90 then 1 else 0 end) / count(*) * 100, 2), '%') as 优秀率
from course c
inner join score s on c.c_id = s.c_id
group by c.c_id;
+--------+----------+--------+--------+--------+--------+--------+--------+--------+
| 课程ID | 课程name | 最高分 | 最低分 | 平均分 | 及格率 | 中等率 | 优良率 | 优秀率 |
+--------+----------+--------+--------+--------+--------+--------+--------+--------+
|      1 | 语文     |     80 |     31 | 64.50  | 66.67% | 66.67% | 33.33% | 0.00%  |
|      2 | 数学     |     90 |     30 | 72.67  | 83.33% | 16.67% | 66.67% | 16.67% |
|      3 | 英语     |     99 |     34 | 69.33  | 66.67% | 16.67% | 16.67% | 33.33% |
+--------+----------+--------+--------+--------+--------+--------+--------+--------+

 

19、按各科成绩进行排序,并显示排名

select
	(@i := case when @pre_group_id = c_id then @i + 1 else 1 end) as rank,
	(@pre_group_id := c_id) as c_id,
	c_name,s_id,s_name,s_score
from (select @i := 0, @pre_group_id := 1) var
cross join (
	select c.c_id,c.c_name,s.s_id,s.s_name,s_score
	from score sc
	inner join student s on sc.s_id = s.s_id
	inner join course c on sc.c_id = c.c_id
	group by c.c_id,s.s_id
	order by c.c_id,s_score desc
) t1;
+------+------+--------+------+--------+---------+
| rank | c_id | c_name | s_id | s_name | s_score |
+------+------+--------+------+--------+---------+
|    1 |    1 | 语文   |    1 | 赵雷   |      80 |
|    2 |    1 | 语文   |    3 | 孙风   |      80 |
|    3 |    1 | 语文   |    5 | 周梅   |      76 |
|    4 |    1 | 语文   |    2 | 钱电   |      70 |
|    5 |    1 | 语文   |    4 | 李云   |      50 |
|    6 |    1 | 语文   |    6 | 吴兰   |      31 |
|    1 |    2 | 数学   |    1 | 赵雷   |      90 |
|    2 |    2 | 数学   |    7 | 郑竹   |      89 |
|    3 |    2 | 数学   |    5 | 周梅   |      87 |
|    4 |    2 | 数学   |    3 | 孙风   |      80 |
|    5 |    2 | 数学   |    2 | 钱电   |      60 |
|    6 |    2 | 数学   |    4 | 李云   |      30 |
|    1 |    3 | 英语   |    1 | 赵雷   |      99 |
|    2 |    3 | 英语   |    7 | 郑竹   |      98 |
|    3 |    3 | 英语   |    3 | 孙风   |      80 |
|    4 |    3 | 英语   |    2 | 钱电   |      65 |
|    5 |    3 | 英语   |    4 | 李云   |      40 |
|    6 |    3 | 英语   |    6 | 吴兰   |      34 |
+------+------+--------+------+--------+---------+

 

20、查询学生的总成绩并进行排名

select (@i := @i + 1) as rank,t2.*
from (select  @i := 0) var
cross join (
	select s.s_id,s.s_name,sum_score
	from student s
	inner join (
		select s_id,sum(s_score) as sum_score
		from score
		group by s_id
	) t1
	on s.s_id = t1.s_id
	order by sum_score desc
) t2;
+------+------+--------+-----------+
| rank | s_id | s_name | sum_score |
+------+------+--------+-----------+
|    1 |    1 | 赵雷   | 269       |
|    2 |    3 | 孙风   | 240       |
|    3 |    2 | 钱电   | 195       |
|    4 |    7 | 郑竹   | 187       |
|    5 |    5 | 周梅   | 163       |
|    6 |    4 | 李云   | 120       |
|    7 |    6 | 吴兰   | 65        |
+------+------+--------+-----------+

 

21、查询不同老师所教不同课程平均分从高到低显示

select t.t_id,t.t_name,c.c_id,c.c_name,round(avg(s_score), 2) as avg_score
from score sc
inner join course c on sc.c_id = c.c_id
inner join teacher t on t.t_id = c.t_id
group by t.t_id,c.c_id
order by t.t_id,avg_score desc;
+------+--------+------+--------+-----------+
| t_id | t_name | c_id | c_name | avg_score |
+------+--------+------+--------+-----------+
|    1 | 张三   |    2 | 数学   | 72.67     |
|    2 | 李四   |    1 | 语文   | 64.50     |
|    3 | 王五   |    3 | 英语   | 69.33     |
+------+--------+------+--------+-----------+

 

22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

select *
from (
	select
		(@i := case when @pre_group_id = c_id then @i + 1 else 1 end) as rank,
		(@pre_group_id := c_id) as c_id,
		c_name,s_id,s_name,s_birth,s_sex,s_score
	from (select @i := 0, @pre_group_id := 1) var
	cross join (
		select c.c_id,c.c_name,s.*,s_score
		from score sc
		inner join student s on sc.s_id = s.s_id
		inner join course c on sc.c_id = c.c_id
		group by c.c_id,s.s_id
		order by c.c_id,s_score desc
	) t1
) t2
where rank in (2,3);
+------+------+--------+------+--------+------------+-------+---------+
| rank | c_id | c_name | s_id | s_name | s_birth    | s_sex | s_score |
+------+------+--------+------+--------+------------+-------+---------+
|    2 |    1 | 语文   |    3 | 孙风   | 1990-05-20 | 男    |      80 |
|    3 |    1 | 语文   |    5 | 周梅   | 1991-12-01 | 女    |      76 |
|    2 |    2 | 数学   |    7 | 郑竹   | 1989-07-01 | 女    |      89 |
|    3 |    2 | 数学   |    5 | 周梅   | 1991-12-01 | 女    |      87 |
|    2 |    3 | 英语   |    7 | 郑竹   | 1989-07-01 | 女    |      98 |
|    3 |    3 | 英语   |    3 | 孙风   | 1990-05-20 | 男    |      80 |
+------+------+--------+------+--------+------------+-------+---------+

 

23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比

select
	c.c_id as 课程编号,c.c_name as 课程名称,
	sum(case when s_score between 85 and 100 then 1 else 0 end) as '[100-85]',
	concat(round(sum(case when s_score between 85 and 100 then 1 else 0 end) / count(*) * 100, 2), '%') as 百分比,
	sum(case when s_score between 70 and 85 then 1 else 0 end) as '[85-70]',
	concat(round(sum(case when s_score between 70 and 85 then 1 else 0 end) / count(*) * 100, 2), '%') as 百分比,
	sum(case when s_score between 60 and 70 then 1 else 0 end) as '[70-60]',
	concat(round(sum(case when s_score between 60 and 70 then 1 else 0 end) / count(*) * 100, 2), '%') as 百分比,
	sum(case when s_score between 0 and 60 then 1 else 0 end) as '[0-60]',
	concat(round(sum(case when s_score between 0 and 60 then 1 else 0 end) / count(*) * 100, 2), '%') as 百分比
from course c
inner join score sc
on c.c_id = sc.c_id
group by c.c_id;
+----------+----------+----------+--------+---------+--------+---------+--------+--------+--------+
| 课程编号 | 课程名称 | [100-85] | 百分比 | [85-70] | 百分比 | [70-60] | 百分比 | [0-60] | 百分比 |
+----------+----------+----------+--------+---------+--------+---------+--------+--------+--------+
|        1 | 语文     | 0        | 0.00%  | 4       | 66.67% | 1       | 16.67% | 2      | 33.33% |
|        2 | 数学     | 3        | 50.00% | 1       | 16.67% | 1       | 16.67% | 2      | 33.33% |
|        3 | 英语     | 2        | 33.33% | 1       | 16.67% | 1       | 16.67% | 2      | 33.33% |
+----------+----------+----------+--------+---------+--------+---------+--------+--------+--------+

 

24、查询学生平均成绩及其名次

select (@i := @i + 1) as rank,t2.*
from (select  @i := 0) var
cross join (
	select s.s_id,s.s_name,avg_score
	from student s
	inner join (
		select s_id,round(avg(s_score), 2) as avg_score
		from score
		group by s_id
	) t1
	on s.s_id = t1.s_id
	order by avg_score desc
) t2;
+------+------+--------+-----------+
| rank | s_id | s_name | avg_score |
+------+------+--------+-----------+
|    1 |    7 | 郑竹   | 93.50     |
|    2 |    1 | 赵雷   | 89.67     |
|    3 |    5 | 周梅   | 81.50     |
|    4 |    3 | 孙风   | 80.00     |
|    5 |    2 | 钱电   | 65.00     |
|    6 |    4 | 李云   | 40.00     |
|    7 |    6 | 吴兰   | 32.50     |
+------+------+--------+-----------+

 

25、查询各科成绩前三名的记录

方法 1:内外关联

select c.c_id,c.c_name,s.s_id,s.s_name,s_score
from (
	select *
	from score sc
	where (
		select count(*)
		from score sc1
		where sc.c_id = sc1.c_id
		and sc.s_score < sc1.s_score
	) < 3
)
t1
inner join student s on t1.s_id = s.s_id 
inner join course c on t1.c_id = c.c_id 
order by c.c_id,s_score desc;
+------+--------+------+--------+---------+
| c_id | c_name | s_id | s_name | s_score |
+------+--------+------+--------+---------+
|    1 | 语文   |    1 | 赵雷   |      80 |
|    1 | 语文   |    3 | 孙风   |      80 |
|    1 | 语文   |    5 | 周梅   |      76 |
|    2 | 数学   |    1 | 赵雷   |      90 |
|    2 | 数学   |    7 | 郑竹   |      89 |
|    2 | 数学   |    5 | 周梅   |      87 |
|    3 | 英语   |    1 | 赵雷   |      99 |
|    3 | 英语   |    7 | 郑竹   |      98 |
|    3 | 英语   |    3 | 孙风   |      80 |
+------+--------+------+--------+---------+

方法 2:序号筛选

select *
from (
	select
		(@i := case when @pre_group_id = c_id then @i + 1 else 1 end) as rank,
		(@pre_group_id := c_id) as c_id,
		c_name,s_id,s_name,s_score
	from (select @i := 0, @pre_group_id := 1) var
	cross join (
		select c.c_id,c.c_name,s.s_id,s.s_name,s_score
		from score sc
		inner join student s on sc.s_id = s.s_id
		inner join course c on sc.c_id = c.c_id
		group by c.c_id,s.s_id
		order by c.c_id,s_score desc
	) t1
) t2
where rank <= 3;
+------+------+--------+------+--------+---------+
| rank | c_id | c_name | s_id | s_name | s_score |
+------+------+--------+------+--------+---------+
|    1 |    1 | 语文   |    1 | 赵雷   |      80 |
|    2 |    1 | 语文   |    3 | 孙风   |      80 |
|    3 |    1 | 语文   |    5 | 周梅   |      76 |
|    1 |    2 | 数学   |    1 | 赵雷   |      90 |
|    2 |    2 | 数学   |    7 | 郑竹   |      89 |
|    3 |    2 | 数学   |    5 | 周梅   |      87 |
|    1 |    3 | 英语   |    1 | 赵雷   |      99 |
|    2 |    3 | 英语   |    7 | 郑竹   |      98 |
|    3 |    3 | 英语   |    3 | 孙风   |      80 |
+------+------+--------+------+--------+---------+

 

26、查询每门课程被选修的学生数

select c.c_id,c.c_name,cnt_student
from course c
inner join (
	select c_id,count(*) as cnt_student
	from score
	group by c_id
) t1
on c.c_id = t1.c_id;
+------+--------+-------------+
| c_id | c_name | cnt_student |
+------+--------+-------------+
|    1 | 语文   |           6 |
|    2 | 数学   |           6 |
|    3 | 英语   |           6 |
+------+--------+-------------+

 

27、查询出只有两门课程的全部学生的学号和姓名

select s_id,s_name
from student
where s_id in (
	select s_id
	from score
	group by s_id
	having count(*) = 2
);
+------+--------+
| s_id | s_name |
+------+--------+
|    5 | 周梅   |
|    6 | 吴兰   |
|    7 | 郑竹   |
+------+--------+

 

28、查询男生、女生人数

select s_sex,count(*) as cnt_sex
from student
group by s_sex;
+-------+---------+
| s_sex | cnt_sex |
+-------+---------+
| 女    |       4 |
| 男    |       4 |
+-------+---------+

 

29、查询名字中含有"风"字的学生信息

select *
from student
where s_name like '%风%';
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    3 | 孙风   | 1990-05-20 | 男    |
+------+--------+------------+-------+

 

30、查询同名同性学生名单,并统计同名人数

select *,count(*) as cnt_student
from student
group by s_name,s_sex
having cnt_student > 1;
+-----------+
| Empty set |
+-----------+

 

31、查询1990年出生的学生名单

select *
from student
where year(s_birth) = '1990';
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    1 | 赵雷   | 1990-01-01 | 男    |
|    2 | 钱电   | 1990-12-21 | 男    |
|    3 | 孙风   | 1990-05-20 | 男    |
|    4 | 李云   | 1990-08-06 | 男    |
|    8 | 王菊   | 1990-01-20 | 女    |
+------+--------+------------+-------+

 

32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

select c.c_id,c.c_name,avg_score
from course c
inner join (
	select c_id,round(avg(s_score), 2) as avg_score
	from score
	group by c_id
) t1
on c.c_id = t1.c_id
order by avg_score desc,c.c_id;
+------+--------+-----------+
| c_id | c_name | avg_score |
+------+--------+-----------+
|    2 | 数学   | 72.67     |
|    3 | 英语   | 69.33     |
|    1 | 语文   | 64.50     |
+------+--------+-----------+

 

33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

select s.s_id,s.s_name,avg_score
from student s
inner join (
	select s_id,round(avg(s_score), 2) as avg_score
	from score
	group by s_id
	having avg_score >= 85
) t1
on s.s_id = t1.s_id;
+------+--------+-----------+
| s_id | s_name | avg_score |
+------+--------+-----------+
|    1 | 赵雷   | 89.67     |
|    7 | 郑竹   | 93.50     |
+------+--------+-----------+

 

34、查询课程名称为"数学",且分数低于60的学生姓名和分数

select s_name,s_score
from student s
inner join (
	select s_id,s_score
	from score sc
	inner join course c on sc.c_id = c.c_id
	where c_name = '数学'
	and s_score < 60
) t1
on s.s_id = t1.s_id;
+--------+---------+
| s_name | s_score |
+--------+---------+
| 李云   |      30 |
+--------+---------+

 

35、查询所有学生的课程及分数情况

select
	s.s_id,s.s_name,
	sum(case c_id when 1 then s_score else 0 end) as 语文,
	sum(case c_id when 2 then s_score else 0 end) as 数学,
	sum(case c_id when 3 then s_score else 0 end) as 英语
from student s
left join score sc on s.s_id = sc.s_id
group by s.s_id;
+------+--------+------+------+------+
| s_id | s_name | 语文 | 数学 | 英语 |
+------+--------+------+------+------+
|    1 | 赵雷   | 80   | 90   | 99   |
|    2 | 钱电   | 70   | 60   | 65   |
|    3 | 孙风   | 80   | 80   | 80   |
|    4 | 李云   | 50   | 30   | 40   |
|    5 | 周梅   | 76   | 87   | 0    |
|    6 | 吴兰   | 31   | 0    | 34   |
|    7 | 郑竹   | 0    | 89   | 98   |
|    8 | 王菊   | 0    | 0    | 0    |
+------+--------+------+------+------+

 

36、查询任何一门课程成绩在70分以上的学生姓名、课程名称和分数

select s_name,c_name,s_score
from score sc
inner join student s on sc.s_id =  s.s_id
inner join course c on sc.c_id = c.c_id
where s_score > 70
group by s.s_id;
+--------+--------+---------+
| s_name | c_name | s_score |
+--------+--------+---------+
| 赵雷   | 语文   |      80 |
| 孙风   | 语文   |      80 |
| 周梅   | 语文   |      76 |
| 郑竹   | 数学   |      89 |
+--------+--------+---------+

 

37、查询课程不及格的学生

select s.s_id,s.s_name,c.c_id,c.c_name,s_score
from score sc
inner join student s on sc.s_id =  s.s_id
inner join course c on sc.c_id = c.c_id
where s_score < 60;
+------+--------+------+--------+---------+
| s_id | s_name | c_id | c_name | s_score |
+------+--------+------+--------+---------+
|    4 | 李云   |    1 | 语文   |      50 |
|    4 | 李云   |    2 | 数学   |      30 |
|    4 | 李云   |    3 | 英语   |      40 |
|    6 | 吴兰   |    1 | 语文   |      31 |
|    6 | 吴兰   |    3 | 英语   |      34 |
+------+--------+------+--------+---------+

 

38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名

select s.s_id,s.s_name
from student s
where s_id in (
	select s_id
	from score
	where c_id = 1
	and s_score >= 80
);
+------+--------+
| s_id | s_name |
+------+--------+
|    1 | 赵雷   |
|    3 | 孙风   |
+------+--------+

 

39、求每门课程的学生人数

select c.c_id,c.c_name,cnt_student
from course c
inner join (
	select c_id,count(*) as cnt_student
	from score
	group by c_id
) t1
on c.c_id = t1.c_id;
+------+--------+-------------+
| c_id | c_name | cnt_student |
+------+--------+-------------+
|    1 | 语文   |           6 |
|    2 | 数学   |           6 |
|    3 | 英语   |           6 |
+------+--------+-------------+

 

40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩

select s.*,s_score as max_score
from student s
inner join (
	select s_id,s_score
	from score sc
	inner join (
		select c_id
		from course c
		inner join teacher t on c.t_id = t.t_id
		where t_name = '张三'
	) t1
	on sc.c_id = t1.c_id
	order by s_score desc
	limit 1
) t2
on s.s_id = t2.s_id;
+------+--------+------------+-------+-----------+
| s_id | s_name | s_birth    | s_sex | max_score |
+------+--------+------------+-------+-----------+
|    1 | 赵雷   | 1990-01-01 | 男    |        90 |
+------+--------+------------+-------+-----------+

 

41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

select *
from score
where s_score in (
	select s_score
	from score
	group by s_score
	having count(*) > 1
);
+------+------+---------+
| s_id | c_id | s_score |
+------+------+---------+
|    1 |    1 |      80 |
|    3 |    1 |      80 |
|    3 |    2 |      80 |
|    3 |    3 |      80 |
+------+------+---------+

 

42、查询每门课程成绩最好的前三名

方法 1:内外关联

select c.c_id,c.c_name,s.s_id,s.s_name,s_score
from (
	select *
	from score sc
	where (
		select count(*)
		from score sc1
		where sc.c_id = sc1.c_id
		and sc.s_score < sc1.s_score
	) < 3
) t1
inner join student s on t1.s_id = s.s_id
inner join course c on t1.c_id = c.c_id
order by c.c_id,s_score desc;
+------+--------+------+--------+---------+
| c_id | c_name | s_id | s_name | s_score |
+------+--------+------+--------+---------+
|    1 | 语文   |    1 | 赵雷   |      80 |
|    1 | 语文   |    3 | 孙风   |      80 |
|    1 | 语文   |    5 | 周梅   |      76 |
|    2 | 数学   |    1 | 赵雷   |      90 |
|    2 | 数学   |    7 | 郑竹   |      89 |
|    2 | 数学   |    5 | 周梅   |      87 |
|    3 | 英语   |    1 | 赵雷   |      99 |
|    3 | 英语   |    7 | 郑竹   |      98 |
|    3 | 英语   |    3 | 孙风   |      80 |
+------+--------+------+--------+---------+

方法 2:序号筛选

select *
from (
	select
		(@i := case when @pre_group_id = c_id then @i + 1 else 1 end) as rank,
		(@pre_group_id := c_id) as c_id,
		c_name,s_id,s_name,s_score
	from (select @i := 0, @pre_group_id := 1) var
	cross join (
		select c.c_id,c.c_name,s.s_id,s.s_name,s_score
		from score sc
		inner join student s on sc.s_id = s.s_id
		inner join course c on sc.c_id = c.c_id
		group by c.c_id,s.s_id
		order by c.c_id,s_score desc
	) t1
) t2
where rank <= 3;
+------+------+--------+------+--------+---------+
| rank | c_id | c_name | s_id | s_name | s_score |
+------+------+--------+------+--------+---------+
|    1 |    1 | 语文   |    1 | 赵雷   |      80 |
|    2 |    1 | 语文   |    3 | 孙风   |      80 |
|    3 |    1 | 语文   |    5 | 周梅   |      76 |
|    1 |    2 | 数学   |    1 | 赵雷   |      90 |
|    2 |    2 | 数学   |    7 | 郑竹   |      89 |
|    3 |    2 | 数学   |    5 | 周梅   |      87 |
|    1 |    3 | 英语   |    1 | 赵雷   |      99 |
|    2 |    3 | 英语   |    7 | 郑竹   |      98 |
|    3 |    3 | 英语   |    3 | 孙风   |      80 |
+------+------+--------+------+--------+---------+

 

43、统计每门课程的学生选修人数(超过5人的课程才统计)

– 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

select c.c_id,cnt_student
from course c
inner join (
	select c_id,count(*) as cnt_student
	from score
	group by c_id
	having cnt_student > 5
) t1
on c.c_id = t1.c_id
order by cnt_student desc,c.c_id;
+------+-------------+
| c_id | cnt_student |
+------+-------------+
|    1 |           6 |
|    2 |           6 |
|    3 |           6 |
+------+-------------+

 

44、检索至少选修两门课程的学生学号

select s_id
from score
group by s_id
having count(*) >= 2;
+------+
| s_id |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
+------+

 

45、查询选修了全部课程的学生信息

select *
from student
where s_id in (
	select s_id
	from score
	group by s_id
	having count(*) = (
		select count(*) from course
	)
);
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    1 | 赵雷   | 1990-01-01 | 男    |
|    2 | 钱电   | 1990-12-21 | 男    |
|    3 | 孙风   | 1990-05-20 | 男    |
|    4 | 李云   | 1990-08-06 | 男    |
+------+--------+------------+-------+

 

46、查询各学生的年龄(周岁)

– 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一

select
	s_id,s_name,s_birth,
	if (
		month(current_date()) < month(s_birth) or (month(current_date()) = month(s_birth) and day(current_date()) < day(s_birth)),
		year(current_date()) - year(s_birth) -1,
		year(current_date()) - year(s_birth)
	)
	as s_age
from student;

 

47、查询本周过生日的学生

select *
from student
where
	datediff(concat(year(current_date()), date_format(s_birth, '-%m-%d')), current_date())
	between 0 and 7
or
	datediff(concat(year(current_date()) + 1, date_format(s_birth, '-%m-%d')), current_date())
	between 0 and 7;

 

48、查询下周过生日的学生

select *
from student
where
	datediff(concat(year(current_date()), date_format(s_birth, '-%m-%d')), current_date())
	between 7 and 14
or
	datediff(concat(year(current_date()) + 1, date_format(s_birth, '-%m-%d')), current_date())
	between 7 and 14;

 

49、查询本月过生日的学生

select *
from student
where month(s_birth) = month(current_date());

 

50、查询12月份过生日的学生

select *
from student
where month(s_birth) = 12;
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
|    2 | 钱电   | 1990-12-21 | 男    |
|    5 | 周梅   | 1991-12-01 | 女    |
+------+--------+------------+-------+
MySQL15道经典练习题 前言:本期博客就不标明目录了,我们直接上题目,这一期内容主要是唤醒哪些沉睡在大家心中的之前的SqlServer与oralc的知识点,以及巩固我们的MySQL,其中较难的知识点可能就是联表了,什么内联,外联,左联右联让人头皮发麻,但是不要慌,跟着小刘的步伐慢慢理清思路首先是我们的建表,这里已经把需要的表的代码都交代上了一共四张表,学生,教师,成绩,课程 然后来看看我们的题目: 接下来就是我们的解题部分:01)查询" 01 "课程比" 02 "成绩高的学生的信息及课程分数 语句: 结果: 02)查询同 阅读详情

相关推荐

工程师整理汇总2020年学习MySQL零基础入门教程全集(附图文详细解答)

MySQL 是一个关系型数据库,使用 SQL 语言进行增删改查操作,目前属于 Oracle 旗下的产品。 MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP、Java 等 Web 开发语言完美配合,非常适合中小型企业作为 Web 数据库(网站数据库)。 这套 MySQL 教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读者快速入门,是你学习 MySQL ...

大数据基础框架学习教程汇集 2007

sql语句练习50题(Mysql版)

表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号 –3.教师表 Teacher(t_id,t_name) –教师编号,教师姓名 –4.成绩表 Score(s_id,c_id,s_scor...

Coder-Wf 4684

MySQL练习题及答案-11页

MySQL练习题及答案

MySQL经典50道练习题及全网最详细解析

MySQL经典50道练习全网最详细解析

hujieliang123的博客 1万+

【matlab】使用alexnet进行特征提取

1.下载alexnet工具箱 在命令栏输入alexnet,若不报错说明已经安装,若出现错误按照提示去下载工具箱; 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/59133-deep-learning-toolbox-model-for-alexnet-network (1)需要先注册(十分简单),登陆,下载; (2)下载完成之后,...

jingjingliang1995的博客 5844

LoRa物联网实战:用新大陆模块打造智能LED呼吸灯(附完整代码解析)

本文详细介绍了如何利用新大陆LoRa模块实现工业级智能LED呼吸灯的设计与开发。通过256级PWM调制的呼吸灯效果,结合LoRa无线控制技术,实现设备状态的可视化反馈和多设备同步控制。文章包含完整的硬件选型、电路设计、算法优化和代码实现,特别适合物联网开发者和硬件工程师参考。

github5actions的博客 85

MySQL必学!!!(练习题50道精选)

数据表介绍–1.学生表--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别–2.课程表--CId 课程编号,Cname 课程名称,TId 教师编号–3.教师表--TId 教师编号,Tname 教师姓名–4.成绩表--SId 学生编号,CId 课程编号,score 分数。

weixin_52263599的博客 9865

String+CytoScape构建PPI网络

1.下载CytoScape Cytoscape是一款专业强大好用的物生信息分析软件,主要达用于专业的研究人员使用,软件主要适用于整合模块化网络和生物科学联系网络图的绘制,支持多种文件格式,导入后就可以直接进行编辑或者分析等操作了,除此之外,软件还提供了强大的编辑工具,支持添加相应的注释信息,软件基于java环境组件打造。 下载地址:https://cytoscape.org/ 因为软件基于java...

xiaobai1_1的博客 1万+

SQL语句练习(全)

查询全体学生的学号与姓名 查询全体学生的学号、姓名、所在系 查询全体学生的详细记录 查询全体学生的姓名及其出生年份 查询全体学生姓名、出生年份和所在院系,要求用小写字母表示系名 查询选修了课程的学生学号 查询计算机科学技术全体学生的名单 查询所有年龄在20岁以下的学生姓名及其年龄 查询考试成绩不及格的学生的学号 查询年龄在20~23(包含20、23)之间的学生姓名、系别和年龄 查询年龄不在20~23岁之间的学生姓名、系别和年龄 查询计算机科学技术系(cs)、数学系(......

weixin_45064346的博客 5488

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

BUCK电路三种工作模式全解析:CCM、BCM、DCM到底怎么选?

本文深入解析BUCK电路的CCM、DCM和BCM三种工作模式,通过对比其电流波形、效率、纹波及环路特性,提供基于计算公式的量化判断方法。文章结合电池供电、高精度模拟等具体应用场景,给出明确的模式选型策略与实战设计指南,帮助工程师根据核心需求做出最优决策。

ee345的博客 484

MySQL 经典练习 50 题(完美解答版,提供解题思路)

为完成以下练习,我们需要创建一个包含学生、课程、教师、成绩信息的数据库,以及对应的4张表。:通过成绩表自连接,分别获取学生的01课程和02课程成绩,再关联学生表筛选符合条件的记录。存储学生的课程成绩,包括学号、课程编号、成绩(可空,代表未选课或未考试)。:筛选成绩<60的记录,按学生分组统计不及格课程数≥2,再计算平均成绩。:先找到01号学生学过的课程,再筛选学过这些课程的其他学生。:先找到学过01课程的学生,再排除学过02课程的学生。:先找到张三教的课程,再筛选这些课程中成绩最高的记录。

记录学习路上的每一个 “啊哈!” 时刻 欢迎交流,共同进步! 2295

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。 那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

努力前行,总会成为自己心中的那道光 6万+

记录MYSQL经典50题练习QA(含如何创建数据库)

没有任何基础的小白可能会对练习前如何创建数据库有疑问。首先,在MYSQL里输入链接里给出的代码,创建总共有四个表score、student、teacher、course。我的第一段代码去掉了cascade,写成了如下所示,其他跟着文章复制粘贴完成→点击运行→左侧刷新数据库,然后就可以看见新数据库创建成功。练习题目如下:数据源于,练题顺序先参考的从易至难更适合我,有助于建立自信心,里面部分题目和数据源不符,于是我在练习的过程中结合数据源进行了适当修改,大部分题目都是适合的。以下是实际练习题目列表。

Ustinian99的博客 729

WPF用户控件间属性传递的艺术

本文详细介绍了WPF中父控件向子控件传递属性的方法。针对常见的绑定失效问题,重点讲解了使用RelativeSource绑定技术,通过指定AncestorType确保正确访问父控件属性。文章通过实例演示了从ParentModel传递属性到ChildUserControl依赖属性的完整实现过程,包括模型定义、XAML结构设计和代码实现。这种方法有效解决了数据上下文混淆问题,为WPF开发中的控件交互提供了可靠解决方案,有助于提升应用的灵活性和可维护性。

2501_90323865的博客 56

5大绝招破解.NET Core本地IP访问难题——为什么你的调试总卡在localhost?

摘要: 本文详解5种本地IP访问.NET Core应用的方法,涵盖基础IP绑定(0.0.0.0)、防火墙配置、IIS Express优化、远程调试及ngrok内网穿透。关键步骤包括修改launchSettings.json、PowerShell授权端口、SSH远程调试和ngrok外网映射,并提示常见陷阱(如未绑定IP、防火墙拦截)。通过“魔法法则”组合,可实现局域网/外网高效访问,适用于开发测试场景。 (字数:148)

java专栏 955

MySQL 50道经典题实战解析:从语法到性能再到业务语义

SQL查询是数据库应用的核心能力,其本质涵盖语法规范、执行计划优化与业务逻辑映射三重维度。理解SELECT、JOIN、子查询等基础语法只是起点,真正挑战在于掌握EXPLAIN执行计划解读、索引失效场景识别及窗口函数等高阶技术;更进一步,需将SQL能力延伸至事务隔离、字符集排序规则、数据一致性校验等生产级工程实践。MySQL经典50题正是覆盖单表查询、多表关联、聚合分组、窗口函数、事务控制与索引优化的全栈训练体系,既适用于新手建立SQL思维框架,也助力中高级工程师突破慢查询、NULL陷阱、时区偏差等真实业务雷

weixin_28339967的博客 175

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MYSQL

mysql经典面试题,mysql8.0(5.8)版本以上作答,运用最新窗口技术

weixin_42669843的博客 189

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MySQL 50题:一张覆盖SQL能力全栈的成长地图

SQL能力成长并非线性积累,而是围绕单表查询、多表关联、聚合统计三大核心能力阶梯式跃迁的过程。理解WHERE与HAVING的本质区别、LEFT JOIN与INNER JOIN的业务语义差异、COUNT(*)与COUNT(字段)对NULL的不同处理逻辑,是构建健壮数据查询能力的基础。这些原理直接决定线上查询是否产生临时表、是否触发文件排序、能否命中索引。尤其在高并发场景下,一个未加COALESCE的AVG()或缺失联合索引的GROUP BY,可能引发慢查询雪崩。本指南以50道经典教务场景题为载体,穿透语法表层

weixin_26765287的博客 197

一次完美的需求评审,让项目效率提升50%

对团队来说,其价值主要体现在对外的交付产出。对一个职能完整的软件研发团队,其价值产出体现在其对外交付的需求上。需求作为团队对外价值衡量,同时也贯穿了团队的整个研发周期。因此交付质量高低,不仅仅是对外体现团队价值,反过来也会影响团队内的协作方向,好的交付会提升团队凝聚力,增强交付信心。其中需求的评审过程是需求从设计到实现的关键节点。一个设计良好,澄清充分的需求内容,能保证实现阶段不会出现偏差,能够做到快速高质量的交付。同时也提升团队内部协作效率。

人生不怕起点低,就怕没追求 1006

MySQL性能优化实战:从执行计划到索引设计

SQL性能优化是数据库工程师的核心能力,其本质在于理解查询执行原理与存储引擎协作机制。MySQL通过解析器、优化器、执行器三层协同完成SQL执行,而Explain执行计划正是窥探这一过程的窗口;索引作为B+树结构的物理加速器,其设计质量直接决定WHERE、JOIN、GROUP BY等操作的效率。掌握最左前缀、覆盖索引、隐式转换避坑等关键技术,可显著降低IO开销与锁竞争,在电商订单同步、实时统计看板等高并发场景中保障QPS与响应稳定性。本文以50道典型业务题为载体,系统拆解MySQL性能调优的工程实践路径。

weixin_32308101的博客 147

“50K,14薪,后端开发挣钱有多野?”

有一句很有意思的话:现在的世界,得数据者得天下。可见数据对于我们、对于企业、对于未来发展来说都十分重要。而想要“得天下”,掌握海量数据,那么对存储、读写数据的数据库的要求就会很高。尤其...

技术领导力 698

膜拜!耗时21天死磕这份“Java面试热题”,成功拿下美团电商部offer

膜拜!耗时21天死磕这份“Java面试热题”,成功拿下美团电商部offer

javaAnPou的博客 169

Redis ,真的不完美

本文选自 | 《Redis 实战场景详解》Chat 作者 | 驰骋整理 | DS01前言显而易见,如今的 Redis 已经进入了成熟期,但依旧存在很多疑难杂症。数以千计的...

优快云大数据 205

爆砍阿里53*16Offer,就靠这份Java面试“完美日记”,已封神

不知道大家有没有这个习惯:就是每次有跳槽的想法的时候开始在网上各种去找面试题去刷,但是找了很多面试题,又不知道从哪里开始着手开始复习,也没有思路。同时也没办法保证答案的准确定,有时候甚至会本末倒置!常常令人头痛不已。 今天就来分享一份老师自己总结的,再加上几千位同学的上半年的面试经历,总结出了一份Java面试手册,里面不仅有一些常问的知识点,还包括了一些比较刁钻、头疼的问题。 总纲 通过上面的总纲可以看出,题目很多,全部展示给大家看太不切实际了!所以下面为大家截图出来了部分题目内容,同时所有问题都是包含答

mt77621的博客 172
上一篇: Hive 函数大全(吐血整理)
下一篇: Hive 初级练习 50 题(完美解答版)
GodSuzzZ
博客等级 码龄7年 319粉丝 15原创
评论 149
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值