当前位置:   article > 正文

postgres sql 多表联合查询_从零学会SQL-多表查询

postgresql 多表连接查下

之前学习的内容几乎针对单个表进行简单操作,实际工作中可没有这么简单,复杂的表结构和多表数据关联进行分析,这时候需要我们掌握多表查询方法,一如既往,我们先看一下这篇的主要内容:

  • 表的加法
  • 表的联结
  • 联结应用案例
  • case表达式

下面我们就来一一攻克吧。

一、表的加法

表达加法针对于两张相同数据结构不同数据的操作

首先,原student数据库中course表数据如下:

16cf8cb762dbde239f62ad61e640f9c0.png

其次,我们在student数据库中新增course1表,新添数据如下:

e4bd01bf9488cc01adf4048dca4e57f4.png

最后,我们用表的加法,来把这两张表中的数据组合在一起。表的加法,我们要用UNION来实现。

UNION的作用 UNION运算符用于组合两个或更多SELECT语句的结果集
UNION使用前提两个表或多表必须具有相同的列数,数据类型

A. UNION 语法

  1. SELECT column_name(s) FROM table1
  2. UNION
  3. SELECT column_name(s) FROM table2;

我们把以上两张课程表course和couser1,用表加法UNION合并:

  1. SELECT 课程号,课程名称
  2. from course
  3. UNION
  4. select 课程号,课程名称
  5. FROM course1;

20367c6d94af6dd0fd617b5f42bee6d4.png

从结果表中可以看到,course和course1两张表中不同的数据合并在一起了,两张表中重复的数据,SQL会把重复值删除,只保留一个值。

如果允许重复值,请使用 UNION ALL

B.UNION ALL

若保留两个表或多表所有列的数据,用UNION ALL

  1. SELECT column_name(s) FROM table1
  2. UNION ALL
  3. SELECT column_name(s) FROM table2;

※ 注:UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。

  1. SELECT 课程号,课程名称
  2. from course
  3. UNION ALL
  4. select 课程号,课程名称
  5. FROM course1;

63bd10512b99164ba3a56047441294ef.png

如结果所示,两个表中的共有的数据“0001,语文”的重复数据都被保留下来了。

二、表的联结

关系型数据库是由多张表组成的,如数据库student下有四张表,他们之间关系如下:

9ea7d6d7923835e07c5050329182e1c8.png

我们来看student表和score表两表之间的关系,两张表就是通过学号这个主键关联起来的。假如我想知道学号为0001的学生的成绩是多少,我就可以在score表中查找到学号为0001的学生的课程号和成绩(一共有3行数据)。

所以关系就是表之间对应的匹配(根据主键),在关系型数据库中,这种关系的学名叫做联结(join)。

A. JOIN连接的作用

JOIN 连接用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

常用的联结如下:

  • CROSS JOIN(交叉联结):没有条件的join,返回被连接的两个表所有数据行的笛卡尔积;
  • INNER JOIN(内联结):如果表中有至少一个匹配,则返回行;
  • LEFT JOIN(左联结):即使右表中没有匹配,也从左表返回所有的行;
  • RIGHT JOIN(右联结):即使左表中没有匹配,也从右表返回所有的行;
  • FULL JOIN(全联结):只要其中一个表中存在匹配,则返回行。

B. CROSS JOIN(交叉联结)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/441362
推荐阅读
相关标签
  

闽ICP备14008679号