【Oracle数据库】关联、子查询

本文详细介绍了Oracle数据库中的各种查询方式,包括内连接(等值连接、范围链接、自然连接)、外连接(左连接、右连接、全连接)、自连接、交叉连接(笛卡尔积)、子查询(不相关联子查询、相关联子查询)以及联合查询(并集、交集、补集)。此外,还讲解了模糊查询和`in`操作符的用法,帮助读者深入理解Oracle数据库的查询技巧。

内连接

等值连接

显示多表均满足关联条件的数据

  1. 语法一:
    select * from 表1 inner join 表2 on 表1.字段=表2.字段
/*查看emp表和dept表的所有员工信息*/
select * from emp e inner join dept d on e.deptno=d.deptno;
  1. 语法二:
    select * from 表1,表2 where 表1.字段=表2.字段;
/*跟上条语句的运行结果一样*/
select * from emp,dept where emp.deptno=dept.eptno;

范围链接(不等值连接)

  • 查询所有员工信息,以及薪资等级信息
select * from emp e inner join salgrade s 
on e.sal between s.losal and s.hisal;

自然连接

找到共同列名,未找到会出现[笛卡尔积][1]
select * from 表1 natural join 表2;

select * from emp e natural join salgrade s;
select * from emp natural join salgrade;
  • 查询所有数据,自然地将的dept相同的数据连接到一起
 select * from emp natural join dept
  • 查询两个字段,Oracle自然的将两个表的共同列名deptno作为两张表的关联
    举个例子,oracle会将deptno相同的ename和dname拼在一起
 select emp.ename,dept.dname from emp natural join dept;

外连接

左连接

查询出左边表所有的数据,如果右边表没有相关联的数据,就会空着

select * from dept left join emp on dept.deptno=emp.deptno;

右连接

查询出右边表所有数据,如果左边没有相关联的数据,就会空着

select * from dept right join emp on dept.deptno=emp.deptno;

全连接

查询出左右表所有的数据

select * from dept full join emp on dept.deptno=emp.deptno;

自连接

把自身看成所长表,自己个自己进行连接

  • 查询员工编号,姓名,上级的编号,上级的姓名
select t1.empno,t1.ename,t1.mgr,t2.ename from emp t1,empt2
where t1.mgr=t2.empno;

交叉连接(笛卡尔积)

select * from emp cross join dept;

子查询

在查询里嵌套的查询

  1. 不相关联子查询
  • 查询部门名为’SALES’的员工的emp表信息
select * from emp where deptno =
(select deptno from dept where dname='SALES');
  • 查询跟’SCOTT’同部门的员工(不包括)的所有员工信息
select * from emp where deptno=
(select deptno from emp where ename='SCOTT')
and ename <> 'SCOTT';
  1. 相关联子查询
  • 查询员工编码对应的员工姓名、部门名称和部门编号
select empno,ename,deptno,
(select dname from dept where deptno=t1.deptno) as '部门名称'
from emp t1;
  • 将emp表中薪资在其所在部门平均薪资以上的员工薪资改为5000
  • 查询emp表中薪资在其所在部门平均薪资以上的员工信息
  • 删除emp表中薪资在其所在部门平均薪资以上的员工信息

联合查询

只有两个列数相同的表才可以用

并集

  • union all
    把两个查询结果连接到一起,有重复记录
  • union
    把两个查询结果连接到一起,删去重复记录
select * from emp union select * from dept;

交集

  • intersect
    把两个查询结果相交的显示出来

补集

  • minus
    减去查询结果B的数据,并且减去A跟B相交的结果,显示剩余的结果
select * from emp minus select * from dept;

模糊查询

  • “_”:写几个,代表空几个位置
  • “%”:模糊数据
  • []:在某范围内的字符
  • [^]:不在某范围内的字符
  • 查询第三个字符为E的工作
select * from emp where job like '__E';
  • 查询首字母为A的员工
select * from emp where ename like 'A%';

in

  • 查询emp表中薪资等于任意部门最高薪资的员工信息

  • 查询emp表中薪资高于所有部门平均薪资的员工信息

  • 查询emp表中薪资高于任意部门平均薪资的员工信息

  • 查询emp表中工资高于其所在部门平均薪资的员工信息;

  • 查询emp表中工资比其上级工资高的员工信息;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值