大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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'
);
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169399.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...