SQL-多表查询-联合查询 union, union all

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

当我们需要跨多个表检索一个查询结果集时,SQL中的联合查询就十分有用了。在本文中,我们将研究什么是SQL联合查询,并提供使用场景和实例。


一、联合查询是什么?

SQL联合查询(UNION)是用于从一个或多个表中检索数据的高级特性。通过联合查询,我们可以将多个SELECT语句的结果组合成一个查询结果集并返回给用户。但是,请注意,为了联接,每个查询都必须具有相同的列数和数据类型。

下面是一个简单的联合查询的语法:

SELECT column1, column2, ... columnn FROM table1
UNION
SELECT column1, column2, ... columnn FROM table2;

该查询将检索“ table1和table2” 中所有列的相同数据并组合起来返回结果。

二、使用步骤

语法:

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...

注意事项:

UNION ALL 会有重复结果,UNION 不会
联合查询比使用or效率高,不会使索引失效

三、使用场景及实例

SQL联合查询常用于以下情境:

  • 需要将两个或多个查询结果组合起来成为一个结果集
  • 需要在其他列中检索时忽略重复行,而不是使用DISTINCT
  • 需要将结果按特定列进行排序

实例:
为了证明我们的观点,我们构建一个简单的数据库,包含4个表:学生(Students),课程(Courses),学生选课记录(StudentCourses),学生信息(StudentInfo)。

Students表包含学生的基本信息,Courses表包含所有可用的课程,StudentCourses表将选修某门课程的学生与该课程相关联,StudentInfo表则包含学生的详细信息。

现在,我们需要检索有关学生和课程的信息。具体来说,我们需要列出每个学生所学课程的名称,以及他们的学习成绩。

可以使用以下SQL查询这些数据:

SELECT Students.Name, Courses.CourseName, StudentCourses.Score 
FROM Students, Courses, StudentCourses 
WHERE Students.Id = StudentCourses.StudentId AND Courses.Id = StudentCourses.CourseId;

上述查询返回我们需要的信息,但只列出了选修了某门课程的学生的信息。如果我们想要查看完整的学生信息和包括没有选修课程的学生,我们可以使用联合查询。

SELECT Students.Name, Courses.CourseName, StudentCourses.Score 
FROM Students, Courses, StudentCourses 
WHERE Students.Id = StudentCourses.StudentId AND Courses.Id = StudentCourses.CourseId
UNION
SELECT Students.Name, 'N/A', 'N/A'
FROM Students 
WHERE Students.Id NOT IN (SELECT StudentId FROM StudentCourses);

此查询返回完整的学生列表,如果学生没有选修任何课程,则在“课程名称”和“成绩”列中返回N/A。

总结

总之,SQL联合查询(UNION/UNION ALL)十分有用。它可以帮助我们从多个表中获取数据,为我们提供丰富多彩的查询结果集,同时也能提高SQL的灵活性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值