• 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

  • 相关阅读:
    scala入门-03基础知识->表达式
    scala入门-02基础知识->方法
    jetty命令行方式启动jetty-runner.jar 容器
    本地开发spark代码上传spark集群服务并运行(基于spark官网文档)
    Linux下查看进程和线程
    scala入门-01-IDEA安装scala插件
    spark-1.2.0 集群环境搭建
    ubuntu每次登陆都用root账号登陆
    hadoop2.6.0版本集群环境搭建
    spark ssh配置
  • 原文地址:https://www.cnblogs.com/jianglanyy/p/6907638.html
Copyright © 2020-2023  润新知