在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
mysql的常见场景,获取两个数据集的交集和差集步骤1、两个集合的结构要一致,对应的字段数,字段类型 2、将两个集合用 UNION ALL 关键字合并,这里的结果是有重复的所有集 3、将上面的所有集 GROUP BY id 4、最后 HAVING COUNT(id)=1,等于1的意思是只出现了一次,所以这个是差集,如果等于2,那么就是交集 代码演示差集下面的sql有明显的问题,不过这个只是一个示意, 从一个表中查询不需要用到交集和差集,条件可以合并在一起直接查询出来的.能明白意思就好 下面的sql的意思是找到所有非技术部的员工的id,code和name SELECT a.* FROM( SELECT id,code,name FROM test_emp UNION ALL SELECT id,code,name FROM test_emp WHERE dept='JSB' )a GROUP BY a.id HAVING COUNT(a.id)=1 交集下面的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 并集下面的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 mysql中交集,并集,差集,左连接,右连接学习mysql也有一个月啦,在这个月中,都是按照需求对数据表进行一些基本操作,在这个过程当中,经常使用到左连接,右连接,交集,取差集等,现在对其基本操作进行归纳总结。 数据源: 表一:
表二:
左连接:根据某个等值条件,对表进行连接。本实验是在id相同的情况下进行左连接 code: select a.*,b.school FROM (SELECT * FROM mike1.test001) a LEFT JOIN (SELECT id,school FROM mike1.test003 ) b ON a.id=b.id 结果如下:以表1为根基,对表2进行连接,匹配相同的id号 右连接:以表2为根基,通过id相同的字段对其进行右连接。 code: select a.*,b.school FROM (SELECT * FROM mike1.test001) a right JOIN (SELECT id,school FROM mike1.test003 ) b ON a.id=b.id 结果: 你们觉得结果是有问题还是没有问题呢? 交集:通过id号相同,对表1和表2进行内连接,取相同的部分,不相同的部分省略掉。 code: select a.*,b.school FROM (SELECT * FROM mike1.test001) a inner JOIN (SELECT id,school FROM mike1.test003 ) b ON a.id=b.id 结果: 差集:差集用的还是比较多的,类似于我们数学中学的,交、合、并等集合的操作。 code1:取表2与表1相同的部分,是我们上面取交集的第二种方法。 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 结果: code2:取表1中的id在表2中的id的差值,最后列出数据。 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 null 结果: 以上为个人经验,希望能给大家一个参考,也希望大家多多支持极客世界。 |
请发表评论