大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
查询学生上课人数超过 “Eastern Heretic” 的任意一门课的学生人数的课程信息,请使用 ANY 操作符实现多行子查询。(Lintcode刷题记录)
Courses表:
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 课程名称 |
| student_count | int | 学生总数 |
| created_at | datetime | 课程创建时间 |
| teacher_id | int unsigned | 讲师 id |
Teachers表:
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 讲师姓名 |
| varchar | 讲师邮箱 | |
| age | int | 讲师年龄 |
| country | varchar | 讲师国籍 |
本题涉及到多层的嵌套:
第一层的父查询为在课程表 courses 中查询满足条件的全部课程信息,这个条件由子查询来完成,即为,查询学生上课人数超过 ”Eastern Heretic“ 的任意一门课的学生人数。这一部分的子查询中需要结合 ANY 操作符实现。之后,再将子查询进行拆分,形成第二层的嵌套子查询。
第二层的父查询为在课程表 courses 中根据教师 id 查询学生上课人数, 其子查询为在教师表 teachers 中查找教师名 name 为 “Eastern Heretic” 的教师 id。
条件限制:由于我们最终得到的课程信息中肯定不包含 “Eastern Heretic” 的课程,所以我们要在 WHERE 条件中再设置一项:不为 “Eastern Heretic” 所开的课程 。
结合以上,使用 SQL 中子查询的方式如下:)
SELECT *
FROM `courses`
WHERE `student_count` > ANY (
SELECT `student_count`
FROM `courses`
WHERE `teacher_id` = (
SELECT `id`
FROM `teachers`
WHERE `name` = 'Eastern Heretic'
)
)
-- <> 代表不等于,也可以用!= 但是有些数据库会报错,例如SQL2000 —--
AND `teacher_id` <> (
SELECT `id`
FROM `teachers`
WHERE `name` = 'Eastern Heretic'
);
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169399.html原文链接:https://javaforall.net
