介绍一下进行记录加法运算的 UNION(并集)。
1、创建两个表
--商品表1
CREATE TABLE Product1 (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));
--商品表2
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));
2、插入数据
--商品表1
BEGIN TRANSACTION;
INSERT INTO Product1 VALUES ('0001', 'T恤衫' ,'衣服', 1000, 500, '2008-09-20');
INSERT INTO Product1 VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
COMMIT;
--商品表2
BEGIN TRANSACTION;
INSERT INTO Product2 VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product2 VALUES ('0009', '手套', '衣服', 800, 500, NULL);
INSERT INTO Product2 VALUES ('0010', '水壶', '厨房用具', 2000, 1700, '2009-09-20');
COMMIT;
注:
不同的DBMS的事务处理的语法也不尽相同。上面的DML语句在 MySQL中执行时,需要将“BEGIN TRANSACTION; ”更改为“START TRANSACTION;”。在 Oracle和 DB2中执行时,无需用到“BEGIN TRANSACTION; ”部分(请删除)。
3、使用UNION对表进行加法运算
SELECT product_id, product_name FROM Product1 UNION SELECT product_id, product_name FROM Product2;
执行结果:
4、注意事项
1、UNION 等集合运算符通常都会除去重复的记录。假如有重复的记录也只显示一条。
2、想在 UNION 的结果中保留重复行的话,只需要在 UNION 后面添加 ALL 关键字就可以了。例如:
SELECT product_id, product_name FROM Product1 UNION ALL SELECT product_id, product_name FROM Product2;
3、作为运算对象的记录的列数必须相同。不能使用一个表的两个字段和另一个表的三个字段来运算,字段数要保持一致。
4、可以使用任何SELECT语句,但ORDER BY子句只能在语句最后使用一次。例如:
SELECT product_id, product_name FROM Product1 WHERE product_type = '厨房用具' UNION SELECT product_id, product_name FROM Product2 WHERE product_type = '厨房用具' ORDER BY product_id;
结果: