集合运算(UNION)

表的加法

集合运算:就是满足统一规则的记录进行的加减等四则运算。
通过集合运算可以得到两张表中记录的集合或者公共记录的集合,又或者其中某张表中记录的集合。
集合运算符:用来进行集合的运算符。

UNION(并集),集合运算符会取出重复记录(去重)
-- 对两张表进行加法计算:product表+product2表
select product_id, product_name from product
union
select product_id, product_name from product2;
注意点:
1.作为运算对象的记录的列数必须相同,列数不一致会发生错误导致无法加法运算
2.作为运算对象的记录中累的类型必须一致,否则会发生错误
3.可以使用任何select子句,但order by只能在最后使用一次
SELECT product_id, product_name
	FROM Product
 WHERE product_type = '厨房用具'
UNION
SELECT product_id, product_name
	FROM Product2
 WHERE product_type = '厨房用具'
ORDER BY product_id;
All选项——包含重复的集合运算 ,可以保留重复数据
select product_id, product_name from product
union all
select product_id, product_name from product2;
INTERSECT——选取表中公共部分(mysql不支持此功能)

Oracle, SQL Server, DB2, PostgreSQL

SELECT product_id, product_name FROM Product
INTERSECT
SELECT product_id, product_name FROM Product2
ORDER BY product_id;
EXCEPT——记录的减法(语法与union相同,但mysql不支持此功能)
-- Oracle中使用MINUS而不是EXCEPT
SELECT product_id, product_name
 FROM Product
MINUS
SELECT product_id, product_name
 FROM Product2
ORDER BY product_id;

结果中只包含 Product 表中记录除去 Product2
表中记录之后的剩余部分。

建表语句

-- 创建Product2结果与之前Product相同
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));

-- 插入数据
-- MySQL
START TRANSACTION;

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', '手套', '衣服', 800, 500, NULL);
INSERT INTO Product2 VALUES ('0010', '水壶', '厨房用具', 2000, 1700, '2009-09-20');
COMMIT;
CREATE TABLE Product
(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));

INSERT INTO Product VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

COMMIT;
CREATE TABLE Product
(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));

INSERT INTO Product VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

COMMIT;
原文地址:https://www.cnblogs.com/sanzashu/p/10996108.html