mysql多表查询中的连接查询

img


请问我的代码问题出现在哪里应如何修改 其次这地方用的是连接查询 如果用子查询中的from子查询 该怎么写 谢谢

select sno, sname, ssex, sdept from student st where st.sno in (select sno from sc where cno in (select cno from course where cname = 'Maths'))

逻辑就是先获取数学课的课程编号,然后通过课程编号获取选修了课程的学生编号,然后通过学生编号再去获取学生信息

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7715156
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:mysql根据父节点查询所有的子节点以及根据子节点往上查询所有父节点
  • 你还可以看下mysql参考手册中的 MySQL 字符集、对齐方式、统一编码 字符集和排序分配的例子
  • 除此之外, 这篇博客: 【MySQl】多表关联的几种方式和外键问题、多表查询与子查询中的 子查询 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    概念

    1.第一次查询的结果当做表或者条件进行第二次查询。

    2,一般而言子查询的效率较差。至少需要两次查询。

    3.子查询中包含:IN、NOT IN、ANY、ALL、EXISTS和NOT EXISTS 等关键字。

    4.还可以包含比较运算符:=、!=、>、<等。

    注意

    1.子查询要包含在括号内。

    2.将子查询放在比较条件的右侧

    3.单行操作符对应单行子查询,多行操作对应多行子查询

    案例
    查询工资高于猪八戒的员工信息,

    第一步:先查询出来猪八戒的工资

    select salary from emp where name = '猪八戒'

    第二步:将第一步查询出来的猪八戒工资作为条件 查询工资高于猪八戒的员工信息。

    select * from emp where salary > (select salary from emp where name = '猪八戒');

     执行结果:

     子查询根据查询结果不同,作用不同

    • 子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断
    • 子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断
    • 子查询语句结果是多行多列,子查询语句作为虚拟表

    案例

    查询‘财务部’和‘市场部’所有的员工信息

    -- 查询 '财务部' 或者 '市场部' 所有的员工的部门did
    select did from dept where dname = '财务部' or dname = '市场部';
    select * from emp where dep_id in (select did from dept where dname = '财务部' or dname =
    '市场部');

    查询入职日期是‘2011-11-11’之后的员工信息和部门信息

    -- 查询入职日期是 '2011-11-11' 之后的员工信息
    select * from emp where join_date > '2011-11-11' ;
    -- 将上面语句的结果作为虚拟表和dept表进行内连接查询
    select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where
    t1.dep_id = dept.did;

  • 您还可以看一下 陈贺群老师的软件测试教程系列之MySQL数据库教学视频(中)课程中的 数据库_在dos中添加数据出现错误或者查询数据出现乱码问题解决介绍小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^