Join操作基本分为3大类:外连接(细分为:左连接、右连接、全连接)、自然连接、内连接
Join操作的共性:第一步均为将所有参与操作的表进行了一个笛卡儿积,然后才依据各连接条件进行记录的筛选
SQL> select * from employees;
LAST_NAME DEPARTMENT_ID SALARY
------------------------------ ------------------------ ------------
Getz 10 3000
Davis 20 1500
King 20 2200
Davis 30 5000
Kochhar 5000
SQL> select * from departments;
DEPARTMENT_ID DEPARTMENT_NAME
------------------------ ------------------------------
10 Sales
20 Marketing
30 Accounts
40 Administration
--------------------------------------------------Left outer join--------------------------------------------------
SQL> select * from employees e left outer join departments d
2 on e.department_id=d.department_id;
LAST_NAME DEPARTMENT_ID SALARY DEPARTMENT_ID DEPARTMENT_NAME
----------------- ------------------------ ----------- ----------------------- ------------------------------
Getz 10 3000 10 Sales
King 20 2200 20 Marketing
Davis 20 1500 20 Marketing
Davis 30 5000 30 Accounts
Kochhar 5000
附加:Oracle9i以前版本中左连接的写法如下:
SQL> select * from employees e ,departments d
2 on e.department_id(+)=d.department_id;
-------------------------------------------------Right outer join-------------------------------------------------
SQL> select * from employees right outer join departments
2 using(department_id);
DEPARTMENT_ID LAST_NAME SALARY DEPARTMENT_NAME
----------------------- ----------------- ---------- ------------------------------
10 Getz 3000 Sales
20 Davis 1500 Marketing
20 King 2200 Marketing
30 Davis 5000 Accounts
40 Administration
附加:Oracle9i以前版本中左连接的写法如下:
SQL> select * from employees e ,departments d
2 where e.department_id=d.department_id(+);
--------------------------------------------------Full outer join--------------------------------------------------
SQL> select * from employees full outer join departments
2 using(department_id);
DEPARTMENT_ID LAST_NAME SALARY DEPARTMENT_NAME
------------------------ ------------------- ---------- -----------------------------
10 Getz 3000 Sales
20 King 2200 Marketing
20 Davis 1500 Marketing
30 Davis 5000 Accounts
Kochhar 5000
40 Administration
说明:[1]外连接必须使用on或using子句提供相应的连接条件
[2]不能为using子句中所列举的列指定表别名,即使在group by和select子句中也是如此
[3]外连接规则:左连右补,右连左补,全连左右合并
如:对表departments表进行右连接时,在两表完成笛卡儿积后再依据连接条件using(department_id)来筛选两表中department_id值相同的记录,但对DEPARTMENT_ID=40时employees表中没有与之匹配的记录,按常理此DEPARTMENT_ID=40所对应的记录将被抛弃,但就是为了保全连接表(departments表)中的所有记录就必须在employees表中虚拟出一条与之匹配的记录来保全连接表的所有记录,当然这条虚拟的记录显示时值全为null
--------------------------------------------------Natural join--------------------------------------------------
SQL> select * from employees natural join departments;
DEPARTMENT_ID LAST_NAME SALARY DEPARTMENT_NAME
------------------------ ------------------ ---------- ------------------------------
10 Getz 3000 Sales
20 Davis 1500 Marketing
20 King 2200 Marketing
30 Davis 5000 Accounts
说明:自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件与外连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录,但自然连接不会
--------------------------------------------------Inner join--------------------------------------------------
SQL> select * from employees inner join departments
2 using(department_id);
DEPARTMENT_ID LAST_NAME SALARY DEPARTMENT_NAME
------------------------ ----------------- ---------- ------------------------------
10 Getz 3000 Sales
20 Davis 1500 Marketing
20 King 2200 Marketing
30 Davis 5000 Accounts
说明:内连接与自然连接基本相同,不同之处在于自然连接只能是同名属性的等值连接,而内连接可以使用using或on子句来指定连接条件
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cowbane/archive/2008/01/30/2072288.aspx
分享到:
相关推荐
在处理涉及多数据集的任务时,Join 操作是必不可少的,它用于合并来自不同数据源的相关数据。本文主要探讨了两种 MapReduce 中的 Join 实现:Map Side Join 和 Reduce Side Join。 一、Join 的概念 Join 操作在...
通过一个简单的实例对Linq中的Join操作进行演示。
其中,Join操作是 MapReduce 中的一种基本操作,用于连接来自不同数据源的数据。今天,我们将讲解 MapReduce 之 MapJoin 和 ReduceJoin 两种 Join 操作的实现原理和应用场景。 MapJoin 概述 MapJoin 是一种特殊的 ...
MySQL数据库中Join操作的使用及优化是一项重要的技能,它涉及到数据库中表与表之间的关联查询。在执行Join操作时,数据库管理系统需要按照某种算法将多个表中的数据记录联合起来,并返回查询结果。Join操作的主要...
HDFS 多文件 Join 操作实例详解 HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据。在数据处理过程中, Join 操作是一种常见的数据处理方式,用于将多个文件或表格中的数据...
在Hadoop MapReduce中,数据处理的核心任务之一就是JOIN操作,它相当于关系数据库中的连接操作,用于合并来自不同数据源的相关信息。本文将深入探讨Map JOIN和Reduce JOIN两种在Hadoop中实现JOIN的方法,并通过代码...
在SQL查询中,JOIN操作是连接两个或多个表的关键部分,用于从这些表中提取相关数据。本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN...
在SQL查询中,JOIN操作是连接不同表的关键技术,它允许我们从多个相关的表中获取数据。本篇文章将深入探讨四种基本的JOIN类型:LEFT JOIN(左连接)、RIGHT JOIN(右连接)、INNER JOIN(内连接)以及OUTER JOIN(外...
在SQL(结构化查询语言)中,JOIN操作是用于合并两个或多个表的数据,以便根据它们之间的关联性创建新的结果集。JOIN关键字是SQL查询中的关键部分,它允许我们在不同的表之间建立联系,以获取更丰富的信息。在这个...
join是非常常见的操作,各种优化手段已经到了极致。在海量数据的环境下,不可避免的也会碰到这种类型的需求,例如在数据分析时需要连接从不同的数据源中获取到的数据。不同于传统的单机模式,在分布式存储的下采用 ...
在SQL查询中,JOIN操作是用于合并两个或更多表中的数据的关键部分,它允许你在不同表之间建立联系,以便从多个源获取所需的信息。这里我们将深入探讨几种JOIN类型及其使用,以及ON和WHERE子句的区别。 1. INNER ...
MySQL中的JOIN操作是数据库查询中不可或缺的部分,它用于合并来自两个或更多表的数据。JOIN的主要类型包括内联结(INNER JOIN)、外联结(OUTER JOIN),其中外联结又分为外左联结(LEFT JOIN)和外右联结(RIGHT ...
MongoDB 是一种基于文档模型的 NoSQL 数据库,它不支持传统的 SQL JOIN 操作,因为其设计理念强调灵活性和高性能处理非结构化数据。然而,在实际应用中,有时我们需要连接不同集合的数据,MongoDB 从 3.2 版本开始...
Mycat 跨分片 Join 指南是 Mycat 中的一种join 操作方式,主要实现了跨分片的数据join 操作,支持多种实现方式。下面是对Mycat 跨分片 Join 的详细解释。 1. 全局表 在 Mycat 中,全局表是一种特殊的表,具有以下...
随着Hive版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行Left Join操作时出现数据缺失。 #### 二、问题复现 问题发生在如下的SQL语句中: ```sql SELECT a.* FROM ( SELECT ...
Oracle数据库的JOIN操作是SQL查询中的关键部分,用于合并多个表的数据,以便分析和比较不同表之间的关系。本文将深入探讨Oracle的JOIN用法,包括内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)以及...
在SQL查询中,JOIN操作是用于将两个或更多表格的数据结合在一起的关键技术。根据不同的需求,SQL提供了多种类型的JOIN,包括交叉JOIN、内JOIN、左外JOIN、右外JOIN和全外JOIN。以下是对这些JOIN类型的具体解释和示例...
MySQL中的Nested-Loop Join(NLJ)是一种基本的JOIN操作实现方式,主要用于处理两个或多个表之间的连接。NLJ的基本思想是逐行遍历一张表(称为外部表),然后对每一行与另一张表(称为内部表)进行匹配。这个过程...