数据库Oracle与Mysql语法对比:集合运算

本文详细介绍了SQL中的集合操作,包括并集(UNION、UNION ALL)、交集(INTERSECT)和差集(MINUS、NOT IN)的使用方法,并通过具体实例展示了如何运用这些操作来处理数据库查询任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合并集

Oracle&&Mysql关键字:

UNION 并集,合并两个操作的结果,去掉重复的部分
UNION ALL 并集,合并两个操作的结果,保留重复的部分

例:查询部门 10 和部门 20 的所有职务

   Oracle&&Mysql:

    SELECT  job FROM emp WHERE deptno=10 
    UNION 
    SELECT  job FROM emp WHERE deptno=20; 

集合交集:

oracle关键字:

INTERSECT 交集,取两个操作结果中相同的部分

例:查询部门 10 和 20 中是否有相同的职务和工资。(相同表)

    Oracle:
    SELECT  job,sal FROM emp WHERE deptno=10 
    INTERSECT 
    SELECT  job,sal FROM emp WHERE deptno=20; 

    Mysql:
    SELECT  job,sal 
    FROM emp 
    WHERE deptno=20 and DEPTNO = 10;

不同表:

select A.* from A 
inner join B 
using(name,addr,age);//交集元素

集合的差集

Oracle关键字:
MINUS 差集,从前面的操作结果中去掉与后面操作结果相同的部分

Mysql关键字: not in

例:查询只在部门表中出现,但没有在雇员表中出现的部门编号。

Oracle:
SELECT  deptno FROM dept 
MINUS 
SELECT  deptno FROM emp ; 

Mysql:
SELECT dept.DEPTNO
FROM dept 
left join emp
using(deptno) //或者:on dept.DEPTNO = emp.DEPTNO
where emp.DEPTNO is null;

(在A中出现没有在B中出现的,这里的left join你可以对应的换成right join的):

 select A.* 
 from A 
 left join B 
 using(name,addr,age) 
 where B.name is NULL;

(在B中出现没有在A中出现的):

select B.* 
from B 
left join A 
using(name,addr,age)
 where A.id is NULL;

(A中的数据没有在B中特定部分中存在的):


select A.name,A.addr,A.age 
from A 
left join (select * from B where name='kenthy') as C 
using(name, addr, age) 
where C.id is NULL;

例:部门 10 和 20 中不相同的职务(即部门 10 中有、部门 20 中没有和部门
20 中有、部门 10 中没有的职务

Mysql:
(select distinct JOB
from emp
where deptno =10 
and job not in(select distinct job
from emp
where deptno =20))
union 
(select distinct job
from emp
where deptno =20 
and job not in(select distinct job
from emp
where deptno =10)) ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值