[MySQL]子查询与合并查询

文章目录

    • 子查询
      • in关键字
      • exists关键字
    • 合并查询
      • union关键字
      • union all关键字

子查询

子查询类似于套娃问题,就是用上一层查询的结果作为下一层查询的条件,进行最终的查询,有时候可能会套上很多层,难度不大,但是不太好想,在实际开发中可读性不高,效率比较低,所以尽量不使用子查询为好。

Q:如何查询“不想毕业”同学的同班同学?

  1. 先查询出“不想毕业”同学的班级号class_id
  2. 再查询哪些同学的class_id与它相同。
    [MySQL]子查询与合并查询_第1张图片
    这是两个简单的查询语句,那么我们把它结合起来就是子查询。
    [MySQL]子查询与合并查询_第2张图片
    先执行第二行的查询语句,将这个查询结果,作为外层查询的条件。子查询只返回一条记录,所以最外层查询使用=比较即可。

那么问题来了,如果我想查询的记录不止一条呢

in关键字

Q:如何查询“语文”或“英文”课程的成绩信息?

  1. 先查询出“语文”或“英语”的课程号course_id;
  2. 再根据course_id查询到对应的成绩,此时的成绩就不仅仅是一条了。[MySQL]子查询与合并查询_第3张图片
select * from score where course_id in (
select id from course where name = "语文" or name = "英语"
);

合并成子查询后结果
[MySQL]子查询与合并查询_第4张图片

exists关键字

exists关键字与in关键字区别不大,但是操作复杂一些,也能用于子查询。
上述问题的另一种写法如下:

select * from score where exists (
select score,course_id from course where(name = "语文" or name = "英语")
adn course.id = score.course_id
);

合并查询

合并查询是将多个select查询的结果,合并成一个结果,类似于取并集。

union关键字

针对重复的行进行去重,union最大的优势就是可以进行数据合并。
[MySQL]子查询与合并查询_第5张图片
[MySQL]子查询与合并查询_第6张图片

union all关键字

不会针对重复的行去重。

你可能感兴趣的:(MySQL,mysql,数据库,sql)