`
youanyyou
  • 浏览: 197914 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

oracle join 连接查询

阅读更多

                                                                                                                                       

                  

Java代码 
  1. 条件连接(join)   
  2. T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression  
  3. T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list )  
  4. T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2  
  5. INNER 和 OUTER 对所有连接(join) 类型都是可选的.INNER 是缺省; LEFT,RIGHT,和 FULL 隐含外连接.   
  6.   
  7. 连接条件在ON或USING子句里声明, 或者用关键字NATURAL隐含地声明.连接条件判断来自两个源表 中的那些行是"匹配"的,这些我们将在下面详细解释.   
  8.   
  9. ON子句是最常见的连接条件的类型∶它接收一个和WHERE子句里用的一样的 布尔值表达式.如果两个分别来自T1和T2的行在ON表达式上运算的 结果为真,那么它们就算是匹配的行.   
  10.   
  11. USING是缩写的概念∶它接收一个用逗号分隔的字段名字列表, 这些字段必须是连接表共有的,最终形成一个连接条件,表示 这些字段对必须相同.最后,JOIN USING 的输出会为每一对相等 的输入字段输出一个字段,后面跟着来自各个表的所有其它字段. 因此,USING (a, b, c) 等效于 ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c) 只不过是如果使用了ON,那么在结果里 a,b,和 c字段每个都会有两个, 而用USING的时候每个字段就只会有一个.   
  12.   
  13. 最后,NATURAL 是USING 的缩写形式∶它形成一个 USING 列表, 该列表由那些在两个表里都出现了的字段名字组成.和USING一样, 这些字段只在输出表里出现一次.   
  14.   
  15. 条件JOIN的可能类型是∶   
  16.   
  17.   
  18. INNER JOIN   
  19. 对于 T1 的每一行 R1,生成的连接表都有一行对应 T2 中的 每一个满足和 R1 的连接条件的行.   
  20.   
  21. LEFT OUTER JOIN   
  22. 首先,执行一次内连接.然后,为 T1 里那些和 T2 里任何一行都不满足连接条件的行返回一个连接行, 同时该连接行里对应 T2 的列用空值补齐.因此, 生成的连接表里无条件地包含来自 T1 里的每一行至少 一个副本.   
  23.   
  24. RIGHT OUTER JOIN   
  25. 首先,执行一次内连接.然后,为 T2 里那些和 T1 里任何一行都不满足连接条件的行返回一个连接行, 同时该连接行里对应 T1 的列用空值补齐.因此, 生成的连接表里无条件地包含来自 T2 里的每一行.   
  26.   
  27. FULL OUTER JOIN   
  28. 首先,执行一次内连接.然后,为 T1 里那些和 T2 里任何一行都不满足连接条件的行返回一个连接行, 同时该连接行里对应 T2 的列用空值补齐. 同样,为 T2 里那些和 T1 里的任何行都不满足连接条件的 行返回一个连接行,该行里对应 T1 的列用空值补齐.   
  29.   
  30. 如果 T1 和 T2 有一个或者都是可以连接(join)的表, 那么所有类型的连接都可以串在一起或嵌套在一起. 你可以在JOIN子句周围使用圆括弧来控制连接顺序, 如果没有圆括弧,那么JOIN子句是从左向右嵌套的.   
  31.   
  32. 为了解释这些问题,假设我们有一个表 t1   
  33.   
  34.  num | name  
  35. -----+------  
  36.    1 | a  
  37.    2 | b  
  38.    3 | c  
  39. 和 t2   
  40.   
  41.  num | value  
  42. -----+-------  
  43.    1 | xxx  
  44.    3 | yyy  
  45.    5 | zzz  
  46. 然后我们用不同的连接方式可以获得各种结果:   
  47.   
  48. => SELECT * FROM t1 CROSS JOIN t2;  
  49.  num | name | num | value  
  50. -----+------+-----+-------  
  51.    1 | a    |   1 | xxx  
  52.    1 | a    |   3 | yyy  
  53.    1 | a    |   5 | zzz  
  54.    2 | b    |   1 | xxx  
  55.    2 | b    |   3 | yyy  
  56.    2 | b    |   5 | zzz  
  57.    3 | c    |   1 | xxx  
  58.    3 | c    |   3 | yyy  
  59.    3 | c    |   5 | zzz  
  60. (9 rows)  
  61.   
  62. => SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;  
  63.  num | name | num | value  
  64. -----+------+-----+-------  
  65.    1 | a    |   1 | xxx  
  66.    3 | c    |   3 | yyy  
  67. (2 rows)  
  68.   
  69. => SELECT * FROM t1 INNER JOIN t2 USING (num);  
  70.  num | name | value  
  71. -----+------+-------  
  72.    1 | a    | xxx  
  73.    3 | c    | yyy  
  74. (2 rows)  
  75.   
  76. => SELECT * FROM t1 NATURAL INNER JOIN t2;  
  77.  num | name | value  
  78. -----+------+-------  
  79.    1 | a    | xxx  
  80.    3 | c    | yyy  
  81. (2 rows)  
  82.   
  83. => SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;  
  84.  num | name | num | value  
  85. -----+------+-----+-------  
  86.    1 | a    |   1 | xxx  
  87.    2 | b    |     |  
  88.    3 | c    |   3 | yyy  
  89. (3 rows)  
  90.   
  91. => SELECT * FROM t1 LEFT JOIN t2 USING (num);  
  92.  num | name | value  
  93. -----+------+-------  
  94.    1 | a    | xxx  
  95.    2 | b    |  
  96.    3 | c    | yyy  
  97. (3 rows)  
  98.   
  99. => SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num;  
  100.  num | name | num | value  
  101. -----+------+-----+-------  
  102.    1 | a    |   1 | xxx  
  103.    3 | c    |   3 | yyy  
  104.      |      |   5 | zzz  
  105. (3 rows)  
  106.   
  107. => SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;  
  108.  num | name | num | value  
  109. -----+------+-----+-------  
  110.    1 | a    |   1 | xxx  
  111.    2 | b    |     |  
  112.    3 | c    |   3 | yyy  
  113.      |      |   5 | zzz  
  114. (4 rows)  
  115.   
  116. 用 ON 声明的连接条件也可以包含与连接不直接相关 的条件。这种功能可能对某些查询很有用,但是需要我们仔细想想。 比如:   
  117.   
  118. => SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';  
  119.  num | name | num | value  
  120. -----+------+-----+-------  
  121.    1 | a    |   1 | xxx  
  122.    2 | b    |     |  
  123.    3 | c    |     |  
  124. (3 rows)  

 

深圳人才网 深圳招聘网 深圳人才招聘网 深圳人才大市场 

企业、个人免费注册,获取想要的 深圳 软件工程师招聘信息 月薪最低3000-8000,更有高端猎头职位! 

www.szrcwz.com    
Google 提供的广告
0
0
分享到:
评论

相关推荐

    Oracle外连接查询

    Oracle的外连接查询是数据库操作中的重要组成部分,它允许用户获取来自两个或更多表的数据,即使在某些情况下,这些表之间的连接条件不完全匹配。在理解外连接查询之前,我们首先要了解内连接,即最基础的相等连接。...

    oracle连接查询SQL性能测试

    标题“Oracle连接查询SQL性能测试”涉及的是数据库管理和优化领域,特别是针对Oracle数据库系统的SQL查询性能分析。在Oracle中,连接查询(JOINs)是整合多个表数据的关键操作,其性能直接影响到数据库的整体效率。...

    oracle-join用法

    在Oracle SQL中,Join主要分为几个类型,包括INNER JOIN、LEFT JOIN (LEFT OUTER JOIN)、RIGHT JOIN (RIGHT OUTER JOIN)以及FULL JOIN (FULL OUTER JOIN)。这些类型在Java编程中同样可以使用,通过SQL查询语句来实现...

    Oracle左连接返回多条记录中一条记录的查询语句

    Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录

    oracle 左连接 右连接学习

    Oracle 中的连接(Join)是一种强大的工具,用于将两个或多个表合并成一个结果集。在学习 Oracle 连接时,可能会感到困惑,因为有多种类型的连接,每种类型都有其特点和应用场景。下面我们将详细介绍 Oracle 中的左...

    Oracle SQL连接查询总结.docx

    ### Oracle SQL连接查询总结 #### 一、概述 在Oracle SQL中,连接查询是一种非常重要的技术,用于结合两个或多个表中的数据。连接查询能够帮助我们处理复杂的数据关系,提取出满足特定条件的信息。根据连接的方式...

    Oracle表连接方式

    根据不同的数据集和查询需求,Oracle提供了多种表连接方式,包括NESTED LOOP、HASH JOIN和SORT MERGE JOIN等。 NESTED LOOP NESTED LOOP是一种基本的表连接方式,适用于被连接的数据子集较小的情况。在nested loop...

    oracle 连接 join at

    在Oracle数据库中,连接(JOIN)是用于合并两个或多个表的数据的关键操作。当我们需要从相关的表中获取信息时,JOIN语句就显得尤为重要。在本文中,我们将深入探讨Oracle JOIN的操作及其在实际应用中的重要性。 ...

    Oracle 左连接、右连接

    本篇文章将深入探讨Oracle中的左连接(LEFT JOIN)和右连接(RIGHT JOIN),这两种连接方式都是为了在不同表之间建立联系,特别是在数据不完全匹配的情况下。 首先,我们来看一下左连接(LEFT JOIN)。左连接返回左...

    python+oracle join

    python+oracle join

    Oracle左连接,右连接.doc

    根据不同的需求,Oracle提供了多种连接方式,其中左连接(LEFT OUTER JOIN)、右连接(RIGHT OUTER JOIN)和内连接(INNER JOIN)是最常用的三种类型。 #### 二、内连接(INNER JOIN) 内连接是一种最基础的连接...

    ORACLE表连接方式

    本文将对Oracle中的几种主要表连接方式进行详细介绍:内连接(Inner Join)、自然连接(Natural Join)、左外连接(Left Outer Join)、右外连接(Right Outer Join)、笛卡尔连接(Cartesian Join)、索引连接...

    Oracle连接查询子查询以及存储过程触发器讲解

    在Oracle中,连接查询和子查询以及存储过程与触发器是数据库管理与开发中的核心概念,下面将对这些主题进行深入讲解。 首先,让我们探讨**连接查询**。在数据库操作中,连接查询用于合并两个或更多表的数据,根据...

    oracle 数据库,在C++中用连接池实现高速连接与访问.rar

    本话题将深入探讨如何在C++环境中利用连接池技术实现对Oracle数据库的高速连接与访问。 一、Oracle数据库基础 Oracle数据库提供了一套完整的数据管理解决方案,包括事务处理、数据仓库、网络数据库、安全性等。它的...

    Oracle 连接查询,日期,时间

    在Oracle中,连接查询、日期和时间操作是数据库管理中不可或缺的部分。这篇博客将深入探讨这些主题,帮助你更好地理解和利用Oracle的强大特性。 首先,我们来谈谈连接查询。在SQL中,连接查询用于合并两个或更多表...

    oracle性能优化技巧

    对于涉及多个表的连接查询,选择合适的连接顺序对于性能至关重要: 1. **驱动表**: - 应该首先选择数据量较小且有有效索引的表作为驱动表。 - 驱动表的选择直接影响到后续表的连接操作效率。 2. **交集表**: ...

    Oracle数据库3种主要表连接方式对比

    本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,简称SM Join)以及散列连接(Hash Join)。我们将探讨它们的特点、优势与劣势,以便于在实际...

Global site tag (gtag.js) - Google Analytics