MqSQLoracle数据库面试题的差集如何实现

MySQL实现差集(Minus)和交集(Intersect)
MySql只支持Union(并集)集合运算,好像也是4.0以后才有的;但是对于交集Intersect、差集Except,就没有实现了。
一般的解决方案用in和not in来解决,小量数据还可以,但数据量大了效率就很低了创建table1
/*DDL 信息*/------------
CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8创建table2
/*DDL 信息*/------------
CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8插入
INSERT INTO t1 VALUES(1,'小王',10);
INSERT INTO t1 VALUES(2,'小宋',20);
INSERT INTO t1 VALUES(3,'小白',30);
INSERT INTO t1 VALUES(4,'hello',40);
INSERT INTO t2 VALUES(1,'小王',10);
INSERT INTO t2 VALUES(2,'小宋',22);
INSERT INTO t2 VALUES(3,'小肖',31);
INSERT INTO t2 VALUES(4,'hello',40);
SELECT t1.* FROM t1
id name age
4 hello 40
SELECT t2.* FROM t2
id name age
4 hello 40
使用not in 求差集,但效率低
SELECT t1.* FROM t1
name NOT IN
(SELECT name FROM t2)
id name age
SELECT t1.id, t1.name, t1.age
LEFT JOIN t2
ON t1.id = t2.id
WHERE t1.name != t2.name
OR t1.age != t2.
id name age
30求交集,此时只有id name age 所有都一样才是符合要求的SELECT
age, COUNT(*)
FROM (SELECT id, NAME, age
SELECT id, NAME, age
GROUP BY id, NAME, age
HAVING COUNT(*) & 1
id NAME age COUNT(*)
4 hello 40 2union all和union的区别
UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。
mysql中交集,并集,差集,左连接,右连接
mysql 取差集和取交集
MySQL不支持FULL JOIN, INTERSECT和MINUS(except)的替代方法
MySQL查询交集
MySQL实现Oracle的Intersect 和 Minus
MySQL中使用INNER JOIN来实现Intersect交集操作
mysql取差集、交集、并集
MySQL Join 差集 交集
MySQL 的并集、交集和差集
没有更多推荐了,MySQL实现差集(Minus)和交集(Intersect)_数据库技术_Linux公社-Linux系统门户网站
你好,游客
MySQL实现差集(Minus)和交集(Intersect)
来源:Linux社区&
作者:壹頁書
MySQL没有实现Minus和Intersect功能,就像它也没有实现cube的功能一样。&可以用SQL实现同样的功能,就是麻烦了点。&drop table t1;&drop table t2;
create table t1(id int primary key,nickname varchar(20),playNum varchar(20));
create table t2(id int primary key,nickname varchar(20),playNum varchar(20));
insert into t1 values(1,1,10);
insert into t1 values(2,2,20);
insert into t1 values(3,3,30);
insert into t2 values(1,1,10);
insert into t2 values(2,2,200);
insert into t2 values(3,33,300);
MySQL实现交集&SELECT id, nickname, playNum, COUNT(*)&FROM (SELECT id, nickname, playNum
& & FROM t1
& & UNION ALL
& & SELECT id, nickname, playNum
& & FROM t2
GROUP BY id, nickname, playNum
HAVING COUNT(*) & 1
MySQL实现差集&SELECT t1.id, t1.nickname, t1.playNum&FROM t1 LEFT JOIN t2 ON t1.id = t2.id
WHERE t1.nickname != t2.nickname
& & OR t1.playNum != t2.playN
--------------------------------------分割线 --------------------------------------
14.04下安装MySQL
《MySQL权威指南(原书第2版)》清晰中文扫描版 PDF
Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL
Ubuntu 14.04下搭建MySQL主从服务器
Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群
Ubuntu 12.04下源代码安装MySQL5.6以及Python-MySQLdb
--------------------------------------分割线 --------------------------------------
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款你可以不聪明,但是你不可以不努力!
MqSQL数据库的差集如何实现?Minus?
MqSQL数据库的差集可以使用Minux实现,但是有些版本不支持,但是还是有解决方案的,可以通过子查询来实现,具体案例如下:
需求:查询user01表的数据,但是在user02表中没有,两个表通过主键id关联。
第一步:创建数据库表user01和数据库表user02,字段如下:
第二步:进行差集查询,使用minux关键字
第三步:使用子查询实现系统的功能
mysql取差集、交集、并集
SQLSERVER数据集合的交、并、差集运算(intersect,union,except)
数据库中差集的使用
SQLServer数据集合的交、并、差集运算
数据库差集
【Mysql】求两个表(查询结果)的差集
SQL查询:并集、差集、交集
SQL集合运算:差集、交集、并集
oracle中sql语句中多个查询结果的交集、差集和并集
用SQL取差集--5月11日的一次任务
没有更多推荐了,【mysql大数据量求差集】A表有10W+数据,B表有100W+数据,求A-B该怎么优化
[问题点数:40分,无满意结帖,结帖人ruangong1203]
本版专家分:0
结帖率 88.89%
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐事从容则有余味,人从容则有余年。
SQLSERVER数据集合的交、并、差集运算(intersect,union,except)
SQLServer中通过intersect,union,except和三个关键字对应交、并、差三种集合运算。
他们的对应关系可以参考下面图示
测试示例:
构造A,B两个数据集
(SELECT '1' tno
UNION ALL SELECT
'2' UNION ALL SELECT
'3' UNION ALL SELECT
B AS(SELECT '1' tno
UNION ALL SELECT
'2' UNION ALL SELECT
查询示例:
1 Union 取合集并过滤重复数据
--1 Union 取合集并过滤重复数据
--结果显示: 1,2,3,4,5
SELECT * FROM A
SELECT * FROM B;
2 Union all 取合集不过滤重复数据
--2 Union all 取合集不过滤重复数据
--结果显示:1,2,3,4,1,2,5
SELECT * FROM A
SELECT * FROM B;
3 Intersect 取交集(两个表中都有数据)
--3 Intersect 取交集
--结果显示:1,2
SELECT * FROM A
SELECT * FROM B;
4 except 取差集(取A-B的记录)
--4 except 取差集
--结果显示:3,4
SELECT * FROM A
SELECT * FROM B;
解决SQL Server查询中使用Union或Union All后Order by排序无效的bug(好神奇啊!!)
sqlserver 交集 并集 差集
SQL中EXCEPT和Not in的区别?
MqSQL数据库的差集如何实现?Minus?
SQLServer数据集合的交、并、差集运算
SQL Server 中关于EXCEPT和INTERSECT的用法
SqlServer 2008优化:Merge 和 Except
SQL中 EXCEPT和INTERSECT用法
SQL关键字 except和except all的含义和区别
SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)
没有更多推荐了,

我要回帖

更多关于 数据库差集 的文章

 

随机推荐