- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
描述
请编写 SQL 语句, 联合教师表(teachers)和课程表(courses),查询课程表中年龄不大于 20 岁的教师所教的所有课程的课程名(name)。
表定义:teachers(教师表)
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 讲师姓名 |
| varchar | 讲师邮箱 | |
| age | int | 讲师年龄 |
| country | varchar | 讲师国籍 |
表定义:courses(课程表)
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 课程名称 |
| student_count | int | 学生总数 |
| created_at | datetime | 课程创建时间 |
| teacher_id | int unsigned | 讲师 id |
**
- 如果 teachers 中 存在 age 为 null 的时候,则跳过该数据。
- 如果 teachers 中 age 全为 null 的时候,或者 teachers 表数据为空,则返回 null。
样例
样例一:
表内容 : teachers
| id | name | age | country | |
|---|---|---|---|---|
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | UK |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
| 5 | Linghu Chong | NULL | 18 | CN |
表内容:courses
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 1 | Senior Algorithm | 880 | 2020-6-1 09:03:12 | 4 |
| 2 | System Design | 1350 | 2020-7-18 10:03:12 | 3 |
| 3 | Django | 780 | 2020-2-29 12:03:12 | 3 |
| 4 | Web | 340 | 2020-4-22 13:03:12 | 4 |
| 5 | Big Data | 700 | 2020-9-11 16:03:12 | 1 |
| 6 | Artificial Intelligence | 1660 | 2018-5-13 18:03:12 | 3 |
| 7 | Java P6+ | 780 | 2019-1-19 13:03:12 | 3 |
| 8 | Data Analysis | 500 | 2019-7-12 13:03:12 | 1 |
| 10 | Object Oriented Design | 300 | 2020-8-8 13:03:12 | 4 |
| 12 | Dynamic Programming | 2000 | 2018-8-18 20:03:12 | 1 |
在运行你的 SQL 语句之后,表应返回:
| name |
|---|
| Big Data |
| Data Analysis |
| Dynamic Programming |
样例二:
表内容 : teachers
| id | name | age | country | |
|---|---|---|---|---|
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 21 | UK |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 21 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
| 5 | Linghu Chong | NULL | 21 | CN |
表内容:courses
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 1 | Senior Algorithm | 880 | 2020-6-1 09:03:12 | 4 |
| 2 | System Design | 1350 | 2020-7-18 10:03:12 | 3 |
| 3 | Django | 780 | 2020-2-29 12:03:12 | 3 |
| 4 | Web | 340 | 2020-4-22 13:03:12 | 4 |
| 5 | Big Data | 700 | 2020-9-11 16:03:12 | 1 |
| 6 | Artificial Intelligence | 1660 | 2018-5-13 18:03:12 | 3 |
| 7 | Java P6+ | 780 | 2019-1-19 13:03:12 | 3 |
| 8 | Data Analysis | 500 | 2019-7-12 13:03:12 | 1 |
| 10 | Object Oriented Design | 300 | 2020-8-8 13:03:12 | 4 |
| 12 | Dynamic Programming | 2000 | 2018-8-18 20:03:12 | 1 |
在运行你的 SQL 语句之后,表应返回:
| name |
|---|
因为输入样例中不存在年龄不大于 20 岁的老师,查询到的课程名为空,所以这里只展示了标题,没有数据
题解:
解法1
使用join连接teachers和coureses
select a.name
from courses a join teachers b on a.teacher_id=b.id
where b.age<=20
解法2
SELECT c.name name
from teachers t, courses c
where t.id = c.teacher_id and t.age <= 20