zoukankan      html  css  js  c++  java
  • Sql的各种连接用法(cross join、inner join、full join)

    1.名词解释:

        笛卡尔乘积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积,又称直积,表示X x Y ,第一个对象是X的成员,而第二个对象是Y的所有可能有序列的其中的一个成员。假设集合A={a,b},集合B={0,1, 2},则两个笛卡尔积为{(a,0),(a,1),(a,2), (b,0),(b,1),(b,2)}

      

    2.原址参考:http://ashui.net/archives/2013/552.html

        1> 交叉连接CROSS JOIN

        SELECT * FROM table1 CROSS JOIN table2

        如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;

        select * from table1 a cross join table2 b where a.id=b.id (注:cross join后加条件只能用where,不能用on)

        

        2>内连接INNER JOIN

        SELECT * FROM table1 INNER JOIN table2 

        内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。 

        SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column

        

        3>外连接OUTER JOIN

        1)左外连接LEFT [OUTER] JOIN

         SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column

        2)右外连接RIGHT [OUTER] JOIN

         SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column

        3)全外连接full [outer] join

         显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集

    3.cross join用法,项目里实际运用的案例。      

         select * from
         (
            select `int0` as pv from XXX
              where hdfs_par = '20170525' and target_key='zaixinkefu_faq'
         ) t1
        cross join
        (
             select max(`int0`) as max_pv from XXX 
                 where hdfs_par between '20170519' and '20170525'
                  and target_key='zaixinkefu_faq'
         ) t2

        运行结果:pv,max_pv

  • 相关阅读:
    输入url到页面渲染发生了什么
    echarts缓存处理
    jquery 使用mock
    vue axios的封装
    css3实现盒子宽度随文字宽度自适应
    VUE中使用bus传值时,接收页面多次触发接收方法的问题
    原生js 文件 上传 下载封装
    微信小程序使用第三方包
    为什么我们要使用Async、Await关键字
    服务大众的人工智能---认知服务
  • 原文地址:https://www.cnblogs.com/jianglanyy/p/6907638.html
Copyright © 2011-2022 走看看