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

原文地址:https://www.cnblogs.com/jianglanyy/p/6907638.html