• SQL中JOIN和UNION区别及用法


    转载:http://chengheng1984.blog.163.com/blog/static/17947412201012215738844/

    JOIN用于按照ON条件联接两个表,主要有四种:

    INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。我理解的是只要记录不符合ON条件,就不会显示在结果集内。

    LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。

    RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。

    FULL JOIN / FULL OUTER JOIN: 完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。

    JOIN的基本语法:

    Select table1.* FROM table1 JOIN table2 ON table1.id=table2.id

    UNION运算符

    将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同。另一个Select语句的结果集列名将被忽略。

    其中两种不同的用法是UNION和UNION ALL,区别在于UNION从结果集中删除重复的行。如果使用UNION ALL 将包含所有行并且将不删除重复的行。

     

    (ZZ)

    1.交集

    Inner Join, 等价于select * from a b where a.id=b.id ,*表示a.*,b.*,一笔纪录你可以取出a,b的栏位

    left join 或right join 可以表示差集 ,一笔纪录你可以取出a,b的栏位

    full join才是表示并集,select * from a full join b on a.id=b.id

    ,a.id=b.id 为一笔纪录,其他不等的纪录都可以显示,例如a的栏位和null栏位组合,或者null栏位和a组合~

    另外一个cross join,如果不加上where条件,就是a的纪录和b的纪录任一组合,加入a有15笔,b有15笔,那么 a cross join b就有225笔,不会有null栏位(当然原来表有另当别论)

    cross join加上where 就是inner join

    select * from a crossjoin b where a.id = b.id等价于select * from a full join b on a.id=b.id

    P.S. not in-->select * from a where a.id in (select b.id from b),*表示a你只可以取出a,b的栏位,not exists,也是如此,这些其实不算是交集或者差集的讨论的范围,每次只是对一个表的纪录进行选取而已,看这句select * from a where a.id not in ('1','2')这个算就不能算是差集

    2.UNION表示并集,我觉得不可以完全这样讲

    union 和join不一样,union这个运算子是将资料列合并,而join是将栏位合并(我前面所讲)!

    如果从栏位合并来讲,full join 算是并集,inner join 算是交集!left join 或right join 不完全是差集,也包括交集的结果,具体你的语句的查询结果如何还是要看实际的语句,就如cross join,加上where就变成inner join,前后的结果相差甚远

     

    网上找了一遍,发现一些新东西:

    并集 :union: select × from a union (all) select × from b aUb

    交集: intersect: select × from a intersect select × from b anb

    差集: minus: select × from a minus select × from b a-b

  • 相关阅读:
    【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏
    【洛谷2055】【CJOJ2487】【ZJOI2009】 假期的宿舍
    【NOIP2012】【CJOJ1093】【洛谷1083】借教室
    如何正确的深蹲
    6种食物
    9大食物 你都吃过几种?
    食物
    如何正确蹲马步 蹲马步的正确方法
    这才是俯卧撑的正确做法!你真的会做俯卧撑吗?
    如何保持良好的状态
  • 原文地址:https://www.cnblogs.com/bian1314yuan/p/4397573.html
Copyright © 2020-2023  润新知