zoukankan      html  css  js  c++  java
  • 集合运算(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;
    
  • 相关阅读:
    利用ajax.dll类库文件实现无刷新
    给input的按钮控件添加onserverclick事件
    wpf datagrid 如何让标头 及内容居中
    MVC中Url请求与控制器的默认约定
    ASP.NET MVC中实现多个按钮提交的几种方法
    default(T)的含义
    MVC中Html.Listbox的用法实例
    编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法
    编写高质量代码改善C#程序的157个建议——建议100:静态方法和实例方法没有区别
    编写高质量代码改善C#程序的157个建议——建议99:重写时不应使用子类参数
  • 原文地址:https://www.cnblogs.com/sanzashu/p/10996108.html
Copyright © 2011-2022 走看看