SQL——集合运算

SQL作用在关系上的union、intersect、except运算对应数学集合论中的并、交、差运算。

通用形式:

关系1 [集合运算方式] 关系2;

1、并运算

示例

(
  SELECT * FROM instructor WHERE name='smith')
UNION
(
  SELECT * FROM instructor WHERE dept_name = 'history');

《SQL——集合运算》 原表
《SQL——集合运算》 结果表

与select子句不同,union运算自动去除重复的结果集元组。如果要保留重复数据,则应用union all 代替 union。

值得注意的是,参与并运算中select的属性数目应该相同,否则会报以下错误:

The used SELECT statements have a different number of columns

并运算生成的结果关系的属性名是是根据关系1而定,例如:

(
  SELECT name,salary FROM instructor)
UNION
(
  SELECT dept_name,building FROM department);

《SQL——集合运算》 运算结果表

2、交运算:

同理的交运算运算:intersect 和 intersect all。

示例:

(
  SELECT dept_name
  FROM instructor
  WHERE name = 'smith'
)intersect(
  SELECT dept_name
  FROM department
);

3、差运算:

差运算也有 except 和 except all两种操作。
所谓差运算是取出关系1中有但关系2没有的元组

(
  SELECT dept_name
  FROM instructor
)EXCEPT (
  SELECT dept_name
  FROM department
  WHERE dept_name = 'biology'
);

注:在MySQL中,是没有交,差两种运算操作的,所以的另选他法。
交运算(利用连接,往后会提到):

SELECT DISTINCT dept_name
FROM instructor
  INNER JOIN department USING (dept_name)

差运算


SELECT dept_name
FROM department
LEFT JOIN instructor USING (dept_name)
WHERE instructor.dept_name IS NULL ;

当然,也可以分别利用in 和not in 分别实现上面的两种集合运算,从字面意义也很容易理解,不过in和 not in不适用大数据集合的运算。

    原文作者:薛定谔与猫的故事
    原文地址: https://www.jianshu.com/p/594c1b04d438
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞