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

时间: 2024-10-22 00:57:49

Sql的各种连接用法(cross join、inner join、full join)的相关文章

Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)

转载http://www.cnblogs.com/shenqiboy/p/3260105.html 我们知道在SQL中一共有五种JOIN操作:INNER JOIN.LEFT OUTER JOIN.RIGHT OUTER JOIN.FULL OUTER JOIN.CROSS JOIN        内连接.Sql: SELECT [t0].[GroupName], [t1].[UserName] FROM [Group] AS [t0] INNER JOIN [User] AS [t1] ON (

SQL Tuning 基础概述06 - 表的连接方式:Nested Loops Join,Merge Sort Join & Hash Join

nested loops join 嵌套循环 merge sort join 排序合并 hash join 哈希连接 nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_nl() merge sort join(排序合并)   驱动表和被驱动表都是最多访问1次,无驱动顺序,需要排序(SORT_AREA_SIZE),连接条件是<>或like导致无法使用

sql用逗号连接多张表对应哪个join?

转自:http://blog.csdn.net/huanghanqian/article/details/52847835 四种join的区别已老生常谈: INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只要其中一个表中存在匹配,就返回行 那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢.

SQL的各种连接Join详解

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL  RIGHT JOIN.SQL FULL JOIN,其中前一种是内连接,后三种是外链接. 假设我们有两张表,Table A是左边的表,Table B是右边的表. id name 1 Google 2 淘宝 3 微博 4 Facebook id address 1 美国 5 中国 3 中国 6 美国 一

SQL 等值连接(内连接)、自然连接(Out join,Left join,Right join)的区别

https://www.cnblogs.com/hu-yewen/p/5821645.html 首先来看自然连接的定义: 自然连接:是一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉. 一个简单的例子,将下列关系R和S进行自然连接: R: A    B     C a    b     c b    a     d c    d     e d    f     g S: A    C    D a    c    d d    f    g b

走向面试之经典的数据库基础:二、SQL进阶之case、子查询、分页、join与视图

一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHEN value2 THEN returnvalue2 WHEN value3 THEN returnvalue3  ELSE defaultreturnvalue END (2)具体使用示例: 假设我们有一个论坛网站,其中有一张User表{ UId,Name,Level },Level是一个int类型,代

1. SQL读书笔记——SQL中的连接(1)

<SQL学习指南>中的第5章 1.连接: 在某种机制下,需要将多个表中的数据进行整合到一起,即同一个查询的结果集中包含来自两个或者两个以上的表,这种机制被称为连接(join). 1.1 ANSI连接语法 本文采用的都是符合SQL92版本的ANSI SQL标准,所有的主流数据库都采用了SQL92的连接语法.由于这些数据库都出现SQL92标准发布之前,同时存在一些旧的连接语法,如下所示: 例子1: SELECT e.fname, e.lname, d.`name` FROM employee e

SQL多表连接查询

SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中不会这样建表,实际开发中这两个表会有自己不同的主键.) 一.外连接 外连接可分为:左连接.右连接.完全外连接. 1.左连接  left join 或 left outer join SQL语句:select * from student left join course on student.

【转】SQL中内连接和外连接

如表     -------------------------------------------------     table1 | table2 |     -------------------------------------------------     id name |id score |     1 lee |1 90 |     2 zhang |2 100 |     4 wang |3 70 |     -------------------------------