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