SQL入门学习6-集合运算

时间:2023-03-09 07:48:50
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子句。因为交叉联结时对两张表中的全部记录进行交叉组合。因此结果中的记录通常是两张表中行数的乘积

结果就是两个表记录的相互组合。

类似于集合的乘法。