`

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

    19、Join操作map side join 和 reduce side join 网址:https://blog.csdn.net/chenwewi520feng/article/details/130455477 本文介绍mapreduce的join操作。 本文前提是hadoop可以正常使用。 本文分为3个部分介绍,即...

    Linq之Join操作实例

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

    Join操作基本

    Join操作基本,Join操作基本分为3大类:外连接(细分为:左连接、右连接、全连接)、自然连接、内连接

    MapReduce之Join操作

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

    MySQL中的JOIN详解及sql实战

    内容概要:本文介绍了MySQL中的JOIN操作,以及通过具体的表结构示例演示了JOIN的应用。其中包括LEFT JOIN、ON条件过滤、笛卡尔积等概念和操作。本文适合对MySQL数据库和JOIN操作感兴趣的读者进行学习和参考。 使用...

    LINQ to SQL语句之Join和Order By

    Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等。对各个表之间的关系,就用这些实现对多个表的操作。 说明:在Join操作中,分别为Join(Join查询), SelectMany(Select一对多选择)和...

    MongoDB中如何使用JOIN操作详解

    相信大家都知道mongodb是不支持join操作的,因此我们只能自己来实现这个功能。所以下面这篇文章主要给大家介绍了关于在MongoDB中如何使用JOIN操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来...

    hash join算法

    多用户情况下hash join算法的实现,英语版

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

    主要介绍了详解HDFS多文件Join操作的实例的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    Mysql中的join操作

    主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下

    C#编程 数据库操作应用 LINQJoin(源码)(源码)

    C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin...

    MySQL left join操作中on和where放置条件的区别介绍

    主要给大家介绍了关于MySQL left join操作中on和where放置条件的区别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

    Hive优化.docx

    Join 查找操作的基本原则:应该将条目少的表/子查询放在 Join 操作符的左边。原因 是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将 条目少的表放在左边,可以有效减少发生内存...

    MySQL中Nested-Loop Join算法小结

    数据库中JOIN操作的实现主要有三种:嵌套循环连接(Nested Loop Join),归并连接(Merge Join)和散列连接或者哈稀连接(Hash Join)。其中嵌套循环连接又视情况又有两种变形:块嵌套循环连接和索引嵌套循环连接。

    接触Linq必看简单教程

    1. C# 3.0 入门系列(一)...10. C#3.0入门系列(十)-之Join操作 Join操作 11. C#3.0入门系列(十一)-之In, Like操作 In & Like操作 12. C#3.0入门系列(十二)-Lambda表达式中Lifting Lambda表达式中的Lifting

Global site tag (gtag.js) - Google Analytics