内连接
等值连接
显示多表均满足关联条件的数据
- 语法一:
select * from 表1 inner join 表2 on 表1.字段=表2.字段
/*查看emp表和dept表的所有员工信息*/
select * from emp e inner join dept d on e.deptno=d.deptno;
- 语法二:
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;
子查询
在查询里嵌套的查询
- 不相关联子查询
- 查询部门名为’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';
- 相关联子查询
- 查询员工编码对应的员工姓名、部门名称和部门编号
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表中工资比其上级工资高的员工信息;

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

被折叠的 条评论
为什么被折叠?



