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 网址:https://blog.csdn.net/chenwewi520feng/article/details/130455477 本文介绍mapreduce的join操作。 本文前提是hadoop可以正常使用。 本文分为3个部分介绍,即...
通过一个简单的实例对Linq中的Join操作进行演示。
Join操作基本,Join操作基本分为3大类:外连接(细分为:左连接、右连接、全连接)、自然连接、内连接
join是非常常见的操作,各种优化手段已经到了极致。在海量数据的环境下,不可避免的也会碰到这种类型的需求,例如在数据分析时需要连接从不同的数据源中获取到的数据。不同于传统的单机模式,在分布式存储的下采用 ...
内容概要:本文介绍了MySQL中的JOIN操作,以及通过具体的表结构示例演示了JOIN的应用。其中包括LEFT JOIN、ON条件过滤、笛卡尔积等概念和操作。本文适合对MySQL数据库和JOIN操作感兴趣的读者进行学习和参考。 使用...
Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等。对各个表之间的关系,就用这些实现对多个表的操作。 说明:在Join操作中,分别为Join(Join查询), SelectMany(Select一对多选择)和...
相信大家都知道mongodb是不支持join操作的,因此我们只能自己来实现这个功能。所以下面这篇文章主要给大家介绍了关于在MongoDB中如何使用JOIN操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来...
多用户情况下hash join算法的实现,英语版
主要介绍了详解HDFS多文件Join操作的实例的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下
C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin...
主要给大家介绍了关于MySQL left join操作中on和where放置条件的区别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
Join 查找操作的基本原则:应该将条目少的表/子查询放在 Join 操作符的左边。原因 是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将 条目少的表放在左边,可以有效减少发生内存...
数据库中JOIN操作的实现主要有三种:嵌套循环连接(Nested Loop Join),归并连接(Merge Join)和散列连接或者哈稀连接(Hash Join)。其中嵌套循环连接又视情况又有两种变形:块嵌套循环连接和索引嵌套循环连接。
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