mysql差集怎么操作 mysql差集语句

mysql数据库如何做这样的差集查询?select URL from TABLEA
whereurl not in (select URL from TABLEB where APP_NAME=TABLEA.APP_NAME)
mysql里面求两个表的差集只是查询,不做删除吧:
SELECT * FROM 表1 WHERE name NOT IN (
SELECT name FROM 表2
)
mysql两表汇总后再得到两表的交集和差集,请问怎么实现?CREATE TABLE A (
`C1`VARCHAR(10),
`C2`VARCHAR(10),
`C3`VARCHAR(10),
`C4`VARCHAR(10),
`C5` INT
);
INSERT INTO A
SELECT '华北','辽宁','沈阳', '20020202', 2UNION ALL
SELECT '华东','山东','青岛', '18020133', 3UNION ALL
SELECT '华北','北京','北京', '7193', 7UNION ALL
SELECT '华北','北京','北京', '8358', 5UNION ALL
SELECT '华北','北京','北京', '9773', 8UNION ALL
SELECT '华东','山东','青岛', '18020133', 5 ;
CREATE TABLE B (
`C1`VARCHAR(10),
`C2`VARCHAR(10),
`C3`VARCHAR(10),
`C4`VARCHAR(10),
`C5` INT
);
INSERT INTO B
SELECT '华北', '辽宁', '沈阳', '20020202', 5 UNION ALL
SELECT '华东', '山东', '青岛', '18020133', 6 UNION ALL
SELECT '华北', '北京', '北京', '7193', 2UNION ALL
SELECT '华东', '甘肃', '兰州', '7364', 3UNION ALL
SELECT '华东', '湖北', '武汉', '7512', 7UNION ALL
SELECT '华东', '湖北', '武汉', '7512', 2UNION ALL
SELECT '华东', '江苏', '常州', '7582', 5UNION ALL
SELECT '华东', '江苏', '淮安', '7670', 7;
SELECT
IFNULL(A.`C1`, B.`C1`) AS `区域`,
IFNULL(A.`C2`, B.`C2`) AS `省份`,
IFNULL(A.`C3`, B.`C3`) AS `城市`,
IFNULL(A.`C4`, B.`C4`) AS `编码`,
SUM(A.`C5`) AS `表A销量`,
SUM(B.`C5`) AS `表B销量`
FROM
A LEFT JOIN B
ON (
A.`C1` = B.`C1`AND
A.`C2` = B.`C2`AND
A.`C3` = B.`C3`AND
A.`C4` = B.`C4`
)
GROUP BY
IFNULL(A.`C1`, B.`C1`),
IFNULL(A.`C2`, B.`C2`),
IFNULL(A.`C3`, B.`C3`),
IFNULL(A.`C4`, B.`C4`)
UNION
SELECT
IFNULL(A.`C1`, B.`C1`) AS `区域`,
IFNULL(A.`C2`, B.`C2`) AS `省份`,
IFNULL(A.`C3`, B.`C3`) AS `城市`,
IFNULL(A.`C4`, B.`C4`) AS `编码`,
SUM(A.`C5`) AS `表A销量`,
SUM(B.`C5`) AS `表B销量`
FROM
A RIGHT JOIN B
ON (
A.`C1` = B.`C1`AND
A.`C2` = B.`C2`AND
A.`C3` = B.`C3`AND
A.`C4` = B.`C4`
)
GROUP BY
IFNULL(A.`C1`, B.`C1`),
IFNULL(A.`C2`, B.`C2`),
IFNULL(A.`C3`, B.`C3`),
IFNULL(A.`C4`, B.`C4`);
------ ------ ------ ---------- --------- ---------
| 区域 | 省份 | 城市 | 编码| 表A销量 | 表B销量 |
------ ------ ------ ---------- --------- ---------
| 华北 | 辽宁 | 沈阳 | 20020202 |2 |5 |
| 华北 | 北京 | 北京 | 7193|7 |2 |
| 华北 | 北京 | 北京 | 8358|5 |NULL |
| 华北 | 北京 | 北京 | 9773|8 |NULL |
| 华东 | 山东 | 青岛 | 18020133 |8 |12 |
| 华东 | 甘肃 | 兰州 | 7364|NULL |3 |
| 华东 | 湖北 | 武汉 | 7512|NULL |9 |
| 华东 | 江苏 | 常州 | 7582|NULL |5 |
| 华东 | 江苏 | 淮安 | 7670|NULL |7 |
------ ------ ------ ---------- --------- ---------
9 rows in set (0.00 sec)
MYSQL如何得到补集.当然是要最高效率的方案让group by 使用索引而不创建临时表,
使用索引的前提条件是:所有GROUP BY列引用同一索引的属性 , 并且索引按顺序保存其关键字(B-树索引,不是HASH索引)
至于DISTINCT 和GROUP BY哪个效率更高?
理论上 DISTINCT操作只需要找出所有不同的值就可以了 。而GROUP BY操作还要为其他聚集函数进行准备工作 。从这一点上将,GROUP BY操作做的工作应该比DISTINCT所做的工作要多一些 。
但是实际上,DISTINCT操作 , 它会读取了所有记录;GROUP BY需要读取的记录数量与分组的组数量一样多,比实际存在的记录数目要少很多 。
【mysql差集怎么操作 mysql差集语句】mysql差集怎么操作的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql差集语句、mysql差集怎么操作的信息别忘了在本站进行查找喔 。

    推荐阅读