Sql的各种连接用法(cross joininner joinfull join)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql的各种连接用法(cross joininner joinfull 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











以上是关于Sql的各种连接用法(cross joininner joinfull join)的主要内容,如果未能解决你的问题,请参考以下文章

SQL中关于JoinInner JoinLeft JoinRight JoinFull JoinOn Where区别

MySql子查询(wherefromexists)及连接查询(left joinright joininner joinunion join)

关于SQL数据库中cross join 和inner join用法上的区别?

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别