`
youanyyou
  • 浏览: 191899 次
  • 性别: 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 SQL连接查询总结.docx

    Oracle SQL连接查询总结 缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表,Table A 是左边的表。Table ...

    oracle-join用法

    oracle外连接(join)详解及详细实例,需要列子的可以看看。

    python+oracle join

    python+oracle join

    数据库oracle各种连接(+)解释.pdf

    连接无非是这几个  --内连接和where相同  inner join  --左向外连接,  left join  --右向外连接,  right join  --完整外部连接,  full join  --交叉连接,也称笛卡儿积。 cross join .......

    Oracle的三种表连接方式

    Oracle的三种表连接方式 详细讲述• sort merge join(SMJ) • nest loop(NL) • hash join(HJ)

    oracle 连接 join at

    NULL 博文链接:https://mlaaalm.iteye.com/blog/692681

    Oracle 数据库连接查询SQL语句

    外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。 1.左连接 (left [outer] join) 左外连接就是将左...

    Oracle中sql语句(+)符号代表连接的使用讲解

    oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b SELECT a.*, b.* from a = b(+)就是一个左连接...

    深入Oracle的left join中on和where的区别详解

    今天遇到一个求某月所有天数的统计结果,如果某日的结果是0也需要显示出来...一开始我用的左连接,用on做为两表关联条件,用where作为过滤条件,但是发现0的数据根本不显示,后来把where关键字去掉,把过滤条件都放到on

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:用于连接到oracle数据库,也可实现用户的切换 用法:conn 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 ...

    Oracle 外连接实现代码

    对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。

    left-right-join.zip_join_oracle

    彻底搞懂Oracle的左外连接和右外连接(以数据说话)

    oracle中left join和right join的区别浅谈

     A left join B 的连接的记录数与A表的记录数同   A right join B 的连接的记录数与B表的记录数同   A left join B 等价B right join A   table A:   Field_K, Field_A   1 a   3 b...

    oracle 左右链接

    oracle中左右连接left /right join 貌似不起作用,使用(+)代替。

    Oracle Database 11g 标准课程第五章 多表连接

    Oracle Database 11g 标准课程第五章 多表连接查询使用Join …on创建连接

    Oracle中三种表连接算法的总结

    1. 嵌套循环连接 (NESTED LOOP Join)嵌套连接把要处理的数据集分为外循环(驱动数据源)和内循环(被驱动数据源),外循环只执行一次(先执行),内循环执行的次数等于外循环执行的数据集个数。 这种连接的好处是...

    hash join算法原理

    针对这种情况,Oracle在连接键利用一个hash函数将build input和probe input分割成多个不相连的分区(分别记作Si和Bi),这个阶段叫做分区阶段;然后各自相应的分区,即Si和Bi再做Hash join,这个阶段叫做join阶段。

    sqljoin示例

    sqljoin示例,包含左联右联内联以及外联等连接方式是学习SQL必不可少的知识

Global site tag (gtag.js) - Google Analytics