表的加法

集合运算:就是满足统一规则的记录进行的加减等四则运算。

通过集合运算可以得到两张表中记录的集合或者公共记录的集合,又或者其中某张表中记录的集合。

集合运算符:用来进行集合的运算符。

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;

最新文章

  1. 通过SmartGit把java maven项目传到码云
  2. 集合类List,set,Map 的遍历方法,用法和区别
  3. Ajax最详细的参数解析和场景应用
  4. 每日英语:Success Outside the Dress Code
  5. 转载:邮箱正则表达式Comparing E-mail Address Validating Regular Expressions
  6. C#异常之(已有打开的与此 Command 相关联,已有打开的与此命令相关联的 DataReader,必须首先将它关闭。)
  7. [源码]解析 SynchronousQueue 上界,下界.. 数据保存和数据传递. 堵塞队列. 有无频繁await?
  8. Document Object Model
  9. SpringBoot系列: Spring项目异常处理最佳实践
  10. Vue.js货币格式化函数
  11. java实现随机产生6位数的方法总结
  12. [Luogu4986] 逃离
  13. 创建一个Scalar-valued Function函数来实现LastIndexOf
  14. JVM总结(三):类文件结构
  15. JVM的Client模式与Server模式
  16. MiniNet自定义拓扑
  17. VS2010安装包制作全过程图解
  18. 解决FileInputStream读取文本时 最后端会多出字符问题
  19. hive中修改序列化格式分隔符
  20. 卸载Linux自带的JDK

热门文章

  1. noip模拟赛 Chtholly Nota Seniorious
  2. 络谷 P2865 [USACO06NOV]路障Roadblocks
  3. JAVA的堆和栈(转)
  4. insert into varchar2(8000)
  5. ORACLE11G设置IP訪问限制
  6. scp and tar
  7. luogu1005 矩阵取数游戏
  8. framebuffer的入门介绍-实现程序分析【转】
  9. 洛谷 P1032 [ NOIP 2002 ] 字串变换 —— 字符串+bfs
  10. C++ this指针 全部