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

举报
兰舟千帆 发表于 2022/07/14 23:47:24 2022/07/14
【摘要】 题目如下 描述 请编写 SQL 语句, 联合教师表(teachers)和课程表(courses),查询课程表中年龄不大于 20 岁的教师所教的所有课程的课程名(name)。 表定义:teachers(教师...

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

在这里插入图片描述
表定义:courses(课程表)
在这里插入图片描述
样例
样例一:
表内容 : teachers

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

方法一:(常规思维)

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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


方法二:显式内连接

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

方法三:左连接查询

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

  
 
  • 1
  • 2
  • 3
  • 4

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

文章来源: daodaozi.blog.csdn.net,作者:兰舟千帆,版权归原作者所有,如需转载,请联系作者。

原文链接:daodaozi.blog.csdn.net/article/details/122811905

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。