• SQL入门学习6-集合运算


    7-1 表的加减法

    集合运算

    集合运算就是对满足同一规则的记录,进行的加减等四则运算。

    1.1 表的加法——UNION

    表之间进行并集运算。
    语法:

    SELECT 对应列1,对应列2……
    FROM 表1
    UNION
    SELECT 对应列1,对应列2……
    FROM 表2;
    

    UNION等集合运算符,通常都会出去重复的记录。
    重复的记录
    如果对应列内容 完全相同,而其他列有所不同,那也算是重复的记录。也就是说,如果SELECT之后的结果,完全相同的两条记录,会删掉重复的一条。

    注意1
    作为运算对象的记录的列数以及内容和类型必须相同。
    注意2
    可以使用任何SELECT语句,但是ORDER BY子句只能在最后一次使用。

    包含重复行的并集——ALL

    与UNION相似,但是如果有重复的记录,不会进行删除。

    选取公共部分,交集——INTERSECT

    语法与UNION完全相同。
    作用是选取相交,也就是交集部分。
    如果希望保留重复行,使用INTERSECT ALL


    记录的减法——EXCEPT

    语法与UNION完全相同。
    作用:集合A EXCEPT 集合B ,
    集合A减去与集合B相交的部分。
    在其他DBMS
    在Oracle中,
    用MINUS代替EXCEPT。


    7-2 联结(以列为单位,对表进行联结)

    联结运算,通俗地说就是把其他表的列添加过来。

    内联结——INNER JOIN

    例:

    SELECT T.name , T.age , T.id , S.id , S.address,
    FROM STU AS T INNER JOIN  STU2 AS S
    ON T.id  = S.id
    

    要点

    • FROM 中要使用多张表,建议使用别名,提高可读性。
    • 使用ON子句。
      我们可以在ON之后指定两张表联结所使用的列(联结键)。
      在使用到多个联结条件时,可以使用AND,OR进行。
      联结时必须有ON子句,并且要写在FROMWHERE子句之间。
    • 使用联结时SELECT子句中的列需要按照<表的别名>.<列名>的格式进行。

    外联结——OUTER JOIN

    内联结一样,同样是联结功能。但是只要数据存在于某一表当中,就能够读取出来。而内联结会将那些记录舍去。
    虽说如此,但是表中不存在的信息我们还是无法得到,数值都被置位了NULL。
    例:

    SELECT T.name , T.id , S.class, S.age
    FROM STU AS T LEFT OUTER JOIN STU2 AS S
    ON T.id = S.id;
    

    外联结要点

    • 选取主表
      在进行外联结的时候,要进行主表的选取。
      使用LEFT或者RIGHT关键字进行主表的选取。
      选取主表之后,就会基于主表,开始进行联结。若主表中有些记录不满足联结的条件,则对应的联结列置位NULL。
      所以结果的记录数应该与主表记录数目相同。

    三张表以上的联结

    原则上联结表的数量并没有进行限制。
    例:

    SELECT T.id,T.a ,T.c ,S.a,S.b ,W.a,W.b
    FROM STU AS T INNER JOIN STU2 As S
        ON T.id = S.id
            INNER JOIN STU3 AS W
                ON T.id = W.id
    WHERE W.id = '111';
    

    按照例程,是一对、一对地嵌套下去。
    外联结也是同理。


    交叉联结

    交叉联结时所有联结运算的基础。但是平时不怎么使用。
    对于满足相同规定的表进行交叉连接的集合运算符是
    CROSS JOIN(笛卡尔积)
    进行交叉联结时无法使用内连接和外联结中所使用的ON子句。因为交叉联结时对两张表中的全部记录进行交叉组合。因此结果中的记录通常是两张表中行数的乘积
    结果就是两个表记录的相互组合。
    类似于集合的乘法。


  • 相关阅读:
    Codeforces Round #365 (Div. 2) D
    Codeforces Round #414 C. Naming Company
    Codeforces Round #365 (Div. 2) B
    LA 6893 The Big Painting(矩阵Hash)
    Gym100783C Golf Bot(FFT)
    POJ 2481 Cows(树状数组)
    POJ 2352 Stars
    POJ 2299 Ultra-QuickSort(树状数组+离散化)
    LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)
    LightOJ 1356 Prime Independence(质因数分解+最大独立集+Hopcroft-Carp)
  • 原文地址:https://www.cnblogs.com/subaiBlog/p/5492095.html
Copyright © 2020-2023  润新知