1. 表的加减法
1.1 什么是集合运算
集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。
在标准 SQL 中, 分别对检索结果使用 UNION, INTERSECT, EXCEPT 来将检索结果进行并,交和差运算, 像UNION,INTERSECT, EXCEPT这种用来进行集合运算的运算符称为集合运算符。
以下的文氏图展示了几种集合的基本运算。
在数据库中, 所有的表–以及查询结果–都可以视为集合, 因此也可以把表视为集合进行上述集合运算, 在很多时候, 这种抽象非常有助于对复杂查询问题给出一个可行的思路。
1.2 表的加法 – UNION
1.2.1 UNION
创建表 product2:
CREATE TABLE product2(
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER,
purchase_price INTEGER,
regist_date DATE,
PRIMARY KEY(product_id)
);
插入数据sql如下:
INSERT INTO product2 VALUES(‘0001’, ‘T恤衫’, ‘衣服’, 1000, 500, ‘2009-09-20’);
INSERT INTO product2 VALUES(‘0002’, ‘打孔器’, ‘办公用品’, 500, 320, ‘2009-09-11’);
INSERT INTO product2 VALUES(‘0003’, ‘运动T恤’, ‘衣服’, 4000, 2800, NULL);
INSERT INTO product2 VALUES(‘0009’, ‘手套’, ‘厨房用具’, 70, 50, ‘2009-09-20’);
INSERT INTO product2 VALUES(‘0010’, ‘水壶’, ‘厨房用具’, 128, 80, ‘2009-09-21’);
SELECT product_id, product_name
FROM product
UNION
SELECT product_id, product_name
FROM product2;
上述结果包含了两张表中的全部商品。 你会发现,这就是我们在学校学过的集合中的并集运算,通过文氏图会看得更清晰(图 7-1)