查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)

题目如下

描述
请编写 SQL 语句, 联合教师(teachers)和课程(courses),查询课程中年龄不大于 20 岁的教师所教的所有课程的课程名(name)。
表定义:teachers(教师表)

表定义:courses(课程表)


                                            查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)

样例
样例一:
表内容 : teachers

表内容:courses


                                            查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)


                                            查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)


                                            查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)


                                            查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)


                                            查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)

很明显,这个题可能用到连接查询(因为我们需要根据教师表的年龄作为限制条件,来查到可能表中相应的课程。所以我们需要两张表。但是我们还可以按照常规的思维模式。分开查询)

方法一:​(常规数据库系统的核心是思维)

select
name
from
courses
where
teacher_id in (
select
id
from
teachers
where
age <= 20
);

解析,我们要查询的是数据库查询语句课程名字,那么select name是没有问数据库管理系统题这样写的,然后这个可能名字来自courses表,所以from courses表。然后条件是什么呢?条件是老师的年龄小于等于20,年龄在teachers表中,所以我们写出基本的条件,然后利用这个条件,我们对courses表的所要查的课程名进行限多表连接查询制,两表只有对应的id可以进行限制,所以我们从限制符合该条件的id进行限制我mysql们要获取的课程名。​(id作为了数据库管理系统连接的条件)


数据库管理系统法二:显式内连接

select
t2.name
from
teachers as t1 join courses as t2
on
t1.id = t2.teacher_id
where
t1.age <= 20;

判断出连接查询,就直接进行写代码进内连接行连接,分别将id作为连接条件,然后限制年mysql怎么读龄,这样数据库系统概论第五版课后答案也可以直接求出来。

方法三:左连接查询

select c.name as name 
from courses c
left join teachers t on c.teacher_id=t.id
where t.age<=20;

mysql安装配置教程左连接就是以左表为基准,按照左表匹配,右表没有的就会为置为空,而右连接反之。