✔1.node.js初体验windows ✔2.commonjs-回顾ES6模块化 ✔3.commonjs的语法介绍 ✔4.commonjs和ES6 Module的区别 ✔5.Bug分类 ✔6.node.js和前端js的区别 ✔7.左关联 ✔8.聚合函数 ✔9.【案例】统计上班时间 ✔10.数据库的索引 ✔11.索引的分类 ✔12.查询数学成绩比语文成绩高的学生 ✔13.查询平均成绩大于80分的学生 ✔14.学生总成绩排序 ✔15.学过体育课学生的年龄 ✔16.查询学号大年龄小的学生 |
|
编程目标:在学生表中查询学号(id)比"苗冷安"大,但年龄比他小的学生。
编程思路:
1.连接两次 student 表,分别使用别名 a 和 b 表示不同的表实例。
from student a,student b
2.使用 WHERE 子句筛选出满足以下条件的学生:
- b 表中的学生名字为 “苗冷安”
- a 表中的学生生日晚于 b 表中的学生生日
- a 表中的学生 ID 大于 b 表中的学生 ID
where b.student_name = "苗冷安"
and a.id > b.id
and a.student_birthday > b.student_birthday
3.在 SELECT 子句中选择以下列:
- a 表中的学生 ID(id)
- a 表中的学生名字(student_name)
- a 表中的学生生日(student_birthday)
- b 表中的学生生日(student_birthday)
- b 表中的学生 ID(id),由于 a 和 b 表中的列名重复,使用了别名来区分
select a.id,a.student_name,a.student_birthday,
b.student_birthday,b.id
4.使用 ORDER BY 子句按照 a 表中的学生 ID 升序进行排序。
order by a.id asc
完整代码如下;
select a.id,a.student_name,a.student_birthday,
b.student_birthday,b.id
from student a,student b
where b.student_name = "苗冷安"
and a.id > b.id
and a.student_birthday > b.student_birthday
order by a.id asc
你可能会问,年龄比苗冷安小,不应该是 你的年龄 < 苗冷安的年龄吗?
假如你的出生日期是1999-08-08,我的年龄是1998-0808,
你的年龄是不是比我小?是的。
所以你的 birthday 是不是比我要大?是的。
疑问解决。
代码解读:
1.通过 FROM 子句将 student 表连接两次,使用别名 a 和 b 表示两个不同的表实例。
2.WHERE 子句中的条件筛选了学生名字为 “苗冷安” 的学生,并且限制了 a 表中的学生生日晚于 b 表中的学生生日,以及 a 表中的学生 ID 大于 b 表中的学生 ID,从而排除了查询结果中的冗余和重复数据。
3.SELECT 子句中选择了 a 表中的学生 ID(id)、学生名字(student_name)、学生生日(student_birthday),以及 b 表中的学生生日(student_birthday)和学生 ID(id)。其中,由于 a 和 b 表中的列名重复,使用了别名来区分。
4.查询结果按照 a 表中的学生 ID 升序排序。
运行结果:
热门评论
高筑墙,广积粮。学习重在积累。相信量变引起质变,进而带来高薪。我能行。