`

Join操作

阅读更多

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

分享到:
评论

相关推荐

    19、Join操作map side join 和 reduce side join

    在处理涉及多数据集的任务时,Join 操作是必不可少的,它用于合并来自不同数据源的相关数据。本文主要探讨了两种 MapReduce 中的 Join 实现:Map Side Join 和 Reduce Side Join。 一、Join 的概念 Join 操作在...

    Linq之Join操作实例

    通过一个简单的实例对Linq中的Join操作进行演示。

    【MapReduce篇06】MapReduce之MapJoin和ReduceJoin1

    其中,Join操作是 MapReduce 中的一种基本操作,用于连接来自不同数据源的数据。今天,我们将讲解 MapReduce 之 MapJoin 和 ReduceJoin 两种 Join 操作的实现原理和应用场景。 MapJoin 概述 MapJoin 是一种特殊的 ...

    mysql Join使用以及优化

    MySQL数据库中Join操作的使用及优化是一项重要的技能,它涉及到数据库中表与表之间的关联查询。在执行Join操作时,数据库管理系统需要按照某种算法将多个表中的数据记录联合起来,并返回查询结果。Join操作的主要...

    详解HDFS多文件Join操作的实例

    HDFS 多文件 Join 操作实例详解 HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据。在数据处理过程中, Join 操作是一种常见的数据处理方式,用于将多个文件或表格中的数据...

    hadoop Join代码(map join 和reduce join)

    在Hadoop MapReduce中,数据处理的核心任务之一就是JOIN操作,它相当于关系数据库中的连接操作,用于合并来自不同数据源的相关信息。本文将深入探讨Map JOIN和Reduce JOIN两种在Hadoop中实现JOIN的方法,并通过代码...

    SQL语句left join/right join/inner join 的用法比较

    在SQL查询中,JOIN操作是连接两个或多个表的关键部分,用于从这些表中提取相关数据。本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN...

    关于sql的left join,right join,inner join,outerjoin

    在SQL查询中,JOIN操作是连接不同表的关键技术,它允许我们从多个相关的表中获取数据。本篇文章将深入探讨四种基本的JOIN类型:LEFT JOIN(左连接)、RIGHT JOIN(右连接)、INNER JOIN(内连接)以及OUTER JOIN(外...

    sql join( inner join, outer join) 分析

    在SQL(结构化查询语言)中,JOIN操作是用于合并两个或多个表的数据,以便根据它们之间的关联性创建新的结果集。JOIN关键字是SQL查询中的关键部分,它允许我们在不同的表之间建立联系,以获取更丰富的信息。在这个...

    MapReduce之Join操作

    join是非常常见的操作,各种优化手段已经到了极致。在海量数据的环境下,不可避免的也会碰到这种类型的需求,例如在数据分析时需要连接从不同的数据源中获取到的数据。不同于传统的单机模式,在分布式存储的下采用 ...

    join on 语句及扩展

    在SQL查询中,JOIN操作是用于合并两个或更多表中的数据的关键部分,它允许你在不同表之间建立联系,以便从多个源获取所需的信息。这里我们将深入探讨几种JOIN类型及其使用,以及ON和WHERE子句的区别。 1. INNER ...

    Mysql中的join操作

    MySQL中的JOIN操作是数据库查询中不可或缺的部分,它用于合并来自两个或更多表的数据。JOIN的主要类型包括内联结(INNER JOIN)、外联结(OUTER JOIN),其中外联结又分为外左联结(LEFT JOIN)和外右联结(RIGHT ...

    MongoDB中如何使用JOIN操作详解

    MongoDB 是一种基于文档模型的 NoSQL 数据库,它不支持传统的 SQL JOIN 操作,因为其设计理念强调灵活性和高性能处理非结构化数据。然而,在实际应用中,有时我们需要连接不同集合的数据,MongoDB 从 3.2 版本开始...

    Mycat跨分片Join指南

    Mycat 跨分片 Join 指南是 Mycat 中的一种join 操作方式,主要实现了跨分片的数据join 操作,支持多种实现方式。下面是对Mycat 跨分片 Join 的详细解释。 1. 全局表 在 Mycat 中,全局表是一种特殊的表,具有以下...

    hive sql + left join 数据缺失

    随着Hive版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行Left Join操作时出现数据缺失。 #### 二、问题复现 问题发生在如下的SQL语句中: ```sql SELECT a.* FROM ( SELECT ...

    oracle-join用法

    Oracle数据库的JOIN操作是SQL查询中的关键部分,用于合并多个表的数据,以便分析和比较不同表之间的关系。本文将深入探讨Oracle的JOIN用法,包括内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)以及...

    sql中join总结

    在SQL查询中,JOIN操作是用于将两个或更多表格的数据结合在一起的关键技术。根据不同的需求,SQL提供了多种类型的JOIN,包括交叉JOIN、内JOIN、左外JOIN、右外JOIN和全外JOIN。以下是对这些JOIN类型的具体解释和示例...

    MySQL中Nested-Loop Join算法小结

    MySQL中的Nested-Loop Join(NLJ)是一种基本的JOIN操作实现方式,主要用于处理两个或多个表之间的连接。NLJ的基本思想是逐行遍历一张表(称为外部表),然后对每一行与另一张表(称为内部表)进行匹配。这个过程...

Global site tag (gtag.js) - Google Analytics