Mysql求差集、并集、交集

Mysql求差集、并集、交集

1.差集

求两个集合的差集,mysql 中没有对应的关键字,可以进行合并两个集合,进行分组后如果个数大于 1,说明是重复的,如果个数为 1,说明是一个集合独自拥有的。

SELECT
 id
FROM
 (
  SELECT DISTINCT
   id
  FROM
   t_request_1
  WHERE
   id IN (
    SELECT
     id
    FROM
     t_request_2
    WHERE
     a > 0
    AND b BETWEEN '1'
    AND '2'
   )
  UNION ALL
   SELECT DISTINCT
    b.id
   FROM
    t_request_2 b
   WHERE
    feMoney > 0
   AND requestDate BETWEEN '20170909'
   AND '20171130'
 ) temp
GROUP BY
 id
HAVING
 COUNT(id) = 1
    
    
2.使用not in筛选出差集
SELECT * from task_detail_t WHERE business_types not in (SELECT DISTINCT business_types from file_send_detail_t );

3.使用LEFT OUTER join

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS NOT null

    
4.使用EXCEPT

SELECT business_types from task_detail_t EXCEPT (SELECT DISTINCT business_types from file_send_detail_t );

2.交集

下面的sql的意思是找到所有技术部年龄大于25的员工

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=2

3.并集

下面的sql的意思是找到所有技术部的员工和年龄大于30的员工

union可以自动去除重复的内容,得到不重复的结果集

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a

2.通过id号相同,对表1和表2进行内连接,取相同的部分,不相同的部分省略掉。

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
inner JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id


3.union all

SELECT business_types from task_detail_t UNION all SELECT DISTINCT business_types from file_send_detail_t ;



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值