zoukankan      html  css  js  c++  java
  • SQL中JOIN的几种常见用法

    先假设有表ab如下:

               a                                                             b

    ----------------------                     --------------------------------

    |  symbol  |  sname  |                 |   symbol  |  tdate  |  tclose  |

    --------------------------                 -------------------------------------

    |       A     |      B     |                 |       A      |     C    |     D      |

    |       G     |      H     |                 |       X      |     E    |     F      |

    --------------------------                 ------------------------------------

     

    内联接:

    SELECT a.symbol , a.sname , b.tdate , b.tclose

    FROM a

          INNER JOIN b

         ON a.symbol = b.symbol

    其中INNER关键字可以省略。

    此语句只有在表ab中都有匹配行时,才返回。

    所以本例中返回结果为:

                symbol   sname   tdate   tclose

                    A          B          C        D        --这一行即满足a.symbol = b.symbol

     

     

    外联接:

    SELECT a.symbol , a.sname , b.tdate , b.tclose

    FROM a

          RIGHT | LEFT | FULL OUTER JOIN b

         ON a.symbol = b.symbol

    其中OUTER关键词可以省略。

    RIGHT JOIN:当右表格(即表b)中的行在左表中没有匹配行时,也返回。返回的记录中,选择的左表的列的内容为NULL

        所以本例中返回结果为:

              symbol   sname   tdate   tclose

                   A          B          C        D        --这一行即满足a.symbol = b.symbol

                  null       null         E        F        --这一行里,对应的b.symbol没有在表a中找到相同的a.symbol

     

    LEFT JOIN:当左表格(即表a)中的行在右表中没有匹配行时,也返回。返回的记录中,选择的右表的列的内容为NULL

        所以本例中返回结果为:

             symbol   sname   tdate   tclose

                   A          B          C       D        --这一行即满足a.symbol = b.symbol

                   G          H         null    null       --这一行里,对应的a.symbol没有在表b中找到相同的b.symbol

     

    FULL JOIN:可以把它理解为LFETRIGHT的集合,某表中某一行在另一表中无匹配行,则相应列的内容为NULL

        所以本例中返回结果为:

             symbol   sname   tdate   tclose

                   A          B          C       D        --这一行即满足a.symbol = b.symbol

                   G          H         null    null       --这一行里,对应的a.symbol没有在表b中找到相同的b.symbol

                  null       null         E        F       --这一行里,对应的b.symbol没有在表a中找到相同的a.symbol

                   A          B          C        D        --这一行即满足a.symbol = b.symbol

     

     

     

    交叉联接:

    SELECT a.*,b.*

    FROM a

          CROSS JOIN b

    交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

    也就是相当于两个表中的所有行进行排列组合。

    若表aX行,表bY行,则将返回XY行记录。

        所以本例中返回结果为:

             symbol   sname   tdate   tclose

                   A          B          C       D

                   G          H          C       D

                   A          B          E       F

                   G          H          E       F

  • 相关阅读:
    干点小事的常用的着的语句
    hadoop测试环境主配置简例
    开源集
    Linux系统重装与还原
    POJ1679 The Unique MST 【次小生成树】
    No value for key [org.hibernate.impl.SessionFactoryImpl 异常解决
    Java程序猿学习C++之数组和动态数组
    LightOj 1123-Trail Maintenance(最小生成树:神级删边)
    分布式协议之两阶段提交协议(2PC)和改进三阶段提交协议(3PC)
    HDU 4847 陕西邀请赛A(水)
  • 原文地址:https://www.cnblogs.com/qunyang/p/2658507.html
Copyright © 2011-2022 走看看