文章目录
- 概述
- 表关系
- 横向连接
-
- [内连接 inner join](#内连接 inner join)
- [左连接 left join](#左连接 left join)
- [右连接 right join](#右连接 right join)
- [全连接 full join](#全连接 full join)
- [交叉连接 cross join](#交叉连接 cross join)
- 纵向合并
-
- [UNION ALL](#UNION ALL)
- UNION
概述
在数据处理、数据分析中常会用到表连接。表连接的作用是将多个表中的数据关联起来,以便在查询过程中获取更全面和准确的信息。。通过表连接,可以更灵活地处理和分析数据库中的数据,提供更全面和准确的查询结果。使用表连接有以下功能:
- 获取相关数据: 当数据分散在多个表中时,通过表连接可以将这些表中的相关数据关联起来。例如,在一个电子商务系统中,订单信息可能存储在一个表中,而客户信息可能存储在另一个表中。通过表连接,可以将订单表和客户表中的数据关联起来,从而获取包括订单和客户信息的完整记录。
- 实现数据聚合: 表连接可以用于将多个表中的数据进行聚合计算。通过连接与聚合函数结合使用,可以进行复杂的统计和汇总操作。例如,在销售数据分析中,可以将订单表和产品表连接,并使用聚合函数计算每个产品的销售总额、平均价格等统计指标。
- 支持复杂的查询条件: 使用表连接可以在查询条件中同时使用多个表的列进行筛选和过滤。这样可以根据多个表的关系和条件进行更精确的查询。例如,可以通过连接客户表和订单表,并根据客户的地理位置和订单的日期范围进行筛选,以获取特定地区在特定时间内的订单数据。
- 提高查询性能: 通过适当地使用表连接,可以减少数据冗余和重复存储,从而提高查询性能。
表关系
表关系指的是数据库中不同表之间的关联关系。这种关系通常通过表中的共同列(键)建立起来,以便在查询数据时能够在不同表之间建立连接并获取相关信息。表关系通常可以分为以下几种类型:
-
一对一关系: 两个表中的每个记录在关联字段上都有唯一的对应。这种关系通常用于将不同方面的信息分开存储,以保持数据的规范性和整洁性。
-
一对多关系: 一个表中的记录在关联字段上可以对应多个另一个表中的记录。这种关系常见于主从表的关系,例如一个客户可能有多个订单。
-
多对一关系: 多个表中的记录在关联字段上对应同一个表中的记录。这种关系通常指向关联字段具有相同值的情况。
-
多对多关系: 两个表之间的记录可以相互关联,并且每个记录在关联字段上可以对应多个另一个表中的记录。为了建立这种关系,通常需要通过第三张关系表来实现。
通过合理设计表关系,可以避免数据冗余、确保数据一致性,并且使得数据库的结构更加清晰和易于维护。在进行数据查询时,表关系能够帮助我们获取跨表的相关信息,进行复杂的数据分析和处理操作。
横向连接
数据:
内连接 inner join
返回左表与右边关键值一致的行(两表的交集)。
sql
select * from t1 inner join t2 on t1.key1 = t2.key2;
左连接 left join
返回左表中的所有行,以及右表中与左表匹配的行。
sql
select * from t1 left join t2 on t1.key1 = t2.key2;
右连接 right join
返回右表中的所有行,以及左表中与右表匹配的行。
sql
select * from t1 right join t2 on t1.key1 = t2.key2;
全连接 full join
返回左右两个表中所有的行,并将它们匹配起来,如果其中一个表中没有匹配的行,则用 NULL 值填充。(两表的并集)
sql
select * from t1 full join t2 on t1.key1 = t2.key2;
交叉连接 cross join
交叉连接会返回两个表的笛卡尔积,即左表中的每一行都会与右表中的每一行匹配。
sql
SELECT *
FROM table1
CROSS JOIN table2;
示例:
纵向合并
纵向合并是为了追加/增加记录。通常情况下,纵向合并需要满足以下条件:
- 两张表必须拥有相同数量的字段
- 两张表字段的顺序必须相同
- 两张表对应字段的数据类型必须一致
- 字段名可以不相同,选取主数据集的字段名
UNION ALL
UNION ALL操作符用于合并结果集时不会去重,即结果集中可能包含重复的行。
sql
SELECT column1, column2
FROM table1
UNION ALL
SELECT column1, column2
FROM table2;
UNION
UNION操作符用于合并结果集时会自动去重,即去除重复的行。
sql
SELECT column1, column2
FROM table1
UNION
SELECT column1, column2
FROM table2;
在SQL中,UNION和UNION ALL都是用于合并两个或多个SELECT语句的结果集的操作符。它们的主要区别在于对重复行的处理方式。