SQL标准集合运算符,UNION,INTERSECT和MINUS学习

Union

  • 集合的并集,后不带all表示相同值取一个即可,带all表示取全部值

    示例:
    customers:
    SQL标准集合运算符,UNION,INTERSECT和MINUS学习_第1张图片
    offices:
    SQL标准集合运算符,UNION,INTERSECT和MINUS学习_第2张图片
    employee:
    在这里插入图片描述
    到作者码云获取本次示例数据库

  1. UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions]
    UNION [ALL | DISTINCT]
    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions];
    
  2. 针对上表测试
    选择三个表所包含的所有国家(去重)

    SELECT country FROM customers
    UNION
    SELECT country FROM offices
    UNION
    SELECT country FROM employee
    ORDER BY country;
    

    结果
    在这里插入图片描述

  3. union all语句:从所给表中选取所有的选定的属性(也有重复的值)
    选择三个表所包含的所有国家(不去重)
    表同上

    SELECT country FROM customers
    UNION ALL
    SELECT country FROM offices
    UNION ALL
    SELECT country FROM employee
    ORDER BY country
    

    结果
    在这里插入图片描述

  4. 既然是select就可以使用where

    把顾客表的法国城市和办公室表的美国城市找出来

    例如

    SELECT city FROM customers
    WHERE country = 'France'
    UNION ALL
    SELECT city FROM offices
    WHERE country = 'USA'
    
    ORDER BY city
    

    结果
    SQL标准集合运算符,UNION,INTERSECT和MINUS学习_第3张图片

Intersect

  • 交集:取两个集合中共有的部分
  • 因为mysql中没有提供专有的intersect方法,所以有以下两个方式来实现操作
  • 例题:要求选择顾客表和办公室表都有的城市。
  1. 使用多表连接来实现

    SELECT DISTINCT
        country
    FROM
        customers
    INNER JOIN offices USING (country);
    

    结果
    在这里插入图片描述

  2. 使用子查询来实现

    SELECT DISTINCT
        country
    FROM
        customers
    WHERE
        country IN (SELECT country FROM offices)
    

    结果
    在这里插入图片描述

差集minus

  • 差集:取两个集合中一个有而另一个没有的部分
  • mysql也没有提供差集的函数,同样和交集一样,有两种实现方式
  • 例题:选择顾客表有而办公室表没有的国家
  1. 使用多表连接实现,左外连接的话where右表相应字段为空,右外连接的话左表相应字段为空
    SELECT
        customers.country
    FROM
        customers
    LEFT JOIN offices USING (country)
    WHERE
        offices.country IS NULL;
    
    结果
    在这里插入图片描述
  2. 使用子查询
    SELECT
        country
    FROM
        customers
    WHERE
        country NOT IN (SELECT country FROM offices);
    
    结果同上

你可能感兴趣的:(MySQL和mariadb学习)