前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查询年龄不大于 20 岁的教师所教的所有课程的课程名(Lintcode刷题)

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

作者头像
兰舟千帆
发布2022-07-16 12:59:43
2520
发布2022-07-16 12:59:43
举报
文章被收录于专栏:兰舟千帆的java学习笔记

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

表定义:courses(课程表)

样例 样例一: 表内容 : teachers

表内容:courses

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

方法一:(常规思维)

代码语言:javascript
复制
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进行限制我们要获取的课程名。(id作为了连接的条件)


方法二:显式内连接

代码语言:javascript
复制
select
    t2.name
from 
    teachers as t1 join courses as t2
    on
        t1.id = t2.teacher_id
where
    t1.age <= 20;

判断出连接查询,就直接进行写代码进行连接,分别将id作为连接条件,然后限制年龄,这样也可以直接求出来。

方法三:左连接查询

代码语言:javascript
复制
select c.name as name 
from courses c 
left join teachers t on c.teacher_id=t.id 
where t.age<=20;

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档